diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-12-27 11:13:58 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-27 11:13:58 +0800 |
commit | d4af8c6202e8734ef4a3a3dfe249353f8d5ba551 (patch) | |
tree | a80ece9d4162a84bf20cbe230c74c86aad8460ef | |
parent | dae213584939c4144a85b518f8dd8a9a3cd3c282 (diff) | |
download | rneovim-d4af8c6202e8734ef4a3a3dfe249353f8d5ba551.tar.gz rneovim-d4af8c6202e8734ef4a3a3dfe249353f8d5ba551.tar.bz2 rneovim-d4af8c6202e8734ef4a3a3dfe249353f8d5ba551.zip |
fix(statusline): don't show showcmd when not enough space (#21550)
-rw-r--r-- | src/nvim/statusline.c | 21 | ||||
-rw-r--r-- | test/functional/ui/statusline_spec.lua | 26 |
2 files changed, 36 insertions, 11 deletions
diff --git a/src/nvim/statusline.c b/src/nvim/statusline.c index 6aaad8cc59..8db4633401 100644 --- a/src/nvim/statusline.c +++ b/src/nvim/statusline.c @@ -66,7 +66,6 @@ void win_redr_status(win_T *wp) int len; int fillchar; int attr; - int width; int this_ru_col; bool is_stl_global = global_stl_height() > 0; static bool busy = false; @@ -93,7 +92,7 @@ void win_redr_status(win_T *wp) redraw_custom_statusline(wp); } else { fillchar = fillchar_status(&attr, wp); - width = is_stl_global ? Columns : wp->w_width; + const int stl_width = is_stl_global ? Columns : wp->w_width; get_trans_bufname(wp->w_buffer); p = NameBuff; @@ -123,9 +122,9 @@ void win_redr_status(win_T *wp) // len += (int)strlen(p + len); // dead assignment } - this_ru_col = ru_col - (Columns - width); - if (this_ru_col < (width + 1) / 2) { - this_ru_col = (width + 1) / 2; + this_ru_col = ru_col - (Columns - stl_width); + if (this_ru_col < (stl_width + 1) / 2) { + this_ru_col = (stl_width + 1) / 2; } if (this_ru_col <= 1) { p = "<"; // No room for file name! @@ -166,9 +165,9 @@ void win_redr_status(win_T *wp) // Draw the 'showcmd' information if 'showcmdloc' == "statusline". if (p_sc && *p_sloc == 's') { - int sc_width = MIN(10, this_ru_col - len - 2); + const int sc_width = MIN(10, this_ru_col - len - 2); - if (width > 0) { + if (sc_width > 0) { grid_puts_len(&default_grid, showcmd_buf, sc_width, row, wp->w_wincol + this_ru_col - sc_width - 1, attr); } @@ -844,11 +843,11 @@ void draw_tabline(void) // Draw the 'showcmd' information if 'showcmdloc' == "tabline". if (p_sc && *p_sloc == 't') { - int width = MIN(10, (int)Columns - col - (tabcount > 1) * 3); + const int sc_width = MIN(10, (int)Columns - col - (tabcount > 1) * 3); - if (width > 0) { - grid_puts_len(&default_grid, showcmd_buf, width, 0, - Columns - width - (tabcount > 1) * 2, attr_nosel); + if (sc_width > 0) { + grid_puts_len(&default_grid, showcmd_buf, sc_width, 0, + Columns - sc_width - (tabcount > 1) * 2, attr_nosel); } } diff --git a/test/functional/ui/statusline_spec.lua b/test/functional/ui/statusline_spec.lua index 18391a575d..549ebbde06 100644 --- a/test/functional/ui/statusline_spec.lua +++ b/test/functional/ui/statusline_spec.lua @@ -545,3 +545,29 @@ it('statusline is redrawn with :resize from <Cmd> mapping #19629', function() | ]]) end) + +it('showcmdloc=statusline does not show if statusline is too narrow', function() + clear() + local screen = Screen.new(40, 8) + screen:set_default_attr_ids({ + [0] = {bold = true, foreground = Screen.colors.Blue}, -- NonText + [1] = {bold = true, reverse = true}, -- StatusLine + [2] = {reverse = true}, -- StatusLineNC + }) + screen:attach() + command('set showcmd') + command('set showcmdloc=statusline') + command('1vsplit') + screen:expect([[ + ^ │ | + {0:~}│{0:~ }| + {0:~}│{0:~ }| + {0:~}│{0:~ }| + {0:~}│{0:~ }| + {0:~}│{0:~ }| + {1:< }{2:[No Name] }| + | + ]]) + feed('1234') + screen:expect_unchanged() +end) |