diff options
author | Famiu Haque <famiuhaque@protonmail.com> | 2022-05-28 04:57:20 +0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-28 06:57:20 +0800 |
commit | 826462a8f0923926066da66d8575f6573ee3f079 (patch) | |
tree | afcf355c7d7d3e086859091c5ffc4094cd92e913 | |
parent | e2940d3c79586503c0a645010ae56c7097ca7c3f (diff) | |
download | rneovim-826462a8f0923926066da66d8575f6573ee3f079.tar.gz rneovim-826462a8f0923926066da66d8575f6573ee3f079.tar.bz2 rneovim-826462a8f0923926066da66d8575f6573ee3f079.zip |
fix(ui): require window-local value to show winbar on floating windows (#18773)
Previously, there was a bug where setting the local value of 'winbar' to
itself would cause winbar to appear on a floating window, which is
undesirable. This fix makes it so that it's explicitly required for the
window-local value of 'winbar' for a floating window to be set in order
for winbar to be shown on that window.
-rw-r--r-- | runtime/doc/options.txt | 4 | ||||
-rw-r--r-- | src/nvim/window.c | 5 | ||||
-rw-r--r-- | test/functional/ui/winbar_spec.lua | 40 |
3 files changed, 48 insertions, 1 deletions
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index 77aa294027..73755e55cc 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -7004,6 +7004,10 @@ A jump table for the options with a short description can be found at |Q_op|. When changing something that is used in 'winbar' that does not trigger it to be updated, use |:redrawstatus|. + Floating windows do not use the global value of 'winbar'. The + window-local value of 'winbar' must be set for a floating window to + have a window bar. + This option cannot be set in a modeline when 'modelineexpr' is off. *'winblend'* *'winbl'* diff --git a/src/nvim/window.c b/src/nvim/window.c index f42ef874ef..7b49a3b2d8 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -6689,7 +6689,10 @@ static void last_status_rec(frame_T *fr, bool statusline, bool is_stl_global) void set_winbar(void) { FOR_ALL_WINDOWS_IN_TAB(wp, curtab) { - int winbar_height = (*p_wbr != NUL || *wp->w_p_wbr != NUL) ? 1 : 0; + // Require the local value to be set in order to show winbar on a floating window. + int winbar_height = wp->w_floating ? ((*wp->w_p_wbr != NUL) ? 1 : 0) + : ((*p_wbr != NUL || *wp->w_p_wbr != NUL) ? 1 : 0); + if (wp->w_winbar_height != winbar_height) { wp->w_winbar_height = winbar_height; win_set_inner_size(wp); diff --git a/test/functional/ui/winbar_spec.lua b/test/functional/ui/winbar_spec.lua index 83bc61bc4e..d4c6d50fed 100644 --- a/test/functional/ui/winbar_spec.lua +++ b/test/functional/ui/winbar_spec.lua @@ -23,6 +23,8 @@ describe('winbar', function() [5] = {bold = true, foreground = Screen.colors.Red}, [6] = {foreground = Screen.colors.Blue}, [7] = {background = Screen.colors.LightGrey}, + [8] = {background = Screen.colors.LightMagenta}, + [9] = {bold = true, foreground = Screen.colors.Blue, background = Screen.colors.LightMagenta}, }) meths.set_option('winbar', 'Set Up The Bars') end) @@ -399,6 +401,7 @@ describe('winbar', function() ]]) eq(1, meths.get_option('cmdheight')) end) + it('properly equalizes window height for window-local value', function() command('set equalalways | set winbar= | setlocal winbar=a | split') command('setlocal winbar= | split') @@ -419,4 +422,41 @@ describe('winbar', function() | ]]) end) + + it('requires window-local value for floating windows', function() + local win = meths.open_win(0, false, { relative = 'editor', row = 2, col = 10, height = 7, + width = 30 }) + meths.set_option_value('winbar', 'bar', {}) + screen:expect{grid=[[ + {1:bar }| + ^ | + {3:~ }{8: }{3: }| + {3:~ }{9:~ }{3: }| + {3:~ }{9:~ }{3: }| + {3:~ }{9:~ }{3: }| + {3:~ }{9:~ }{3: }| + {3:~ }{9:~ }{3: }| + {3:~ }{9:~ }{3: }| + {3:~ }| + {3:~ }| + {3:~ }| + | + ]]} + meths.set_option_value('winbar', 'floaty bar', { scope = 'local', win = win.id }) + screen:expect{grid=[[ + {1:bar }| + ^ | + {3:~ }{1:floaty bar }{3: }| + {3:~ }{8: }{3: }| + {3:~ }{9:~ }{3: }| + {3:~ }{9:~ }{3: }| + {3:~ }{9:~ }{3: }| + {3:~ }{9:~ }{3: }| + {3:~ }{9:~ }{3: }| + {3:~ }| + {3:~ }| + {3:~ }| + | + ]]} + end) end) |