diff options
author | luukvbaal <31730729+luukvbaal@users.noreply.github.com> | 2023-01-13 04:47:55 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-13 11:47:55 +0800 |
commit | 1097d239c307a10a87fa995c4cfbe5987939e177 (patch) | |
tree | 5f62191f140d2872e2001d58a2f7ea8ef009d340 | |
parent | 4876654d4cc9bb43f266c7c9d412f36ab57fa571 (diff) | |
download | rneovim-1097d239c307a10a87fa995c4cfbe5987939e177.tar.gz rneovim-1097d239c307a10a87fa995c4cfbe5987939e177.tar.bz2 rneovim-1097d239c307a10a87fa995c4cfbe5987939e177.zip |
fix(ui): command line issues with external messages (#21709)
* fix: don't truncate external messages
* fix: avoid resizing command line with external messages
-rw-r--r-- | src/nvim/message.c | 6 | ||||
-rw-r--r-- | src/nvim/window.c | 14 | ||||
-rw-r--r-- | test/functional/ui/cmdline_spec.lua | 10 | ||||
-rw-r--r-- | test/functional/ui/messages_spec.lua | 7 |
4 files changed, 27 insertions, 10 deletions
diff --git a/src/nvim/message.c b/src/nvim/message.c index e9d66ea184..de4acd601f 100644 --- a/src/nvim/message.c +++ b/src/nvim/message.c @@ -919,9 +919,11 @@ char *msg_trunc_attr(char *s, bool force, int attr) /// @note: May change the message by replacing a character with '<'. char *msg_may_trunc(bool force, char *s) { - int room; + if (ui_has(kUIMessages)) { + return s; + } - room = (Rows - cmdline_row - 1) * Columns + sc_col - 1; + int room = (Rows - cmdline_row - 1) * Columns + sc_col - 1; if ((force || (shortmess(SHM_TRUNC) && !exmode_active)) && (int)strlen(s) - room > 0) { int size = vim_strsize(s); diff --git a/src/nvim/window.c b/src/nvim/window.c index 37f297909a..2bcbef14b0 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -5780,6 +5780,10 @@ static void frame_setheight(frame_T *curfrp, int height) if (curfrp->fr_parent == NULL) { // topframe: can only change the command line height + // Avoid doing so with external messages. + if (ui_has(kUIMessages)) { + return; + } if (height > ROWS_AVAIL) { // If height is greater than the available space, try to create space for // the frame by reducing 'cmdheight' if possible, while making sure @@ -6115,13 +6119,13 @@ void win_setminwidth(void) /// Status line of dragwin is dragged "offset" lines down (negative is up). void win_drag_status_line(win_T *dragwin, int offset) { - // If the user explicitly set 'cmdheight' to zero, then allow for dragging - // the status line making it zero again. - if (p_ch == 0) { - p_ch_was_zero = true; + frame_T *fr = dragwin->w_frame; + + // Avoid changing command line height with external messages. + if (fr->fr_next == NULL && ui_has(kUIMessages)) { + return; } - frame_T *fr = dragwin->w_frame; frame_T *curfr = fr; if (fr != topframe) { // more than one window fr = fr->fr_parent; diff --git a/test/functional/ui/cmdline_spec.lua b/test/functional/ui/cmdline_spec.lua index 8e689fb378..0fa6929df0 100644 --- a/test/functional/ui/cmdline_spec.lua +++ b/test/functional/ui/cmdline_spec.lua @@ -8,6 +8,7 @@ local exec = helpers.exec local eval = helpers.eval local eq = helpers.eq local is_os = helpers.is_os +local meths = helpers.meths local function new_screen(opt) local screen = Screen.new(25, 5) @@ -1387,17 +1388,20 @@ describe('cmdheight=0', function() ]]) end) - it("clears cmdline area when resized with external messages", function() + it("cannot be resized at all with external messages", function() clear() screen = new_screen({rgb=true, ext_messages=true}) - command('set laststatus=2 cmdheight=0') + command('set laststatus=2 mouse=a') command('resize -1') screen:expect([[ ^ | {1:~ }| {1:~ }| + {1:~ }| {3:[No Name] }| - | ]]) + meths.input_mouse('left', 'press', '', 0, 6, 10) + meths.input_mouse('left', 'drag', '', 0, 5, 10) + screen:expect_unchanged() end) end) diff --git a/test/functional/ui/messages_spec.lua b/test/functional/ui/messages_spec.lua index f7ffe16bd6..8320db2804 100644 --- a/test/functional/ui/messages_spec.lua +++ b/test/functional/ui/messages_spec.lua @@ -908,6 +908,13 @@ stack traceback: {1:~ }| ]]} end) + + it('does not truncate messages', function() + command('write Xtest') + screen:expect({messages={ + {content = { { '"Xtest" [New] 0L, 0B written' } }, kind = "" } + }}) + end) end) describe('ui/builtin messages', function() |