diff options
| author | Johannes Altmanninger <aclopte@gmail.com> | 2023-11-18 09:12:05 +0100 |
|---|---|---|
| committer | Johannes Altmanninger <aclopte@gmail.com> | 2023-12-02 10:43:59 +0100 |
| commit | 658c3385a924ddfa784ab3346a56e2d96c9155a3 (patch) | |
| tree | fe80f7934d8a4de04a9674857adfe42cc6a67e04 /src/ranked_match.hh | |
| parent | d6215dc25d02d1f8d958d3f5ee5c2d8b39d48e77 (diff) | |
ranked match: prefer input order over alphabetical order for user-specified completions
When using either of
set-option g completers option=my_option
prompt -shell-script-candidates ...
While the search text is empty, the completions will be sorted
alphabetically.
This is bad because it means the most important entries are not listed
first, making them harder to select or even spot.
Let's apply input order before resorting to sorting alphabetically.
In theory there is a more elegant solution: sort candidates (except
if they're user input) before passing them to RankedMatch, and then
always use stable sort. However that doesn't work because we use a
heap which doesn't support stable sort.
Closes #1709, #4813
Diffstat (limited to 'src/ranked_match.hh')
| -rw-r--r-- | src/ranked_match.hh | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/ranked_match.hh b/src/ranked_match.hh index 01afe9cd..5a58defb 100644 --- a/src/ranked_match.hh +++ b/src/ranked_match.hh @@ -31,6 +31,8 @@ struct RankedMatch explicit operator bool() const { return m_matches; } + void set_input_sequence_number(size_t i) { m_input_sequence_number = i; } + private: template<typename TestFunc> RankedMatch(StringView candidate, StringView query, TestFunc test); @@ -54,6 +56,7 @@ private: Flags m_flags = Flags::None; int m_word_boundary_match_count = 0; int m_max_index = 0; + size_t m_input_sequence_number = 0; }; } |
