mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 9.1.0495: Matched text isn't highlighted in cmdline pum
Problem: Matched text isn't highlighted in cmdline pum. Solution: Use cmdline completion pattern in cmdline mode. (zeertzjq) closes: #15029 Signed-off-by: zeertzjq <zeertzjq@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
parent
84ac2126f4
commit
d8c9340fc6
@ -41560,6 +41560,9 @@ Support for Wayland UI.
|
|||||||
|
|
||||||
Support for the XDG Desktop Specification |xdg-base-dir|
|
Support for the XDG Desktop Specification |xdg-base-dir|
|
||||||
|
|
||||||
|
Support highlighting the matched text for insert-mode completion and
|
||||||
|
command-line completion in |ins-completion-menu|.
|
||||||
|
|
||||||
*changed-9.2*
|
*changed-9.2*
|
||||||
Changed~
|
Changed~
|
||||||
-------
|
-------
|
||||||
|
@ -437,6 +437,28 @@ cmdline_compl_startcol(void)
|
|||||||
return compl_startcol;
|
return compl_startcol;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns the current cmdline completion pattern.
|
||||||
|
*/
|
||||||
|
char_u *
|
||||||
|
cmdline_compl_pattern(void)
|
||||||
|
{
|
||||||
|
expand_T *xp = get_cmdline_info()->xpc;
|
||||||
|
|
||||||
|
return xp == NULL ? NULL : xp->xp_orig;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns TRUE if fuzzy cmdline completion is active, FALSE otherwise.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
cmdline_compl_is_fuzzy(void)
|
||||||
|
{
|
||||||
|
expand_T *xp = get_cmdline_info()->xpc;
|
||||||
|
|
||||||
|
return xp != NULL && cmdline_fuzzy_completion_supported(xp);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return the number of characters that should be skipped in a status match.
|
* Return the number of characters that should be skipped in a status match.
|
||||||
* These are backslashes used for escaping. Do show backslashes in help tags.
|
* These are backslashes used for escaping. Do show backslashes in help tags.
|
||||||
|
@ -428,28 +428,35 @@ pum_under_menu(int row, int col, int only_redrawing)
|
|||||||
pum_compute_text_attrs(char_u *text, hlf_T hlf)
|
pum_compute_text_attrs(char_u *text, hlf_T hlf)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int leader_len;
|
size_t leader_len;
|
||||||
int char_cells;
|
int char_cells;
|
||||||
int new_attr;
|
int new_attr;
|
||||||
char_u *ptr = text;
|
char_u *ptr = text;
|
||||||
int cell_idx = 0;
|
int cell_idx = 0;
|
||||||
garray_T *ga = NULL;
|
garray_T *ga = NULL;
|
||||||
int *attrs = NULL;
|
int *attrs = NULL;
|
||||||
char_u *leader = ins_compl_leader();
|
char_u *leader = NULL;
|
||||||
int in_fuzzy = (get_cot_flags() & COT_FUZZY) != 0;
|
int in_fuzzy;
|
||||||
int matched_start = FALSE;
|
int matched_start = FALSE;
|
||||||
int_u char_pos = 0;
|
int_u char_pos = 0;
|
||||||
|
|
||||||
if (leader == NULL || *leader == NUL || (hlf != HLF_PSI && hlf != HLF_PNI)
|
if ((hlf != HLF_PSI && hlf != HLF_PNI)
|
||||||
|| (highlight_attr[HLF_PMSI] == highlight_attr[HLF_PSI]
|
|| (highlight_attr[HLF_PMSI] == highlight_attr[HLF_PSI]
|
||||||
&& highlight_attr[HLF_PMNI] == highlight_attr[HLF_PNI]))
|
&& highlight_attr[HLF_PMNI] == highlight_attr[HLF_PNI]))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
leader = State == MODE_CMDLINE ? cmdline_compl_pattern()
|
||||||
|
: ins_compl_leader();
|
||||||
|
if (leader == NULL || *leader == NUL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
attrs = ALLOC_MULT(int, vim_strsize(text));
|
attrs = ALLOC_MULT(int, vim_strsize(text));
|
||||||
if (attrs == NULL)
|
if (attrs == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
leader_len = (int)STRLEN(leader);
|
in_fuzzy = State == MODE_CMDLINE ? cmdline_compl_is_fuzzy()
|
||||||
|
: (get_cot_flags() & COT_FUZZY) != 0;
|
||||||
|
leader_len = STRLEN(leader);
|
||||||
|
|
||||||
if (in_fuzzy)
|
if (in_fuzzy)
|
||||||
ga = fuzzy_match_str_with_pos(text, leader);
|
ga = fuzzy_match_str_with_pos(text, leader);
|
||||||
|
@ -6,6 +6,8 @@ int cmdline_pum_active(void);
|
|||||||
void cmdline_pum_remove(void);
|
void cmdline_pum_remove(void);
|
||||||
void cmdline_pum_cleanup(cmdline_info_T *cclp);
|
void cmdline_pum_cleanup(cmdline_info_T *cclp);
|
||||||
int cmdline_compl_startcol(void);
|
int cmdline_compl_startcol(void);
|
||||||
|
char_u *cmdline_compl_pattern(void);
|
||||||
|
int cmdline_compl_is_fuzzy(void);
|
||||||
char_u *ExpandOne(expand_T *xp, char_u *str, char_u *orig, int options, int mode);
|
char_u *ExpandOne(expand_T *xp, char_u *str, char_u *orig, int options, int mode);
|
||||||
void ExpandInit(expand_T *xp);
|
void ExpandInit(expand_T *xp);
|
||||||
void ExpandCleanup(expand_T *xp);
|
void ExpandCleanup(expand_T *xp);
|
||||||
|
10
src/testdir/dumps/Test_wildmenu_pum_hl_match_1.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_hl_match_1.dump
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
| +0&#ffffff0@49
|
||||||
|
|~+0#4040ff13&| @48
|
||||||
|
|~| @48
|
||||||
|
|~| @48
|
||||||
|
|~| @48
|
||||||
|
|~| @48
|
||||||
|
|~| @48
|
||||||
|
|~| @3| +0#0000001#e0e0e08|p+0#00e0e07&|l|a+0#0000001&|c+0#00e0e07&|e+0#0000001&| @9| +0#4040ff13#ffffff0@28
|
||||||
|
|~| @3| +0#0000001#ffd7ff255|u|n|p+0#0000e05&|l|a+0#0000001&|c+0#0000e05&|e+0#0000001&| @7| +0#4040ff13#ffffff0@28
|
||||||
|
|:+0#0000000&|s|i|g|n| |p|l|a|c|e> @38
|
10
src/testdir/dumps/Test_wildmenu_pum_hl_match_2.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_hl_match_2.dump
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
| +0&#ffffff0@49
|
||||||
|
|~+0#4040ff13&| @48
|
||||||
|
|~| @48
|
||||||
|
|~| @48
|
||||||
|
|~| @48
|
||||||
|
|~| @48
|
||||||
|
|~| @48
|
||||||
|
|~| @3| +0#0000001#ffd7ff255|p+0#0000e05&|l|a+0#0000001&|c+0#0000e05&|e+0#0000001&| @9| +0#4040ff13#ffffff0@28
|
||||||
|
|~| @3| +0#0000001#e0e0e08|u|n|p+0#00e0e07&|l|a+0#0000001&|c+0#00e0e07&|e+0#0000001&| @7| +0#4040ff13#ffffff0@28
|
||||||
|
|:+0#0000000&|s|i|g|n| |u|n|p|l|a|c|e> @36
|
10
src/testdir/dumps/Test_wildmenu_pum_hl_match_3.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_hl_match_3.dump
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
| +0&#ffffff0@49
|
||||||
|
|~+0#4040ff13&| @48
|
||||||
|
|~| @48
|
||||||
|
|~| @48
|
||||||
|
|~| @48
|
||||||
|
|~| @48
|
||||||
|
|~| @48
|
||||||
|
|~| @3| +0#0000001#ffd7ff255|p+0#0000e05&|l|a+0#0000001&|c+0#0000e05&|e+0#0000001&| @9| +0#4040ff13#ffffff0@28
|
||||||
|
|~| @3| +0#0000001#ffd7ff255|u|n|p+0#0000e05&|l|a+0#0000001&|c+0#0000e05&|e+0#0000001&| @7| +0#4040ff13#ffffff0@28
|
||||||
|
|:+0#0000000&|s|i|g|n| |p|l|c> @40
|
10
src/testdir/dumps/Test_wildmenu_pum_hl_match_4.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_hl_match_4.dump
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
| +0&#ffffff0@49
|
||||||
|
|~+0#4040ff13&| @48
|
||||||
|
|~| @48
|
||||||
|
|~| @48
|
||||||
|
|~| @48
|
||||||
|
|~| @48
|
||||||
|
|~| @48
|
||||||
|
|~| @3| +0#0000001#e0e0e08|u+0#00e0e07&|n|d+0#0000001&|e|f|i|n|e| @6| +0#4040ff13#ffffff0@28
|
||||||
|
|~| @3| +0#0000001#ffd7ff255|u+0#0000e05&|n|p+0#0000001&|l|a|c|e| @7| +0#4040ff13#ffffff0@28
|
||||||
|
|:+0#0000000&|s|i|g|n| |u|n|d|e|f|i|n|e> @35
|
10
src/testdir/dumps/Test_wildmenu_pum_hl_match_5.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_hl_match_5.dump
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
| +0&#ffffff0@49
|
||||||
|
|~+0#4040ff13&| @48
|
||||||
|
|~| @48
|
||||||
|
|~| @48
|
||||||
|
|~| @48
|
||||||
|
|~| @48
|
||||||
|
|~| @48
|
||||||
|
|~| @3| +0#0000001#ffd7ff255|u+0#0000e05&|n|d+0#0000001&|e|f|i|n|e| @6| +0#4040ff13#ffffff0@28
|
||||||
|
|~| @3| +0#0000001#e0e0e08|u+0#00e0e07&|n|p+0#0000001&|l|a|c|e| @7| +0#4040ff13#ffffff0@28
|
||||||
|
|:+0#0000000&|s|i|g|n| |u|n|p|l|a|c|e> @36
|
10
src/testdir/dumps/Test_wildmenu_pum_hl_match_6.dump
Normal file
10
src/testdir/dumps/Test_wildmenu_pum_hl_match_6.dump
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
| +0&#ffffff0@49
|
||||||
|
|~+0#4040ff13&| @48
|
||||||
|
|~| @48
|
||||||
|
|~| @48
|
||||||
|
|~| @48
|
||||||
|
|~| @48
|
||||||
|
|~| @48
|
||||||
|
|~| @3| +0#0000001#ffd7ff255|u+0#0000e05&|n|d+0#0000001&|e|f|i|n|e| @6| +0#4040ff13#ffffff0@28
|
||||||
|
|~| @3| +0#0000001#ffd7ff255|u+0#0000e05&|n|p+0#0000001&|l|a|c|e| @7| +0#4040ff13#ffffff0@28
|
||||||
|
|:+0#0000000&|s|i|g|n| |u|n> @41
|
@ -2759,6 +2759,37 @@ func Test_wildmenu_pum_rightleft()
|
|||||||
call StopVimInTerminal(buf)
|
call StopVimInTerminal(buf)
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" Test highlighting matched text in cmdline completion popup menu.
|
||||||
|
func Test_wildmenu_pum_hl_match()
|
||||||
|
CheckScreendump
|
||||||
|
|
||||||
|
let lines =<< trim END
|
||||||
|
set wildoptions=pum,fuzzy
|
||||||
|
hi PmenuMatchSel ctermfg=6 ctermbg=7
|
||||||
|
hi PmenuMatch ctermfg=4 ctermbg=225
|
||||||
|
END
|
||||||
|
call writefile(lines, 'Xwildmenu_pum_hl', 'D')
|
||||||
|
let buf = RunVimInTerminal('-S Xwildmenu_pum_hl', #{rows: 10, cols: 50})
|
||||||
|
|
||||||
|
call term_sendkeys(buf, ":sign plc\<Tab>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_pum_hl_match_1', {})
|
||||||
|
call term_sendkeys(buf, "\<Tab>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_pum_hl_match_2', {})
|
||||||
|
call term_sendkeys(buf, "\<Tab>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_pum_hl_match_3', {})
|
||||||
|
call term_sendkeys(buf, "\<Esc>:set wildoptions-=fuzzy\<CR>")
|
||||||
|
call TermWait(buf)
|
||||||
|
call term_sendkeys(buf, ":sign un\<Tab>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_pum_hl_match_4', {})
|
||||||
|
call term_sendkeys(buf, "\<Tab>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_pum_hl_match_5', {})
|
||||||
|
call term_sendkeys(buf, "\<Tab>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_wildmenu_pum_hl_match_6', {})
|
||||||
|
call term_sendkeys(buf, "\<Esc>")
|
||||||
|
|
||||||
|
call StopVimInTerminal(buf)
|
||||||
|
endfunc
|
||||||
|
|
||||||
" Test for completion after a :substitute command followed by a pipe (|)
|
" Test for completion after a :substitute command followed by a pipe (|)
|
||||||
" character
|
" character
|
||||||
func Test_cmdline_complete_substitute()
|
func Test_cmdline_complete_substitute()
|
||||||
|
@ -704,6 +704,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
495,
|
||||||
/**/
|
/**/
|
||||||
494,
|
494,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user