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