vim-patch:8.0.0172

Problem:    The command selected in the command line window is not executed.
            (Andrey Starodubtsev)
Solution:   Save and restore the command line at a lower level. (closes vim/vim#1370)

1d669c233c
This commit is contained in:
Justin M. Keyes 2017-03-21 23:17:10 +01:00
parent b82e3358e0
commit 01bf78971c
2 changed files with 21 additions and 8 deletions

View File

@ -698,9 +698,7 @@ static int command_line_execute(VimState *state, int key)
if (s->c == cedit_key || s->c == K_CMDWIN) { if (s->c == cedit_key || s->c == K_CMDWIN) {
if (ex_normal_busy == 0 && got_int == false) { if (ex_normal_busy == 0 && got_int == false) {
// Open a window to edit the command line (and history). // Open a window to edit the command line (and history).
save_cmdline(&s->save_ccline);
s->c = ex_window(); s->c = ex_window();
restore_cmdline(&s->save_ccline);
s->some_key_typed = true; s->some_key_typed = true;
} }
} else { } else {
@ -5229,10 +5227,8 @@ static int ex_window(void)
invalidate_botline(); invalidate_botline();
redraw_later(SOME_VALID); redraw_later(SOME_VALID);
/* Save the command line info, can be used recursively. */ // Save the command line info, can be used recursively.
save_ccline = ccline; save_cmdline(&save_ccline);
ccline.cmdbuff = NULL;
ccline.cmdprompt = NULL;
/* No Ex mode here! */ /* No Ex mode here! */
exmode_active = 0; exmode_active = 0;
@ -5266,8 +5262,8 @@ static int ex_window(void)
/* Restore KeyTyped in case it is modified by autocommands */ /* Restore KeyTyped in case it is modified by autocommands */
KeyTyped = save_KeyTyped; KeyTyped = save_KeyTyped;
/* Restore the command line info. */ // Restore the command line info.
ccline = save_ccline; restore_cmdline(&save_ccline);
cmdwin_type = 0; cmdwin_type = 0;
exmode_active = save_exmode; exmode_active = save_exmode;

View File

@ -63,3 +63,20 @@ function Test_History()
call assert_equal(-1, histnr('abc')) call assert_equal(-1, histnr('abc'))
call assert_fails('call histnr([])', 'E730:') call assert_fails('call histnr([])', 'E730:')
endfunction endfunction
function Test_Search_history_window()
new
call setline(1, ['a', 'b', 'a', 'b'])
1
call feedkeys("/a\<CR>", 'xt')
call assert_equal('a', getline('.'))
1
call feedkeys("/b\<CR>", 'xt')
call assert_equal('b', getline('.'))
1
" select the previous /a command
call feedkeys("q/kk\<CR>", 'x!')
call assert_equal('a', getline('.'))
call assert_equal('a', @/)
bwipe!
endfunc