diff options
-rw-r--r-- | src/nvim/screen.c | 16 | ||||
-rw-r--r-- | test/functional/ui/screen_basic_spec.lua | 5 |
2 files changed, 16 insertions, 5 deletions
diff --git a/src/nvim/screen.c b/src/nvim/screen.c index ce5c994526..49aeaff3a6 100644 --- a/src/nvim/screen.c +++ b/src/nvim/screen.c @@ -6396,6 +6396,13 @@ int showmode(void) /* Position on the last line in the window, column 0 */ msg_pos_mode(); attr = HL_ATTR(HLF_CM); // Highlight mode + + // When the screen is too narrow to show the entire mode messsage, + // avoid scrolling and truncate instead. + msg_no_more = true; + int save_lines_left = lines_left; + lines_left = 0; + if (do_mode) { MSG_PUTS_ATTR("--", attr); // CTRL-X in Insert mode @@ -6495,10 +6502,13 @@ int showmode(void) msg_didout = FALSE; /* overwrite this message */ length = msg_col; msg_col = 0; - need_wait_return = nwr_save; /* never ask for hit-return for this */ - } else if (clear_cmdline && msg_silent == 0) - /* Clear the whole command line. Will reset "clear_cmdline". */ + msg_no_more = false; + lines_left = save_lines_left; + need_wait_return = nwr_save; // never ask for hit-return for this + } else if (clear_cmdline && msg_silent == 0) { + // Clear the whole command line. Will reset "clear_cmdline". msg_clr_cmdline(); + } /* In Visual mode the size of the selected area must be redrawn. */ if (VIsual_active) diff --git a/test/functional/ui/screen_basic_spec.lua b/test/functional/ui/screen_basic_spec.lua index 06e4a19354..6f04cde4d4 100644 --- a/test/functional/ui/screen_basic_spec.lua +++ b/test/functional/ui/screen_basic_spec.lua @@ -651,9 +651,10 @@ describe('Screen', function() it('has minimum width/height values', function() screen:try_resize(1, 1) screen:expect([[ - {2:-- INS^ERT --}| - | + resize^ | + {2:-- INSERT -} | ]]) + feed('<esc>:ls') screen:expect([[ resize | |