]> git.ipfire.org Git - thirdparty/vim.git/commit
patch 9.1.1835: completion: not possible to style popup borders globally v9.1.1835
authorGirish Palya <girishji@gmail.com>
Tue, 7 Oct 2025 20:43:06 +0000 (20:43 +0000)
committerChristian Brabandt <cb@256bit.org>
Tue, 7 Oct 2025 20:51:02 +0000 (20:51 +0000)
commit474b981e40ce211dc3498186ba78ec8461efb9c1
tree3acfc31102063506dd186950f515cf08de3d53a1
parent2c093682738cb2e01864aa2934b7bafdb277c011
patch 9.1.1835: completion: not possible to style popup borders globally

Problem:  not possible to style popup borders globally
Solution: Add the 'pumborder' option (Girish Palya)

This commit introduces a new global option, 'pumborder' ('pb'), that
allows users to define borders and optional decorations for the
completion popup menu.

```
Defines a border and optional decorations for the popup menu in
completion.  The value is a comma-separated list of keywords.

Border styles (at most one):
"single"singleuse thin box-drawing characters
"double"doubleuse double-line box-drawing characters
"round"rounduse rounded corners
"ascii"asciiuse ASCII characters (-, |, +)
"custom:XXXXXXXX"
    use eight characters given after "custom:",
    in order: top, right, bottom, left,
    topleft, topright, botright, botleft

Additional flags:
"margin"marginadds one-cell spacing inside the left and right border
"shadow"shadowdraws a shadow at the right and bottom edges

Highlight groups:
|hl-PmenuBorder|hl-PmenuBorderused for the border characters
|hl-PmenuShadow|hl-PmenuShadowused for the shadow

Examples: >
  :set pumborder=single
  :set pumborder=double,margin,shadow
  :set pumborder=custom:─│─│┌┐┘└,shadow

Border styles using box-drawing characters ("single", "double",
"round") are only available when |'encoding'| is "utf-8" and
|'ambiwidth'| is "single".  "margin" requires a border style.
See also: |ins-completion-menu|.
```

fixes: https://github.com/vim/vim/pull/18441#issuecomment-3360188458
closes: #18486
closes: #17091

Signed-off-by: Girish Palya <girishji@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
76 files changed:
ci/hlgroups.ignore
runtime/doc/options.txt
runtime/doc/syntax.txt
runtime/doc/tags
runtime/doc/version9.txt
runtime/optwin.vim
runtime/syntax/vim.vim
src/highlight.c
src/option.h
src/optiondefs.h
src/optionstr.c
src/po/vim.pot
src/popupmenu.c
src/proto/optionstr.pro
src/proto/popupmenu.pro
src/testdir/dumps/Test_mouse_popup_position_01.dump
src/testdir/dumps/Test_mouse_popup_position_02.dump
src/testdir/dumps/Test_mouse_popup_position_03.dump [new file with mode: 0644]
src/testdir/dumps/Test_mouse_popup_position_04.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_end_20.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_end_21.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_end_22.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_end_5.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_end_6.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_end_m_19.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_end_m_20.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_end_m_21.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_end_m_4.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_end_m_5.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_end_m_s_17.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_end_m_s_18.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_end_m_s_19.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_end_m_s_2.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_end_m_s_3.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_end_rtl_20.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_end_rtl_21.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_end_rtl_22.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_end_rtl_5.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_end_rtl_6.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_end_rtl_m_19.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_end_rtl_m_20.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_end_rtl_m_21.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_end_rtl_m_4.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_end_rtl_m_5.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_end_rtl_m_s_17.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_end_rtl_m_s_18.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_end_rtl_m_s_19.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_end_rtl_m_s_2.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_end_rtl_m_s_3.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_start_0.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_start_0_m.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_start_1.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_start_1_m.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_start_2.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_start_2_m.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_start_5.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_start_5_m.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_start_rtl_0.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_start_rtl_0_m.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_start_rtl_1.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_start_rtl_1_m.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_start_rtl_2.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_start_rtl_2_m.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_start_rtl_5.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_border_start_rtl_5_m.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_position_03.dump
src/testdir/dumps/Test_pum_maxwidth_07.dump
src/testdir/dumps/Test_pum_maxwidth_08.dump
src/testdir/dumps/Test_pum_maxwidth_21.dump
src/testdir/dumps/Test_pum_maxwidth_22.dump
src/testdir/test_highlight.vim
src/testdir/test_options.vim
src/testdir/test_popup.vim
src/testdir/util/gen_opt_test.vim
src/version.c
src/vim.h