From 986bf7e78d09286e198b696630254eb097ad0875 Mon Sep 17 00:00:00 2001 From: Evgeni Chasnovski Date: Fri, 25 Aug 2023 10:53:39 +0300 Subject: [PATCH] feat(highlight): add `FloatFooter` highlight group Problem: No clear separation of floating title and footer highlighting. Solution: Add new `FloatFooter` highlight group. --- runtime/doc/api.txt | 3 ++- runtime/doc/news.txt | 2 +- runtime/doc/syntax.txt | 2 ++ runtime/doc/vim_diff.txt | 1 + runtime/lua/vim/_meta/api.lua | 2 +- src/nvim/api/win_config.c | 8 +++++--- src/nvim/highlight_group.c | 1 + 7 files changed, 13 insertions(+), 6 deletions(-) diff --git a/runtime/doc/api.txt b/runtime/doc/api.txt index 53d4282ec5..e68aafe051 100644 --- a/runtime/doc/api.txt +++ b/runtime/doc/api.txt @@ -479,6 +479,7 @@ to disable various visual features such as the 'number' column. Other highlight groups specific to floating windows: - |hl-FloatBorder| for window's border - |hl-FloatTitle| for window's title +- |hl-FloatFooter| for window's footer Currently, floating windows don't support some widgets like scrollbar. @@ -3146,7 +3147,7 @@ nvim_open_win({buffer}, {enter}, {*config}) *nvim_open_win()* Default is `"left"`. • footer: Footer (optional) in window border, string or list. List should consist of `[text, highlight]` tuples. - If string, the default highlight group is `FloatTitle`. + If string, the default highlight group is `FloatFooter`. • footer_pos: Footer position. Must be set with `footer` option. Value can be one of "left", "center", or "right". Default is `"left"`. diff --git a/runtime/doc/news.txt b/runtime/doc/news.txt index c28ccb191e..4f9f362b1e 100644 --- a/runtime/doc/news.txt +++ b/runtime/doc/news.txt @@ -156,7 +156,7 @@ The following new APIs and features were added. support fully MessagePack-RPC compliant clients. • Floating windows can now show footer with new `footer` and `footer_pos` - config fields. + config fields. Uses |hl-FloatFooter| by default. ============================================================================== CHANGED FEATURES *news-changed* diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt index 59f8235ad2..6c0c542737 100644 --- a/runtime/doc/syntax.txt +++ b/runtime/doc/syntax.txt @@ -5273,6 +5273,8 @@ NormalFloat Normal text in floating windows. FloatBorder Border of floating windows. *hl-FloatTitle* FloatTitle Title of floating windows. + *hl-FloatFooter* +FloatFooter Footer of floating windows. *hl-NormalNC* NormalNC Normal text in non-current windows. *hl-Pmenu* diff --git a/runtime/doc/vim_diff.txt b/runtime/doc/vim_diff.txt index 29a7c50585..ab5e795c16 100644 --- a/runtime/doc/vim_diff.txt +++ b/runtime/doc/vim_diff.txt @@ -258,6 +258,7 @@ Highlight groups: |hl-NormalFloat| highlights floating window |hl-FloatBorder| highlights border of a floating window |hl-FloatTitle| highlights title of a floating window + |hl-FloatFooter| highlights footer of a floating window |hl-NormalNC| highlights non-current windows |hl-MsgArea| highlights messages/cmdline area |hl-MsgSeparator| highlights separator for scrolled messages diff --git a/runtime/lua/vim/_meta/api.lua b/runtime/lua/vim/_meta/api.lua index 7704a60cf8..dd67fdb38b 100644 --- a/runtime/lua/vim/_meta/api.lua +++ b/runtime/lua/vim/_meta/api.lua @@ -1559,7 +1559,7 @@ function vim.api.nvim_open_term(buffer, opts) end --- Default is `"left"`. --- • footer: Footer (optional) in window border, string or --- list. List should consist of `[text, highlight]` tuples. ---- If string, the default highlight group is `FloatTitle`. +--- If string, the default highlight group is `FloatFooter`. --- • footer_pos: Footer position. Must be set with `footer` --- option. Value can be one of "left", "center", or "right". --- Default is `"left"`. diff --git a/src/nvim/api/win_config.c b/src/nvim/api/win_config.c index 325d0cbfa0..ac27554172 100644 --- a/src/nvim/api/win_config.c +++ b/src/nvim/api/win_config.c @@ -153,7 +153,7 @@ /// Default is `"left"`. /// - footer: Footer (optional) in window border, string or list. /// List should consist of `[text, highlight]` tuples. -/// If string, the default highlight group is `FloatTitle`. +/// If string, the default highlight group is `FloatFooter`. /// - footer_pos: Footer position. Must be set with `footer` option. /// Value can be one of "left", "center", or "right". /// Default is `"left"`. @@ -428,16 +428,19 @@ static void parse_bordertext(Object bordertext, BorderTextType bordertext_type, bool *is_present; VirtText *chunks; int *width; + int default_hl_id; switch (bordertext_type) { case kBorderTextTitle: is_present = &fconfig->title; chunks = &fconfig->title_chunks; width = &fconfig->title_width; + default_hl_id = syn_check_group(S_LEN("FloatTitle")); break; case kBorderTextFooter: is_present = &fconfig->footer; chunks = &fconfig->footer_chunks; width = &fconfig->footer_width; + default_hl_id = syn_check_group(S_LEN("FloatFooter")); break; } @@ -446,9 +449,8 @@ static void parse_bordertext(Object bordertext, BorderTextType bordertext_type, *is_present = false; return; } - int hl_id = syn_check_group(S_LEN("FloatTitle")); kv_push(*chunks, ((VirtTextChunk){ .text = xstrdup(bordertext.data.string.data), - .hl_id = hl_id })); + .hl_id = default_hl_id })); *width = (int)mb_string2cells(bordertext.data.string.data); *is_present = true; return; diff --git a/src/nvim/highlight_group.c b/src/nvim/highlight_group.c index 2b268ff2e1..c4d140d1e1 100644 --- a/src/nvim/highlight_group.c +++ b/src/nvim/highlight_group.c @@ -173,6 +173,7 @@ static const char *highlight_init_both[] = { "default link NormalFloat Pmenu", "default link FloatBorder WinSeparator", "default link FloatTitle Title", + "default link FloatFooter Title", "default FloatShadow blend=80 guibg=Black", "default FloatShadowThrough blend=100 guibg=Black", "RedrawDebugNormal cterm=reverse gui=reverse",