From 3b7a4f233bd53eb901904992227be3fffe5e621a Mon Sep 17 00:00:00 2001 From: Gabriel Cruz Date: Fri, 12 Apr 2019 03:19:26 +0200 Subject: vim-patch:8.0.0714: cmdline redraw during timer #9835 vim-patch:8.0.0714: when a timer causes a command line redraw " goes missing Problem: When a timer causes a command line redraw the " that is displayed for CTRL-R goes missing. Solution: Remember an extra character to display. https://github.com/vim/vim/commit/a92522fbf3a49d06e08caf010f7d7b0f58d2e131 vim-patch:8.0.0720: unfinished mapping not displayed when running timer Problem: Unfinished mapping not displayed when running timer. Solution: Also use the extra_char while waiting for a mapping and digraph. (closes vim/vim#1844) https://github.com/vim/vim/commit/6a77d2667e982655f6adacee774ee7aa2581bd8a close #9835 --- src/nvim/ex_getln.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'src/nvim') diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c index 327a1c4368..3de7204fde 100644 --- a/src/nvim/ex_getln.c +++ b/src/nvim/ex_getln.c @@ -1447,6 +1447,9 @@ static int command_line_handle_key(CommandLineState *s) && ccline.cmdbuff[ccline.cmdpos - 1] != ' '); set_cmdspos_cursor(); + if (ccline.special_char != NUL) { + putcmdline(ccline.special_char, ccline.special_shift); + } return command_line_not_changed(s); @@ -1704,6 +1707,7 @@ static int command_line_handle_key(CommandLineState *s) putcmdline('^', true); s->c = get_literal(); // get next (two) character(s) s->do_abbr = false; // don't do abbreviation now + ccline.special_char = NUL; // may need to remove ^ when composing char was typed if (enc_utf8 && utf_iscomposing(s->c) && !cmd_silent) { if (ui_has(kUICmdline)) { @@ -1721,6 +1725,7 @@ static int command_line_handle_key(CommandLineState *s) s->ignore_drag_release = true; putcmdline('?', true); s->c = get_digraph(true); + ccline.special_char = NUL; if (s->c != NUL) { break; @@ -3082,15 +3087,13 @@ void putcmdline(int c, int shift) draw_cmdline(ccline.cmdpos, ccline.cmdlen - ccline.cmdpos); } msg_no_more = false; - } else { - ccline.special_char = c; - ccline.special_shift = shift; - if (ccline.redraw_state != kCmdRedrawAll) { + } else if (ccline.redraw_state != kCmdRedrawAll) { ui_call_cmdline_special_char(cchar_to_string((char)(c)), shift, ccline.level); - } } cursorcmd(); + ccline.special_char = c; + ccline.special_shift = shift; ui_cursor_shape(); } @@ -3108,6 +3111,7 @@ void unputcmdline(void) } msg_no_more = false; cursorcmd(); + ccline.special_char = NUL; ui_cursor_shape(); } @@ -3468,6 +3472,10 @@ void redrawcmd(void) set_cmdspos_cursor(); + if (ccline.special_char != NUL) { + putcmdline(ccline.special_char, ccline.special_shift); + } + /* * An emsg() before may have set msg_scroll. This is used in normal mode, * in cmdline mode we can reset them now. -- cgit