aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2017-03-21 23:17:10 +0100
committerJustin M. Keyes <justinkz@gmail.com>2017-03-22 18:43:00 +0100
commit01bf78971cea43938e01439ae6d4687bc97196ea (patch)
treefc1f383ae092ca752e8797cac651b9237fa7d1b8 /src
parentb82e3358e006264187f104bb0321104621bcc811 (diff)
downloadrneovim-01bf78971cea43938e01439ae6d4687bc97196ea.tar.gz
rneovim-01bf78971cea43938e01439ae6d4687bc97196ea.tar.bz2
rneovim-01bf78971cea43938e01439ae6d4687bc97196ea.zip
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) https://github.com/vim/vim/commit/1d669c233c97486555a34f7d3f069068d9ebdb63
Diffstat (limited to 'src')
-rw-r--r--src/nvim/ex_getln.c12
-rw-r--r--src/nvim/testdir/test_history.vim17
2 files changed, 21 insertions, 8 deletions
diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c
index d6e003a82f..2600f484dc 100644
--- a/src/nvim/ex_getln.c
+++ b/src/nvim/ex_getln.c
@@ -698,9 +698,7 @@ static int command_line_execute(VimState *state, int key)
if (s->c == cedit_key || s->c == K_CMDWIN) {
if (ex_normal_busy == 0 && got_int == false) {
// Open a window to edit the command line (and history).
- save_cmdline(&s->save_ccline);
s->c = ex_window();
- restore_cmdline(&s->save_ccline);
s->some_key_typed = true;
}
} else {
@@ -5229,10 +5227,8 @@ static int ex_window(void)
invalidate_botline();
redraw_later(SOME_VALID);
- /* Save the command line info, can be used recursively. */
- save_ccline = ccline;
- ccline.cmdbuff = NULL;
- ccline.cmdprompt = NULL;
+ // Save the command line info, can be used recursively.
+ save_cmdline(&save_ccline);
/* No Ex mode here! */
exmode_active = 0;
@@ -5266,8 +5262,8 @@ static int ex_window(void)
/* Restore KeyTyped in case it is modified by autocommands */
KeyTyped = save_KeyTyped;
- /* Restore the command line info. */
- ccline = save_ccline;
+ // Restore the command line info.
+ restore_cmdline(&save_ccline);
cmdwin_type = 0;
exmode_active = save_exmode;
diff --git a/src/nvim/testdir/test_history.vim b/src/nvim/testdir/test_history.vim
index ee6acfffc3..3163b344d3 100644
--- a/src/nvim/testdir/test_history.vim
+++ b/src/nvim/testdir/test_history.vim
@@ -63,3 +63,20 @@ function Test_History()
call assert_equal(-1, histnr('abc'))
call assert_fails('call histnr([])', 'E730:')
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