patch 9.1.1150: :hi completion may complete to wrong value
Commit:
https://github.com/vim/vim/commit/9b41e8f7666be155eb9d39baa8e8de184a87eb67
Author: Yee Cheng Chin <[email protected]>
Date: Tue Feb 25 20:41:52 2025 +0100
patch 9.1.1150: :hi completion may complete to wrong value
Problem: :highlight auto-complettion has a minor bug where an existing
highlight group with a cterm color being unset would result in
it being auto-completed to -1 in cmdline which is invalid.
Solution: Correctly check for whether an int value is set to non-zero
before retrieving the existing value for auto-complete. Also
do this for attr/string values as they previously worked only
by accident (Yee Cheng Chin).
closes: #16726
Signed-off-by: Yee Cheng Chin <[email protected]>
Signed-off-by: Christian Brabandt <[email protected]>
diff --git a/src/highlight.c b/src/highlight.c
index 2d965660e..755d75f4c 100644
--- a/src/highlight.c
+++ b/src/highlight.c
@@ -4531,14 +4531,17 @@ expand_highlight_group(
char_u buf[MAX_ATTR_LEN];
- if (expand_hi_synid != 0 && type != 0 && expand_hi_include_orig)
+ expand_hi_curvalue = NULL;
+ if (expand_hi_include_orig)
{
- // Retrieve the current value to go first in completion
- expand_hi_curvalue = highlight_arg_to_string(
- type, iarg, sarg, buf);
+ if (((type == LIST_ATTR || type == LIST_INT) && iarg != 0) ||
+ (type == LIST_STRING && sarg != NULL))
+ {
+ // Retrieve the current value to go first in completion
+ expand_hi_curvalue = highlight_arg_to_string(
+ type, iarg, sarg, buf);
+ }
}
- else
- expand_hi_curvalue = NULL;
if (expandfunc != NULL)
{
diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim
index 042710c2a..be4ae4e18 100644
--- a/src/testdir/test_cmdline.vim
+++ b/src/testdir/test_cmdline.vim
@@ -488,14 +488,22 @@ func Test_highlight_group_completion()
" Test completing the current value
hi FooBar term=bold,underline cterm=undercurl ctermfg=lightgray ctermbg=12
ctermul=34
+ hi AlmostEmpty term=bold
call assert_equal('bold,underline', getcompletion('hi FooBar term=',
'cmdline')[0])
call assert_equal('undercurl', getcompletion('hi FooBar cterm=',
'cmdline')[0])
call assert_equal('7', getcompletion('hi FooBar ctermfg=', 'cmdline')[0])
call assert_equal('12', getcompletion('hi FooBar ctermbg=', 'cmdline')[0])
call assert_equal('34', getcompletion('hi FooBar ctermul=', 'cmdline')[0])
- " "bold,underline" is unique and creates an extra item. "undercurl" and
- " should be de-duplicated
+ " highlight group exists, but no value was set. Should not complete to
+ " existing value
+ call assert_equal('fg', getcompletion('hi AlmostEmpty ctermfg=',
'cmdline')[0])
+ call assert_equal('fg', getcompletion('hi AlmostEmpty ctermbg=',
'cmdline')[0])
+ call assert_equal('fg', getcompletion('hi AlmostEmpty ctermul=',
'cmdline')[0])
+ call assert_equal('bold', getcompletion('hi AlmostEmpty cterm=',
'cmdline')[0])
+
+ " "bold,underline" is unique and creates an extra item. "undercurl" isn't
+ " and should be de-duplicated.
call assert_equal(len(getcompletion('hi FooBar term=', 'cmdline')),
\ 1 + len(getcompletion('hi FooBar cterm=', 'cmdline')))
@@ -519,6 +527,13 @@ func Test_highlight_group_completion()
" Check that existing value is de-duplicated and doesn't show up later
call assert_equal(1, count(getcompletion('hi FooBar guibg=', 'cmdline'),
'brown1'))
+
+ " highlight group exists, but no value was set. Should not complete to
+ " existing value
+ call assert_equal('fg', getcompletion('hi AlmostEmpty guifg=',
'cmdline')[0])
+ call assert_equal('fg', getcompletion('hi AlmostEmpty guibg=',
'cmdline')[0])
+ call assert_equal('fg', getcompletion('hi AlmostEmpty guisp=',
'cmdline')[0])
+ call assert_equal('bold', getcompletion('hi AlmostEmpty gui=',
'cmdline')[0])
endif
" Test completing attributes
diff --git a/src/version.c b/src/version.c
index 523e4fc8e..6275311a1 100644
--- a/src/version.c
+++ b/src/version.c
@@ -704,6 +704,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 1150,
/**/
1149,
/**/
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/vim_dev/E1tn163-00CnWu-Cz%40256bit.org.