1
0
forked from aniani/vim

patch 9.0.1371: ballooneval interferes with Insert completion

Problem:    Ballooneval interferes with Insert completion.
Solution:   Ignore mouse-move events when completing. (closes #12094,
            closes #12092)
This commit is contained in:
zeertzjq
2023-03-02 17:51:32 +00:00
committed by Bram Moolenaar
parent c3f971f289
commit 440d4cb55b
3 changed files with 55 additions and 5 deletions

View File

@@ -2333,9 +2333,9 @@ ins_compl_prep(int c)
if (c != Ctrl_R && vim_is_ctrl_x_key(c)) if (c != Ctrl_R && vim_is_ctrl_x_key(c))
edit_submode_extra = NULL; edit_submode_extra = NULL;
// Ignore end of Select mode mapping and mouse scroll buttons. // Ignore end of Select mode mapping and mouse scroll/movement.
if (c == K_SELECT || c == K_MOUSEDOWN || c == K_MOUSEUP if (c == K_SELECT || c == K_MOUSEDOWN || c == K_MOUSEUP
|| c == K_MOUSELEFT || c == K_MOUSERIGHT || c == K_MOUSELEFT || c == K_MOUSERIGHT || c == K_MOUSEMOVE
|| c == K_COMMAND || c == K_SCRIPT_COMMAND) || c == K_COMMAND || c == K_SCRIPT_COMMAND)
return retval; return retval;
@@ -3491,7 +3491,7 @@ get_next_spell_completion(linenr_T lnum UNUSED)
* "cur_match_pos" for completion. The length of the match is set in "len". * "cur_match_pos" for completion. The length of the match is set in "len".
*/ */
static char_u * static char_u *
ins_comp_get_next_word_or_line( ins_compl_get_next_word_or_line(
buf_T *ins_buf, // buffer being scanned buf_T *ins_buf, // buffer being scanned
pos_T *cur_match_pos, // current match position pos_T *cur_match_pos, // current match position
int *match_len, int *match_len,
@@ -3675,7 +3675,7 @@ get_next_default_completion(ins_compl_next_state_T *st, pos_T *start_pos)
&& start_pos->col == st->cur_match_pos->col) && start_pos->col == st->cur_match_pos->col)
continue; continue;
ptr = ins_comp_get_next_word_or_line(st->ins_buf, st->cur_match_pos, ptr = ins_compl_get_next_word_or_line(st->ins_buf, st->cur_match_pos,
&len, &cont_s_ipos); &len, &cont_s_ipos);
if (ptr == NULL) if (ptr == NULL)
continue; continue;

View File

@@ -412,6 +412,54 @@ func Test_completefunc_info()
set completefunc& set completefunc&
endfunc endfunc
" Test that mouse scrolling/movement should not interrupt completion.
func Test_mouse_scroll_move_during_completion()
new
com! -buffer TestCommand1 echo 'TestCommand1'
com! -buffer TestCommand2 echo 'TestCommand2'
call setline(1, ['', '', '', '', ''])
call cursor(5, 1)
" Without completion menu scrolling can move text.
set completeopt-=menu wrap
call feedkeys("ccT\<C-X>\<C-V>\<ScrollWheelDown>\<C-V>", 'tx')
call assert_equal('TestCommand2', getline('.'))
call assert_notequal(1, winsaveview().topline)
call feedkeys("ccT\<C-X>\<C-V>\<ScrollWheelUp>\<C-V>", 'tx')
call assert_equal('TestCommand2', getline('.'))
call assert_equal(1, winsaveview().topline)
set nowrap
call feedkeys("ccT\<C-X>\<C-V>\<ScrollWheelRight>\<C-V>", 'tx')
call assert_equal('TestCommand2', getline('.'))
call assert_notequal(0, winsaveview().leftcol)
call feedkeys("ccT\<C-X>\<C-V>\<ScrollWheelLeft>\<C-V>", 'tx')
call assert_equal('TestCommand2', getline('.'))
call assert_equal(0, winsaveview().leftcol)
call feedkeys("ccT\<C-X>\<C-V>\<MouseMove>\<C-V>", 'tx')
call assert_equal('TestCommand2', getline('.'))
" With completion menu scrolling cannot move text.
set completeopt+=menu wrap
call feedkeys("ccT\<C-X>\<C-V>\<ScrollWheelDown>\<C-V>", 'tx')
call assert_equal('TestCommand2', getline('.'))
call assert_equal(1, winsaveview().topline)
call feedkeys("ccT\<C-X>\<C-V>\<ScrollWheelUp>\<C-V>", 'tx')
call assert_equal('TestCommand2', getline('.'))
call assert_equal(1, winsaveview().topline)
set nowrap
call feedkeys("ccT\<C-X>\<C-V>\<ScrollWheelRight>\<C-V>", 'tx')
call assert_equal('TestCommand2', getline('.'))
call assert_equal(0, winsaveview().leftcol)
call feedkeys("ccT\<C-X>\<C-V>\<ScrollWheelLeft>\<C-V>", 'tx')
call assert_equal('TestCommand2', getline('.'))
call assert_equal(0, winsaveview().leftcol)
call feedkeys("ccT\<C-X>\<C-V>\<MouseMove>\<C-V>", 'tx')
call assert_equal('TestCommand2', getline('.'))
bwipe!
set completeopt& wrap&
endfunc
" Check that when using feedkeys() typeahead does not interrupt searching for " Check that when using feedkeys() typeahead does not interrupt searching for
" completions. " completions.
func Test_compl_feedkeys() func Test_compl_feedkeys()

View File

@@ -695,6 +695,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1371,
/**/ /**/
1370, 1370,
/**/ /**/