[Lldb-commits] [lldb] [lldb] Make the statusline separator configurable (PR #136611)
via lldb-commits
lldb-commits at lists.llvm.org
Mon Apr 21 13:59:45 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-lldb
Author: Adrian Prantl (adrian-prantl)
<details>
<summary>Changes</summary>
And use this functionality to replace the ASCII "|" with the same full-geight line-drawing character used in diagnostics rendering on a color terminal.
---
Full diff: https://github.com/llvm/llvm-project/pull/136611.diff
5 Files Affected:
- (modified) lldb/include/lldb/Core/Debugger.h (+3)
- (modified) lldb/include/lldb/Core/FormatEntity.h (+1)
- (modified) lldb/source/Core/CoreProperties.td (+13-4)
- (modified) lldb/source/Core/Debugger.cpp (+20-2)
- (modified) lldb/source/Core/FormatEntity.cpp (+11)
``````````diff
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;
``````````
</details>
https://github.com/llvm/llvm-project/pull/136611
More information about the lldb-commits
mailing list