diff --git a/Userland/Libraries/LibLine/Editor.cpp b/Userland/Libraries/LibLine/Editor.cpp index 798319bb32..631f0fd3ad 100644 --- a/Userland/Libraries/LibLine/Editor.cpp +++ b/Userland/Libraries/LibLine/Editor.cpp @@ -1167,7 +1167,7 @@ void Editor::handle_read_event() m_suggestion_manager.previous(); } - if (m_suggestion_manager.count() < 2) { + if (m_suggestion_manager.count() < 2 && !completion_result.avoid_committing_to_single_suggestion) { // We have none, or just one suggestion, // we should just commit that and continue // after it, as if it were auto-completed. diff --git a/Userland/Libraries/LibLine/SuggestionManager.cpp b/Userland/Libraries/LibLine/SuggestionManager.cpp index 574d3b4de2..749e37e234 100644 --- a/Userland/Libraries/LibLine/SuggestionManager.cpp +++ b/Userland/Libraries/LibLine/SuggestionManager.cpp @@ -112,6 +112,15 @@ SuggestionManager::CompletionAttemptResult SuggestionManager::attempt_completion if (m_next_suggestion_index < m_suggestions.size()) { auto& next_suggestion = m_suggestions[m_next_suggestion_index]; + if (mode == CompletePrefix && !next_suggestion.allow_commit_without_listing) { + result.new_completion_mode = CompletionMode::ShowSuggestions; + result.avoid_committing_to_single_suggestion = true; + m_last_shown_suggestion_display_length = 0; + m_last_shown_suggestion_was_complete = false; + m_last_shown_suggestion = String::empty(); + return result; + } + auto can_complete = next_suggestion.invariant_offset <= m_largest_common_suggestion_prefix_length; ssize_t actual_offset; size_t shown_length = m_last_shown_suggestion_display_length; @@ -121,7 +130,7 @@ SuggestionManager::CompletionAttemptResult SuggestionManager::attempt_completion break; case ShowSuggestions: actual_offset = 0 - m_largest_common_suggestion_prefix_length + next_suggestion.invariant_offset; - if (can_complete) + if (can_complete && next_suggestion.allow_commit_without_listing) shown_length = m_largest_common_suggestion_prefix_length + m_last_shown_suggestion.trivia_view.length(); break; default: diff --git a/Userland/Libraries/LibLine/SuggestionManager.h b/Userland/Libraries/LibLine/SuggestionManager.h index acb2c96404..f59d81516c 100644 --- a/Userland/Libraries/LibLine/SuggestionManager.h +++ b/Userland/Libraries/LibLine/SuggestionManager.h @@ -56,6 +56,7 @@ public: size_t input_offset { 0 }; size_t static_offset { 0 }; size_t invariant_offset { 0 }; + bool allow_commit_without_listing { true }; Utf32View text_view; Utf32View trivia_view; @@ -104,6 +105,8 @@ public: Vector insert {}; Optional