From 38f0ac07b5414a3a4e55e2061d683780f0e344da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Linse?= Date: Wed, 11 Jul 2018 12:57:01 +0200 Subject: [PATCH 1/2] tests/screen.lua: treat "resize" like any other event Saves ~10 seconds in UI tests --- test/functional/ui/screen.lua | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/test/functional/ui/screen.lua b/test/functional/ui/screen.lua index 52e108f389c9e3..7607131e9bc7a5 100644 --- a/test/functional/ui/screen.lua +++ b/test/functional/ui/screen.lua @@ -172,9 +172,6 @@ end function Screen:try_resize(columns, rows) uimeths.try_resize(columns, rows) - -- Give ourselves a chance to _handle_resize, which requires using - -- self.sleep() (for the resize notification) rather than run() - self:sleep(0.1) end function Screen:set_option(option, value) @@ -210,11 +207,6 @@ function Screen:expect(expected, attr_ids, attr_ignore, condition, any) row = row:sub(1, #row - 1) -- Last char must be the screen delimiter. table.insert(expected_rows, row) end - if not any then - assert(self._height == #expected_rows, - "Expected screen state's row count(" .. #expected_rows - .. ') differs from configured height(' .. self._height .. ') of Screen.') - end end local ids = attr_ids or self._default_attr_ids local ignore = attr_ignore or self._default_attr_ignore @@ -225,6 +217,12 @@ function Screen:expect(expected, attr_ids, attr_ignore, condition, any) return tostring(res) end end + + if expected and not any and self._height ~= #expected_rows then + return ("Expected screen state's row count(" .. #expected_rows + .. ') differs from configured height(' .. self._height .. ') of Screen.') + end + local actual_rows = {} for i = 1, self._height do actual_rows[i] = self:_row_repr(self._rows[i], ids, ignore) From e51bffefa523e0cde75eedc84b3e1cb02951d391 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Linse?= Date: Wed, 11 Jul 2018 14:48:22 +0200 Subject: [PATCH 2/2] screen: truncate showmode messages Before this, bottom of screen got messed up when modemsg (+ one extra space to not force terminal scroll) didn't fit on one line. --- src/nvim/screen.c | 16 +++++++++++++--- 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 ce5c994526bd0f..49aeaff3a6a8f5 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 06e4a19354a168..6f04cde4d4214d 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(':ls') screen:expect([[ resize |