-
Notifications
You must be signed in to change notification settings - Fork 15.2k
[lldb] Make the statusline separator configurable #136611
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
@llvm/pr-subscribers-lldb Author: Adrian Prantl (adrian-prantl) ChangesAnd 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:
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;
|
JDevlieghere
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM module a test. Can you add a test to the Statusline PExpect test that changes the separator? I think with the new default you might need to update the existing one too.
3d9d4eb to
5783bec
Compare
|
✅ With the latest revision this PR passed the Python code formatter. |
|
IIUC, the |
I noticed the discrepancy between the format string ( |
5783bec to
52a9ebd
Compare
|
I renamed it to just "separator". |
JDevlieghere
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice!
And use this functionality to replace the ASCII "|" with the same full-geight line-drawing character used in diagnostics rendering on a color terminal.
52a9ebd to
97fc341
Compare
And use this functionality to replace the ASCII "|" with the same full-geight line-drawing character used in diagnostics rendering on a color terminal. (cherry picked from commit 6f1adbd) Conflicts: lldb/source/Core/Debugger.cpp
And use this functionality to replace the ASCII "|" with the same full-geight line-drawing character used in diagnostics rendering on a color terminal.
And use this functionality to replace the ASCII "|" with the same full-geight line-drawing character used in diagnostics rendering on a color terminal.