diff --git a/Userland/Libraries/LibLine/SuggestionManager.cpp b/Userland/Libraries/LibLine/SuggestionManager.cpp index d569de39a5..e6f00b3860 100644 --- a/Userland/Libraries/LibLine/SuggestionManager.cpp +++ b/Userland/Libraries/LibLine/SuggestionManager.cpp @@ -9,13 +9,15 @@ namespace Line { -CompletionSuggestion::CompletionSuggestion(StringView completion, StringView trailing_trivia, Style style) +CompletionSuggestion::CompletionSuggestion(StringView completion, StringView trailing_trivia, StringView display_trivia, Style style) : style(style) , text_string(completion) + , display_trivia_string(display_trivia) , is_valid(true) { Utf8View text_u8 { completion }; Utf8View trivia_u8 { trailing_trivia }; + Utf8View display_u8 { display_trivia }; for (auto cp : text_u8) text.append(cp); @@ -23,8 +25,12 @@ CompletionSuggestion::CompletionSuggestion(StringView completion, StringView tra for (auto cp : trivia_u8) this->trailing_trivia.append(cp); + for (auto cp : display_u8) + this->display_trivia.append(cp); + text_view = Utf32View { text.data(), text.size() }; trivia_view = Utf32View { this->trailing_trivia.data(), this->trailing_trivia.size() }; + display_trivia_view = Utf32View { this->display_trivia.data(), this->display_trivia.size() }; } void SuggestionManager::set_suggestions(Vector&& suggestions) @@ -36,6 +42,7 @@ void SuggestionManager::set_suggestions(Vector&& suggestio VERIFY(suggestion.is_valid); suggestion.text_view = { suggestion.text.data(), suggestion.text.size() }; suggestion.trivia_view = { suggestion.trailing_trivia.data(), suggestion.trailing_trivia.size() }; + suggestion.display_trivia_view = { suggestion.display_trivia.data(), suggestion.display_trivia.size() }; } size_t common_suggestion_prefix { 0 }; diff --git a/Userland/Libraries/LibLine/SuggestionManager.h b/Userland/Libraries/LibLine/SuggestionManager.h index b3282cf7f9..b5d9d4212b 100644 --- a/Userland/Libraries/LibLine/SuggestionManager.h +++ b/Userland/Libraries/LibLine/SuggestionManager.h @@ -36,12 +36,12 @@ public: { } - CompletionSuggestion(StringView completion, StringView trailing_trivia) - : CompletionSuggestion(completion, trailing_trivia, {}) + CompletionSuggestion(StringView completion, StringView trailing_trivia, StringView display_trivia = "") + : CompletionSuggestion(completion, trailing_trivia, display_trivia, {}) { } - CompletionSuggestion(StringView completion, StringView trailing_trivia, Style style); + CompletionSuggestion(StringView completion, StringView trailing_trivia, StringView display_trivia, Style style); bool operator==(CompletionSuggestion const& suggestion) const { @@ -50,6 +50,7 @@ public: Vector text; Vector trailing_trivia; + Vector display_trivia; Style style; size_t start_index { 0 }; size_t input_offset { 0 }; @@ -58,7 +59,9 @@ public: Utf32View text_view; Utf32View trivia_view; + Utf32View display_trivia_view; String text_string; + String display_trivia_string; bool is_valid { false }; }; diff --git a/Userland/Libraries/LibLine/XtermSuggestionDisplay.cpp b/Userland/Libraries/LibLine/XtermSuggestionDisplay.cpp index 638fa21db9..30723665d2 100644 --- a/Userland/Libraries/LibLine/XtermSuggestionDisplay.cpp +++ b/Userland/Libraries/LibLine/XtermSuggestionDisplay.cpp @@ -22,11 +22,13 @@ void XtermSuggestionDisplay::display(SuggestionManager const& manager) size_t longest_suggestion_length = 0; size_t longest_suggestion_byte_length = 0; + size_t longest_suggestion_byte_length_without_trivia = 0; manager.set_start_index(0); manager.for_each_suggestion([&](auto& suggestion, auto) { - longest_suggestion_length = max(longest_suggestion_length, suggestion.text_view.length()); - longest_suggestion_byte_length = max(longest_suggestion_byte_length, suggestion.text_string.length()); + longest_suggestion_length = max(longest_suggestion_length, suggestion.text_view.length() + suggestion.display_trivia_view.length()); + longest_suggestion_byte_length = max(longest_suggestion_byte_length, suggestion.text_string.length() + suggestion.display_trivia_string.length()); + longest_suggestion_byte_length_without_trivia = max(longest_suggestion_byte_length_without_trivia, suggestion.text_string.length()); return IterationDecision::Continue; }); @@ -114,8 +116,10 @@ void XtermSuggestionDisplay::display(SuggestionManager const& manager) if (spans_entire_line) { num_printed += m_num_columns; stderr_stream.write(suggestion.text_string.bytes()); + stderr_stream.write(suggestion.display_trivia_string.bytes()); } else { - stderr_stream.write(String::formatted("{: <{}}", suggestion.text_string, longest_suggestion_byte_length + 2).bytes()); + auto field = String::formatted("{: <{}} {}", suggestion.text_string, longest_suggestion_byte_length_without_trivia, suggestion.display_trivia_string); + stderr_stream.write(String::formatted("{: <{}}", field, longest_suggestion_byte_length + 2).bytes()); num_printed += longest_suggestion_length + 2; }