mirror of
https://github.com/vim/vim.git
synced 2025-11-16 23:24:03 -05:00
patch 9.1.1471: completion: inconsistent ordering with CTRL-P
Problem: completion: inconsistent ordering with CTRL-P
(zeertzjq)
Solution: reset compl_curr_match when using CTRL-P (Girish Palya)
fixes: #17425
closes: #17434
Signed-off-by: Girish Palya <girishji@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
1c00af2a24
commit
5fbe72edda
@@ -2378,7 +2378,7 @@ ins_compl_new_leader(void)
|
||||
if (compl_match_array == NULL)
|
||||
compl_enter_selects = FALSE;
|
||||
else if (ins_compl_has_preinsert() && compl_leader.length > 0)
|
||||
ins_compl_insert(FALSE, TRUE);
|
||||
ins_compl_insert(TRUE);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -5235,6 +5235,12 @@ ins_compl_get_exp(pos_T *ini)
|
||||
|
||||
compl_started = FALSE;
|
||||
}
|
||||
|
||||
// For `^P` completion, reset `compl_curr_match` to the head to avoid
|
||||
// mixing matches from different sources.
|
||||
if (!compl_dir_forward())
|
||||
while (compl_curr_match->cp_prev)
|
||||
compl_curr_match = compl_curr_match->cp_prev;
|
||||
}
|
||||
cpt_sources_index = -1;
|
||||
compl_started = TRUE;
|
||||
@@ -5404,12 +5410,11 @@ ins_compl_expand_multiple(char_u *str)
|
||||
|
||||
/*
|
||||
* Insert the new text being completed.
|
||||
* "in_compl_func" is TRUE when called from complete_check().
|
||||
* "move_cursor" is used when 'completeopt' includes "preinsert" and when TRUE
|
||||
* cursor needs to move back from the inserted text to the compl_leader.
|
||||
*/
|
||||
void
|
||||
ins_compl_insert(int in_compl_func, int move_cursor)
|
||||
ins_compl_insert(int move_cursor)
|
||||
{
|
||||
int compl_len = get_compl_len();
|
||||
int preinsert = ins_compl_has_preinsert();
|
||||
@@ -5442,8 +5447,6 @@ ins_compl_insert(int in_compl_func, int move_cursor)
|
||||
set_vim_var_dict(VV_COMPLETED_ITEM, dict);
|
||||
}
|
||||
#endif
|
||||
if (!in_compl_func)
|
||||
compl_curr_match = compl_shown_match;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -5638,8 +5641,7 @@ ins_compl_next(
|
||||
int allow_get_expansion,
|
||||
int count, // repeat completion this many times; should
|
||||
// be at least 1
|
||||
int insert_match, // Insert the newly selected match
|
||||
int in_compl_func) // called from complete_check()
|
||||
int insert_match) // Insert the newly selected match
|
||||
{
|
||||
int num_matches = -1;
|
||||
int todo = count;
|
||||
@@ -5700,7 +5702,7 @@ ins_compl_next(
|
||||
else if (insert_match)
|
||||
{
|
||||
if (!compl_get_longest || compl_used_match)
|
||||
ins_compl_insert(in_compl_func, TRUE);
|
||||
ins_compl_insert(TRUE);
|
||||
else
|
||||
ins_compl_insert_bytes(compl_leader.string + get_compl_len(), -1);
|
||||
}
|
||||
@@ -5786,7 +5788,7 @@ ins_compl_check_keys(int frequency, int in_compl_func)
|
||||
c = safe_vgetc(); // Eat the character
|
||||
compl_shows_dir = ins_compl_key2dir(c);
|
||||
(void)ins_compl_next(FALSE, ins_compl_key2count(c),
|
||||
c != K_UP && c != K_DOWN, in_compl_func);
|
||||
c != K_UP && c != K_DOWN);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -5809,7 +5811,7 @@ ins_compl_check_keys(int frequency, int in_compl_func)
|
||||
int todo = compl_pending > 0 ? compl_pending : -compl_pending;
|
||||
|
||||
compl_pending = 0;
|
||||
(void)ins_compl_next(FALSE, todo, TRUE, in_compl_func);
|
||||
(void)ins_compl_next(FALSE, todo, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6656,7 +6658,7 @@ ins_complete(int c, int enable_pum)
|
||||
// Find next match (and following matches).
|
||||
save_w_wrow = curwin->w_wrow;
|
||||
save_w_leftcol = curwin->w_leftcol;
|
||||
n = ins_compl_next(TRUE, ins_compl_key2count(c), insert_match, FALSE);
|
||||
n = ins_compl_next(TRUE, ins_compl_key2count(c), insert_match);
|
||||
|
||||
// may undisplay the popup menu
|
||||
ins_compl_upd_pum();
|
||||
|
||||
Reference in New Issue
Block a user