Mercurial > vim
diff src/screen.c @ 16374:57c37c17ff9d v8.1.1192
patch 8.1.1192: mode is not cleared when leaving Insert mode with mapped Esc
commit https://github.com/vim/vim/commit/4c25bd785aa8b565bf973cbba12ed36b76daaa4f
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Apr 20 23:38:07 2019 +0200
patch 8.1.1192: mode is not cleared when leaving Insert mode with mapped Esc
Problem: Mode is not cleared when leaving Insert mode with mapped Esc.
Solution: Clear the mode when redraw_cmdline is set. (closes https://github.com/vim/vim/issues/4269)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 20 Apr 2019 23:45:04 +0200 |
parents | 57e0f6b4a87d |
children | 840fa633ad64 |
line wrap: on
line diff
--- a/src/screen.c +++ b/src/screen.c @@ -790,7 +790,7 @@ update_screen(int type_arg) /* Clear or redraw the command line. Done last, because scrolling may * mess up the command line. */ - if (clear_cmdline || redraw_cmdline) + if (clear_cmdline || redraw_cmdline || redraw_mode) showmode(); if (no_update) @@ -857,7 +857,7 @@ update_prepare(void) static void update_finish(void) { - if (redraw_cmdline) + if (redraw_cmdline || redraw_mode) showmode(); # ifdef FEAT_SEARCH_EXTRA @@ -10128,7 +10128,7 @@ skip_showmode() || !redrawing() || (char_avail() && !KeyTyped)) { - redraw_cmdline = TRUE; // show mode later + redraw_mode = TRUE; // show mode later return TRUE; } return FALSE; @@ -10140,6 +10140,7 @@ skip_showmode() * If clear_cmdline is TRUE, clear the rest of the cmdline. * If clear_cmdline is FALSE there may be a message there that needs to be * cleared only if a mode is shown. + * If redraw_mode is TRUE show or clear the mode. * Return the length of the message (0 if no message). */ int @@ -10313,7 +10314,7 @@ showmode(void) } mode_displayed = TRUE; - if (need_clear || clear_cmdline) + if (need_clear || clear_cmdline || redraw_mode) msg_clr_eos(); msg_didout = FALSE; /* overwrite this message */ length = msg_col; @@ -10323,6 +10324,11 @@ showmode(void) else if (clear_cmdline && msg_silent == 0) /* Clear the whole command line. Will reset "clear_cmdline". */ msg_clr_cmdline(); + else if (redraw_mode) + { + msg_pos_mode(); + msg_clr_eos(); + } #ifdef FEAT_CMDL_INFO /* In Visual mode the size of the selected area must be redrawn. */ @@ -10335,6 +10341,7 @@ showmode(void) win_redr_ruler(lastwin, TRUE, FALSE); #endif redraw_cmdline = FALSE; + redraw_mode = FALSE; clear_cmdline = FALSE; return length;