[Lldb-commits] [lldb] 6f1adbd - [lldb] Make the statusline separator configurable (#136611)
via lldb-commits
lldb-commits at lists.llvm.org
Tue Apr 22 12:59:48 PDT 2025
Author: Adrian Prantl
Date: 2025-04-22T12:59:46-07:00
New Revision: 6f1adbdb2b6f21d81e491c9ddd307fca0d183850
URL: https://github.com/llvm/llvm-project/commit/6f1adbdb2b6f21d81e491c9ddd307fca0d183850
DIFF: https://github.com/llvm/llvm-project/commit/6f1adbdb2b6f21d81e491c9ddd307fca0d183850.diff
LOG: [lldb] Make the statusline separator configurable (#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.
Added:
Modified:
lldb/include/lldb/Core/Debugger.h
lldb/include/lldb/Core/FormatEntity.h
lldb/source/Core/CoreProperties.td
lldb/source/Core/Debugger.cpp
lldb/source/Core/FormatEntity.cpp
lldb/test/API/functionalities/statusline/TestStatusline.py
Removed:
################################################################################
diff --git a/lldb/include/lldb/Core/Debugger.h b/lldb/include/lldb/Core/Debugger.h
index 00b86f6c133b6..c2e7d6f1d64b7 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 GetSeparator() const;
+ bool SetSeparator(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..f5d86b663de13 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 Separator : Property<"separator", "String">,
+ Global,
+ DefaultStringValue<"│ ">,
+ Desc<"A separator used, e.g., in the status line.">;
+ 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 7b60e1a14f414..b572210f25603 100644
--- a/lldb/source/Core/Debugger.cpp
+++ b/lldb/source/Core/Debugger.cpp
@@ -502,6 +502,19 @@ bool Debugger::SetStatuslineFormat(const FormatEntity::Entry &format) {
return ret;
}
+llvm::StringRef Debugger::GetSeparator() const {
+ constexpr uint32_t idx = ePropertySeparator;
+ return GetPropertyAtIndexAs<llvm::StringRef>(
+ idx, g_debugger_properties[idx].default_cstr_value);
+}
+
+bool Debugger::SetSeparator(llvm::StringRef s) {
+ constexpr uint32_t idx = ePropertySeparator;
+ bool ret = SetPropertyAtIndex(idx, s);
+ RedrawStatusline();
+ return ret;
+}
+
bool Debugger::GetUseAutosuggestion() const {
const uint32_t idx = ePropertyShowAutosuggestion;
return GetPropertyAtIndexAs<bool>(
@@ -1001,11 +1014,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);
+ SetSeparator("| ");
+ };
+
+ 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..874478340003c 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,13 @@ bool FormatEntity::Format(const Entry &entry, Stream &s,
}
}
return false;
+
+ case Entry::Type::Separator:
+ if (Target *target = Target::GetTargetFromContexts(exe_ctx, sc)) {
+ s << target->GetDebugger().GetSeparator();
+ return true;
+ }
+ return false;
}
return false;
diff --git a/lldb/test/API/functionalities/statusline/TestStatusline.py b/lldb/test/API/functionalities/statusline/TestStatusline.py
index 489c0371b11d8..dcededdb11e39 100644
--- a/lldb/test/API/functionalities/statusline/TestStatusline.py
+++ b/lldb/test/API/functionalities/statusline/TestStatusline.py
@@ -32,6 +32,7 @@ def test(self):
# Enable the statusline and check for the control character and that we
# can see the target, the location and the stop reason.
+ self.expect('set set separator "| "')
self.expect(
"set set show-statusline true",
[
@@ -46,10 +47,12 @@ def test(self):
self.child.setwinsize(terminal_height, terminal_width)
# Change the format.
+ self.expect('set set separator "S"')
self.expect(
- 'set set statusline-format "target = {${target.file.basename}}"',
- ["target = a.out"],
+ 'set set statusline-format "target = {${target.file.basename}} ${separator}"',
+ ["target = a.out S"],
)
+ self.expect('set set separator "| "')
# Hide the statusline and check or the control character.
self.expect(
More information about the lldb-commits
mailing list