mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
feat(ui): cascading style inheritance for Pmenu* highlights #29980
- `PmenuSel` and `PmenuMatch` inherit from `Pmenu` - `PmenuMatchSel` inherits from both `PmenuSel` and `PmenuMatch`
This commit is contained in:
parent
25665b365c
commit
a0e3fe5741
@ -234,6 +234,10 @@ UI
|
|||||||
which controls the tool used to open the given path or URL. If you want to
|
which controls the tool used to open the given path or URL. If you want to
|
||||||
globally set this, you can override vim.ui.open using the same approach
|
globally set this, you can override vim.ui.open using the same approach
|
||||||
described at |vim.paste()|.
|
described at |vim.paste()|.
|
||||||
|
• The |ins-completion-menu| now supports cascading highlight styles.
|
||||||
|
|hl-PmenuSel| and |hl-PmenuMatch| both inherit from |hl-Pmenu|, and
|
||||||
|
|hl-PmenuMatchSel| inherits highlights from both |hl-PmenuSel| and
|
||||||
|
|hl-PmenuMatch|.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
CHANGED FEATURES *news-changed*
|
CHANGED FEATURES *news-changed*
|
||||||
|
@ -5202,7 +5202,7 @@ NormalNC Normal text in non-current windows.
|
|||||||
*hl-Pmenu*
|
*hl-Pmenu*
|
||||||
Pmenu Popup menu: Normal item.
|
Pmenu Popup menu: Normal item.
|
||||||
*hl-PmenuSel*
|
*hl-PmenuSel*
|
||||||
PmenuSel Popup menu: Selected item.
|
PmenuSel Popup menu: Selected item. Combined with |hl-Pmenu|.
|
||||||
*hl-PmenuKind*
|
*hl-PmenuKind*
|
||||||
PmenuKind Popup menu: Normal item "kind".
|
PmenuKind Popup menu: Normal item "kind".
|
||||||
*hl-PmenuKindSel*
|
*hl-PmenuKindSel*
|
||||||
@ -5216,9 +5216,11 @@ PmenuSbar Popup menu: Scrollbar.
|
|||||||
*hl-PmenuThumb*
|
*hl-PmenuThumb*
|
||||||
PmenuThumb Popup menu: Thumb of the scrollbar.
|
PmenuThumb Popup menu: Thumb of the scrollbar.
|
||||||
*hl-PmenuMatch*
|
*hl-PmenuMatch*
|
||||||
PmenuMatch Popup menu: Matched text in normal item.
|
PmenuMatch Popup menu: Matched text in normal item. Combined with
|
||||||
|
|hl-Pmenu|.
|
||||||
*hl-PmenuMatchSel*
|
*hl-PmenuMatchSel*
|
||||||
PmenuMatchSel Popup menu: Matched text in selected item.
|
PmenuMatchSel Popup menu: Matched text in selected item. Combined with
|
||||||
|
|hl-PmenuMatch| and |hl-PmenuSel|.
|
||||||
*hl-Question*
|
*hl-Question*
|
||||||
Question |hit-enter| prompt and yes/no questions.
|
Question |hit-enter| prompt and yes/no questions.
|
||||||
*hl-QuickFixLine*
|
*hl-QuickFixLine*
|
||||||
|
@ -561,6 +561,9 @@ Highlight groups:
|
|||||||
the regexp `[a-zA-Z0-9_.@-]*` (see |group-name|).
|
the regexp `[a-zA-Z0-9_.@-]*` (see |group-name|).
|
||||||
- |hl-StatusLineTerm| |hl-StatusLineTermNC| are implemented as 'winhighlight'
|
- |hl-StatusLineTerm| |hl-StatusLineTermNC| are implemented as 'winhighlight'
|
||||||
window-local highlights which are set by the default |TermOpen| handler.
|
window-local highlights which are set by the default |TermOpen| handler.
|
||||||
|
- The |ins-completion-menu| has cascading highlight styles. |hl-PmenuSel| and
|
||||||
|
|hl-PmenuMatch| both inherit from |hl-Pmenu|, and |hl-PmenuMatchSel|
|
||||||
|
inherits highlights from both |hl-PmenuSel| and |hl-PmenuMatch|.
|
||||||
|
|
||||||
Macro (|recording|) behavior:
|
Macro (|recording|) behavior:
|
||||||
- Replay of a macro recorded during :lmap produces the same actions as when it
|
- Replay of a macro recorded during :lmap produces the same actions as when it
|
||||||
|
@ -480,13 +480,19 @@ static int *pum_compute_text_attrs(char *text, hlf_T hlf, int user_hlattr)
|
|||||||
for (int i = 0; i < ga->ga_len; i++) {
|
for (int i = 0; i < ga->ga_len; i++) {
|
||||||
if (char_pos == ((uint32_t *)ga->ga_data)[i]) {
|
if (char_pos == ((uint32_t *)ga->ga_data)[i]) {
|
||||||
new_attr = win_hl_attr(curwin, hlf == HLF_PSI ? HLF_PMSI : HLF_PMNI);
|
new_attr = win_hl_attr(curwin, hlf == HLF_PSI ? HLF_PMSI : HLF_PMNI);
|
||||||
|
new_attr = hl_combine_attr(win_hl_attr(curwin, HLF_PMNI), new_attr);
|
||||||
|
new_attr = hl_combine_attr(win_hl_attr(curwin, (int)hlf), new_attr);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (matched_start && ptr < text + leader_len) {
|
} else if (matched_start && ptr < text + leader_len) {
|
||||||
new_attr = win_hl_attr(curwin, hlf == HLF_PSI ? HLF_PMSI : HLF_PMNI);
|
new_attr = win_hl_attr(curwin, hlf == HLF_PSI ? HLF_PMSI : HLF_PMNI);
|
||||||
|
new_attr = hl_combine_attr(win_hl_attr(curwin, HLF_PMNI), new_attr);
|
||||||
|
new_attr = hl_combine_attr(win_hl_attr(curwin, (int)hlf), new_attr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
new_attr = hl_combine_attr(win_hl_attr(curwin, HLF_PNI), new_attr);
|
||||||
|
|
||||||
if (user_hlattr > 0) {
|
if (user_hlattr > 0) {
|
||||||
new_attr = hl_combine_attr(new_attr, user_hlattr);
|
new_attr = hl_combine_attr(new_attr, user_hlattr);
|
||||||
}
|
}
|
||||||
@ -629,6 +635,7 @@ void pum_redraw(void)
|
|||||||
const hlf_T *const hlfs = (idx == pum_selected) ? hlfsSel : hlfsNorm;
|
const hlf_T *const hlfs = (idx == pum_selected) ? hlfsSel : hlfsNorm;
|
||||||
hlf_T hlf = hlfs[0]; // start with "word" highlight
|
hlf_T hlf = hlfs[0]; // start with "word" highlight
|
||||||
int attr = win_hl_attr(curwin, (int)hlf);
|
int attr = win_hl_attr(curwin, (int)hlf);
|
||||||
|
attr = hl_combine_attr(win_hl_attr(curwin, HLF_PNI), attr);
|
||||||
|
|
||||||
grid_line_start(&pum_grid, row);
|
grid_line_start(&pum_grid, row);
|
||||||
|
|
||||||
@ -663,6 +670,7 @@ void pum_redraw(void)
|
|||||||
if (item_type == CPT_KIND && user_kind_hlattr > 0) {
|
if (item_type == CPT_KIND && user_kind_hlattr > 0) {
|
||||||
attr = hl_combine_attr(attr, user_kind_hlattr);
|
attr = hl_combine_attr(attr, user_kind_hlattr);
|
||||||
}
|
}
|
||||||
|
attr = hl_combine_attr(win_hl_attr(curwin, HLF_PNI), attr);
|
||||||
int width = 0;
|
int width = 0;
|
||||||
char *s = NULL;
|
char *s = NULL;
|
||||||
p = pum_get_item(idx, item_type);
|
p = pum_get_item(idx, item_type);
|
||||||
|
@ -3636,6 +3636,59 @@ describe('builtin popupmenu', function()
|
|||||||
:sign un^ |
|
:sign un^ |
|
||||||
]])
|
]])
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it(
|
||||||
|
'cascading highlights for matched text (PmenuMatch, PmenuMatchSel) in cmdline pum',
|
||||||
|
function()
|
||||||
|
screen:set_default_attr_ids({
|
||||||
|
[1] = { foreground = Screen.colors.Blue1, bold = true },
|
||||||
|
[2] = {
|
||||||
|
underline = true,
|
||||||
|
italic = true,
|
||||||
|
foreground = Screen.colors.White,
|
||||||
|
background = Screen.colors.Grey,
|
||||||
|
},
|
||||||
|
[3] = {
|
||||||
|
foreground = Screen.colors.Red,
|
||||||
|
background = Screen.colors.Grey,
|
||||||
|
strikethrough = true,
|
||||||
|
underline = true,
|
||||||
|
italic = true,
|
||||||
|
},
|
||||||
|
[4] = {
|
||||||
|
foreground = Screen.colors.Yellow,
|
||||||
|
background = Screen.colors.Pink,
|
||||||
|
bold = true,
|
||||||
|
underline = true,
|
||||||
|
italic = true,
|
||||||
|
},
|
||||||
|
[5] = {
|
||||||
|
foreground = Screen.colors.Black,
|
||||||
|
background = Screen.colors.White,
|
||||||
|
bold = true,
|
||||||
|
underline = true,
|
||||||
|
italic = true,
|
||||||
|
strikethrough = true,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
exec([[
|
||||||
|
set wildoptions=pum,fuzzy
|
||||||
|
hi Pmenu guifg=White guibg=Grey gui=underline,italic
|
||||||
|
hi PmenuSel guifg=Red gui=strikethrough
|
||||||
|
hi PmenuMatch guifg=Yellow guibg=Pink gui=bold
|
||||||
|
hi PmenuMatchSel guifg=Black guibg=White
|
||||||
|
]])
|
||||||
|
|
||||||
|
feed(':sign plc<Tab>')
|
||||||
|
screen:expect([[
|
||||||
|
|
|
||||||
|
{1:~ }|*16
|
||||||
|
{1:~ }{3: }{5:pl}{3:a}{5:c}{3:e }{1: }|
|
||||||
|
{1:~ }{2: un}{4:pl}{2:a}{4:c}{2:e }{1: }|
|
||||||
|
:sign place^ |
|
||||||
|
]])
|
||||||
|
end
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
it("'pumheight'", function()
|
it("'pumheight'", function()
|
||||||
|
Loading…
Reference in New Issue
Block a user