patch 9.1.1150: :hi completion may complete to wrong value Commit: https://github.com/vim/vim/commit/9b41e8f7666be155eb9d39baa8e8de184a87eb67 Author: Yee Cheng Chin <ychin....@gmail.com> 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 <ychin....@gmail.com> Signed-off-by: Christian Brabandt <c...@256bit.org> 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 vim_dev+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/vim_dev/E1tn163-00CnWu-Cz%40256bit.org.