mirror of
https://github.com/vim/vim.git
synced 2025-09-25 03:54:15 -04:00
patch 8.0.1806: InsertCharPre causes problems for autocomplete
Problem: InsertCharPre causes problems for autocomplete. (Lifepillar) Solution: Check for InsertCharPre before calling vpeekc(). (Christian Brabandt, closes #2876)
This commit is contained in:
@@ -6185,6 +6185,8 @@ insertchar(
|
||||
* 'paste' is set)..
|
||||
* Don't do this when there an InsertCharPre autocommand is defined,
|
||||
* because we need to fire the event for every character.
|
||||
* Do the check for InsertCharPre before the call to vpeekc() because the
|
||||
* InsertCharPre autocommand could change the input buffer.
|
||||
*/
|
||||
#ifdef USE_ON_FLY_SCROLL
|
||||
dont_scroll = FALSE; /* allow scrolling here */
|
||||
@@ -6194,6 +6196,7 @@ insertchar(
|
||||
#ifdef FEAT_MBYTE
|
||||
&& (!has_mbyte || (*mb_char2len)(c) == 1)
|
||||
#endif
|
||||
&& !has_insertcharpre()
|
||||
&& vpeekc() != NUL
|
||||
&& !(State & REPLACE_FLAG)
|
||||
#ifdef FEAT_CINDENT
|
||||
@@ -6202,7 +6205,7 @@ insertchar(
|
||||
#ifdef FEAT_RIGHTLEFT
|
||||
&& !p_ri
|
||||
#endif
|
||||
&& !has_insertcharpre())
|
||||
)
|
||||
{
|
||||
#define INPUT_BUFLEN 100
|
||||
char_u buf[INPUT_BUFLEN + 1];
|
||||
|
@@ -831,4 +831,34 @@ func Test_popup_complete_backwards_ctrl_p()
|
||||
bwipe!
|
||||
endfunc
|
||||
|
||||
fun! Test_complete_o_tab()
|
||||
let s:o_char_pressed = 0
|
||||
|
||||
fun! s:act_on_text_changed()
|
||||
if s:o_char_pressed
|
||||
let s:o_char_pressed = 0
|
||||
call feedkeys("\<c-x>\<c-n>", 'i')
|
||||
endif
|
||||
endf
|
||||
|
||||
set completeopt=menu,noselect
|
||||
new
|
||||
imap <expr> <buffer> <tab> pumvisible() ? "\<c-p>" : "X"
|
||||
autocmd! InsertCharPre <buffer> let s:o_char_pressed = (v:char ==# 'o')
|
||||
autocmd! TextChangedI <buffer> call <sid>act_on_text_changed()
|
||||
call setline(1, ['hoard', 'hoax', 'hoarse', ''])
|
||||
let l:expected = ['hoard', 'hoax', 'hoarse', 'hoax', 'hoax']
|
||||
call cursor(4,1)
|
||||
call test_override("char_avail", 1)
|
||||
call feedkeys("Ahoa\<tab>\<tab>\<c-y>\<esc>", 'tx')
|
||||
call feedkeys("oho\<tab>\<tab>\<c-y>\<esc>", 'tx')
|
||||
call assert_equal(l:expected, getline(1,'$'))
|
||||
|
||||
call test_override("char_avail", 0)
|
||||
bwipe!
|
||||
set completeopt&
|
||||
delfunc s:act_on_text_changed
|
||||
endf
|
||||
|
||||
|
||||
" vim: shiftwidth=2 sts=2 expandtab
|
||||
|
@@ -761,6 +761,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
1806,
|
||||
/**/
|
||||
1805,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user