vim-patch:7.4.1961

Problem:    When 'insertmode' is reset while doing completion the popup menu
            remains even though Vim is in Normal mode.
Solution:   Ignore stop_insert_mode when the popup menu is visible.  Don't set
            stop_insert_mode when 'insertmode' was already off. (Christian
            Brabandt)

00672e1d3f
This commit is contained in:
Jurica Bradaric 2016-08-27 21:24:46 +02:00
parent 68bcb32ec4
commit e74c2334f2
4 changed files with 38 additions and 3 deletions

View File

@ -502,7 +502,7 @@ static int insert_check(VimState *state)
Insstart_orig = Insstart; Insstart_orig = Insstart;
} }
if (stop_insert_mode) { if (stop_insert_mode && !pum_visible()) {
// ":stopinsert" used or 'insertmode' reset // ":stopinsert" used or 'insertmode' reset
s->count = 0; s->count = 0;
return 0; // exit insert mode return 0; // exit insert mode

View File

@ -3661,7 +3661,7 @@ set_bool_option (
if ((State & INSERT) == 0) if ((State & INSERT) == 0)
need_start_insertmode = TRUE; need_start_insertmode = TRUE;
stop_insert_mode = FALSE; stop_insert_mode = FALSE;
} else { } else if (old_value) { // only reset if it was set previously
need_start_insertmode = FALSE; need_start_insertmode = FALSE;
stop_insert_mode = TRUE; stop_insert_mode = TRUE;
if (restart_edit != 0 && mode_displayed) if (restart_edit != 0 && mode_displayed)

View File

@ -28,3 +28,38 @@ func Test_noinsert_complete()
set completeopt-=noinsert set completeopt-=noinsert
iunmap <F5> iunmap <F5>
endfunc endfunc
let g:months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
let g:setting = ''
func ListMonths()
if g:setting != ''
exe ":set" g:setting
endif
call complete(col('.'), g:months)
return ''
endfunc
func! Test_popup_completion_insertmode()
inoremap <F5> <C-R>=ListMonths()<CR>
new
call feedkeys("a\<F5>\<down>\<enter>\<esc>", 'tx')
call assert_equal('February', getline(1))
%d
let g:setting = 'noinsertmode'
call feedkeys("a\<F5>\<down>\<enter>\<esc>", 'tx')
call assert_equal('February', getline(1))
call assert_false(pumvisible())
%d
let g:setting = ''
call feedkeys("a\<F5>". repeat("\<c-n>",12)."\<enter>\<esc>", 'tx')
call assert_equal('', getline(1))
%d
call feedkeys("a\<F5>\<c-p>\<enter>\<esc>", 'tx')
call assert_equal('', getline(1))
%d
call feedkeys("a\<F5>\<c-p>\<c-p>\<enter>\<esc>", 'tx')
call assert_equal('December', getline(1))
bwipe!
iunmap <F5>
endfunc

View File

@ -480,7 +480,7 @@ static int included_patches[] = {
// 1964, // 1964,
// 1963 NA // 1963 NA
// 1962, // 1962,
// 1961, 1961,
1960, 1960,
// 1959 NA // 1959 NA
// 1958 NA // 1958 NA