https://github.com/adrian-prantl created 
https://github.com/llvm/llvm-project/pull/136611

And use this functionality to replace the ASCII "|" with the same full-geight 
line-drawing character used in diagnostics rendering on a color terminal.

>From 3d9d4eba319b33072113ca333d07099be2fba09c Mon Sep 17 00:00:00 2001
From: Adrian Prantl <apra...@apple.com>
Date: Mon, 21 Apr 2025 13:56:28 -0700
Subject: [PATCH] [lldb] Make the statusline separator configurable

And use this functionality to replace the ASCII "|" with the same
full-geight line-drawing character used in diagnostics rendering on a
color terminal.
---
 lldb/include/lldb/Core/Debugger.h     |  3 +++
 lldb/include/lldb/Core/FormatEntity.h |  1 +
 lldb/source/Core/CoreProperties.td    | 17 +++++++++++++----
 lldb/source/Core/Debugger.cpp         | 22 ++++++++++++++++++++--
 lldb/source/Core/FormatEntity.cpp     | 11 +++++++++++
 5 files changed, 48 insertions(+), 6 deletions(-)

diff --git a/lldb/include/lldb/Core/Debugger.h 
b/lldb/include/lldb/Core/Debugger.h
index 00b86f6c133b6..ffa1b37338398 100644
--- a/lldb/include/lldb/Core/Debugger.h
+++ b/lldb/include/lldb/Core/Debugger.h
@@ -303,6 +303,9 @@ class Debugger : public 
std::enable_shared_from_this<Debugger>,
   const FormatEntity::Entry *GetStatuslineFormat() const;
   bool SetStatuslineFormat(const FormatEntity::Entry &format);
 
+  llvm::StringRef GetStatuslineSeparator() const;
+  bool SetStatuslineSeparator(llvm::StringRef s);
+
   llvm::StringRef GetShowProgressAnsiPrefix() const;
 
   llvm::StringRef GetShowProgressAnsiSuffix() const;
diff --git a/lldb/include/lldb/Core/FormatEntity.h 
b/lldb/include/lldb/Core/FormatEntity.h
index c3f147ea3a7a2..f6c3bd981e03a 100644
--- a/lldb/include/lldb/Core/FormatEntity.h
+++ b/lldb/include/lldb/Core/FormatEntity.h
@@ -103,6 +103,7 @@ struct Entry {
     CurrentPCArrow,
     ProgressCount,
     ProgressMessage,
+    Separator,
   };
 
   struct Definition {
diff --git a/lldb/source/Core/CoreProperties.td 
b/lldb/source/Core/CoreProperties.td
index af9eb139f0921..a323f019f88a4 100644
--- a/lldb/source/Core/CoreProperties.td
+++ b/lldb/source/Core/CoreProperties.td
@@ -176,10 +176,19 @@ let Definition = "debugger" in {
     Global,
     DefaultTrue,
     Desc<"Whether to show a statusline at the bottom of the terminal.">;
-  def StatuslineFormat: Property<"statusline-format", "FormatEntity">,
-    Global,
-    DefaultStringValue<"${ansi.negative}{${target.file.basename}}{ | 
${line.file.basename}:${line.number}:${line.column}}{ | ${thread.stop-reason}}{ 
| {${progress.count} }${progress.message}}">,
-    Desc<"The default statusline format string.">;
+  def StatuslineSeparator : Property<"statusline-separator", "String">,
+                            Global,
+                            DefaultStringValue<"│ ">,
+                            Desc<"The default statusline format string.">;
+  def StatuslineFormat
+      : Property<"statusline-format", "FormatEntity">,
+        Global,
+        DefaultStringValue<
+            "${ansi.negative}{${target.file.basename}}{ "
+            "${separator}${line.file.basename}:${line.number}:${line.column}}{ 
"
+            "${separator}${thread.stop-reason}}{ "
+            "${separator}{${progress.count} }${progress.message}}">,
+        Desc<"The default statusline format string.">;
   def UseSourceCache: Property<"use-source-cache", "Boolean">,
     Global,
     DefaultTrue,
diff --git a/lldb/source/Core/Debugger.cpp b/lldb/source/Core/Debugger.cpp
index 8fe80b3841883..f317dcd483c2b 100644
--- a/lldb/source/Core/Debugger.cpp
+++ b/lldb/source/Core/Debugger.cpp
@@ -500,6 +500,19 @@ bool Debugger::SetStatuslineFormat(const 
FormatEntity::Entry &format) {
   return ret;
 }
 
+llvm::StringRef Debugger::GetStatuslineSeparator() const {
+  constexpr uint32_t idx = ePropertyStatuslineSeparator;
+  return GetPropertyAtIndexAs<llvm::StringRef>(
+      idx, g_debugger_properties[idx].default_cstr_value);
+}
+
+bool Debugger::SetStatuslineSeparator(llvm::StringRef s) {
+  constexpr uint32_t idx = ePropertyStatuslineSeparator;
+  bool ret = SetPropertyAtIndex(idx, s);
+  RedrawStatusline();
+  return ret;
+}
+
 bool Debugger::GetUseAutosuggestion() const {
   const uint32_t idx = ePropertyShowAutosuggestion;
   return GetPropertyAtIndexAs<bool>(
@@ -999,11 +1012,16 @@ Debugger::Debugger(lldb::LogOutputCallback log_callback, 
void *baton)
 
   // Turn off use-color if this is a dumb terminal.
   const char *term = getenv("TERM");
-  if (term && !strcmp(term, "dumb"))
+  auto disable_color = [&]() {
     SetUseColor(false);
+    SetStatuslineSeparator("| ");
+  };
+
+  if (term && !strcmp(term, "dumb"))
+    disable_color();
   // Turn off use-color if we don't write to a terminal with color support.
   if (!GetOutputFileSP()->GetIsTerminalWithColors())
-    SetUseColor(false);
+    disable_color();
 
   if (Diagnostics::Enabled()) {
     m_diagnostics_callback_id = Diagnostics::Instance().AddCallback(
diff --git a/lldb/source/Core/FormatEntity.cpp 
b/lldb/source/Core/FormatEntity.cpp
index fc4359d7d310a..4ce889acd4d8b 100644
--- a/lldb/source/Core/FormatEntity.cpp
+++ b/lldb/source/Core/FormatEntity.cpp
@@ -266,6 +266,7 @@ constexpr Definition g_top_level_entries[] = {
                                   g_var_child_entries, true),
     Entry::DefinitionWithChildren("progress", EntryType::Invalid,
                                   g_progress_child_entries),
+    Definition("separator", EntryType::Separator),
 };
 
 constexpr Definition g_root = Entry::DefinitionWithChildren(
@@ -367,6 +368,7 @@ const char *FormatEntity::Entry::TypeToCString(Type t) {
     ENUM_TO_CSTR(CurrentPCArrow);
     ENUM_TO_CSTR(ProgressCount);
     ENUM_TO_CSTR(ProgressMessage);
+    ENUM_TO_CSTR(Separator);
   }
   return "???";
 }
@@ -1901,6 +1903,15 @@ bool FormatEntity::Format(const Entry &entry, Stream &s,
       }
     }
     return false;
+
+  case Entry::Type::Separator:
+    if (Target *target = Target::GetTargetFromContexts(exe_ctx, sc)) {
+      llvm::StringRef sep = target->GetDebugger().GetStatuslineSeparator();
+      if (!sep.empty())
+        s << sep;
+      return true;
+    }
+    return false;
   }
 
   return false;

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to