From 1a691afd2717732c6f42dfe3278a9540db0d8110 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maria=20Jos=C3=A9=20Solano?= Date: Fri, 3 Oct 2025 08:24:31 +0000 Subject: [PATCH] patch 9.1.1819: Cannot configure the inner foldlevel indicator MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Problem: Cannot configure the inner foldlevel indicator for the foldcolumn Solution: Add "foldinner" suboption value to the 'fillchar' option (Maria José Solano). closes: #18365 Signed-off-by: Maria José Solano Signed-off-by: Christian Brabandt --- runtime/doc/fold.txt | 5 +++-- runtime/doc/options.txt | 3 +++ runtime/doc/version9.txt | 8 ++++++-- src/screen.c | 4 ++++ src/structs.h | 1 + src/testdir/test_display.vim | 26 ++++++++++++++++++++++++++ src/version.c | 2 ++ 7 files changed, 45 insertions(+), 4 deletions(-) diff --git a/runtime/doc/fold.txt b/runtime/doc/fold.txt index d138e0d93f..40cff059c6 100644 --- a/runtime/doc/fold.txt +++ b/runtime/doc/fold.txt @@ -1,4 +1,4 @@ -*fold.txt* For Vim version 9.1. Last change: 2025 Jul 15 +*fold.txt* For Vim version 9.1. Last change: 2025 Oct 03 VIM REFERENCE MANUAL by Bram Moolenaar @@ -595,7 +595,8 @@ A closed fold is indicated with a '+'. These characters can be changed with the 'fillchars' option. Where the fold column is too narrow to display all nested folds, digits are -shown to indicate the nesting level. +shown to indicate the nesting level. To override this behavior you can use +the "foldinner" character of the 'fillchars' option. The mouse can also be used to open and close folds by clicking in the fold column: diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index d0e587b4f7..0b86c41904 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -3853,6 +3853,9 @@ A jump table for the options with a short description can be found at |Q_op|. foldopen '-' mark the beginning of a fold foldclose '+' show a closed fold foldsep '|' open fold middle character + foldinner none character to show instead of the + numeric foldlevel when it would be + repeated in a narrow 'foldcolumn' diff '-' deleted lines of the 'diff' option eob '~' empty lines below the end of a buffer lastline '@' 'display' contains lastline/truncate diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt index 910a036141..6ae6d0118f 100644 --- a/runtime/doc/version9.txt +++ b/runtime/doc/version9.txt @@ -1,4 +1,4 @@ -*version9.txt* For Vim version 9.1. Last change: 2025 Sep 29 +*version9.txt* For Vim version 9.1. Last change: 2025 Oct 03 VIM REFERENCE MANUAL by Bram Moolenaar @@ -322,6 +322,8 @@ Improvements in 'fillchars': "eob" in 'fillchars'. - Support for using multibyte items with the "stl", "stlnc", "foldopen", "foldclose" and "foldsep" items in the 'fillchars' option. +- Support for configuring the character used inside a fold level region using + "foldinner" in 'fillchars'. Support for the XChaCha20 encryption method. 'cryptmethod' @@ -41702,7 +41704,9 @@ Options: ~ - new option values for 'fillchars': "trunc" - configure truncation indicator, 'pummaxwidth' "truncrl" - like "trunc" but in 'rl' mode, 'pummaxwidth' - "tpl_vert" - separators for the 'tabpanel' + "tpl_vert" - vertical separators for the 'tabpanel' + "foldinner" - character used inside the 'foldcolumn' for nested + fold levels - 'grepformat' is now a |global-local| option. - adjust for GTK3 dropping some mouse cursors 'mouseshape' - 'nrformats' accepts the new "blank" suboption, to determine a signed or diff --git a/src/screen.c b/src/screen.c index 3e3c86f37a..122c2b950b 100644 --- a/src/screen.c +++ b/src/screen.c @@ -287,6 +287,8 @@ fill_foldcolumn( symbol = wp->w_fill_chars.foldopen; else if (first_level == 1) symbol = wp->w_fill_chars.foldsep; + else if (wp->w_fill_chars.foldinner != NUL) + symbol = wp->w_fill_chars.foldinner; else if (first_level + i <= 9) symbol = '0' + first_level + i; else @@ -4738,6 +4740,7 @@ static struct charstab filltab[] = CHARSTAB_ENTRY(&fill_chars.foldopen, "foldopen"), CHARSTAB_ENTRY(&fill_chars.foldclosed, "foldclose"), CHARSTAB_ENTRY(&fill_chars.foldsep, "foldsep"), + CHARSTAB_ENTRY(&fill_chars.foldinner, "foldinner"), CHARSTAB_ENTRY(&fill_chars.diff, "diff"), CHARSTAB_ENTRY(&fill_chars.eob, "eob"), CHARSTAB_ENTRY(&fill_chars.lastline, "lastline"), @@ -4856,6 +4859,7 @@ set_chars_option(win_T *wp, char_u *value, int is_listchars, int apply, fill_chars.foldopen = '-'; fill_chars.foldclosed = '+'; fill_chars.foldsep = '|'; + fill_chars.foldinner = NUL; fill_chars.diff = '-'; fill_chars.eob = '~'; fill_chars.lastline = '@'; diff --git a/src/structs.h b/src/structs.h index f39f5d3a64..8d90fa8ddb 100644 --- a/src/structs.h +++ b/src/structs.h @@ -3913,6 +3913,7 @@ typedef struct int foldopen; int foldclosed; int foldsep; + int foldinner; int diff; int eob; int lastline; diff --git a/src/testdir/test_display.vim b/src/testdir/test_display.vim index ed8495984e..6bcc8a241e 100644 --- a/src/testdir/test_display.vim +++ b/src/testdir/test_display.vim @@ -340,6 +340,32 @@ func Test_fold_fillchars() \ ] call assert_equal(expected, lines) + " check setting foldinner + set fdc=1 foldmethod=indent foldlevel=10 + call setline(1, ['one', ' two', ' two', ' three', ' three', 'four']) + let lines = ScreenLines([1, 6], 22) + let expected = [ + \ ' one ', + \ '[ two ', + \ '- two ', + \ '[ three', + \ '2 three', + \ ' four ', + \ ] + call assert_equal(expected, lines) + + set fillchars+=foldinner:\ + let lines = ScreenLines([1, 6], 22) + let expected = [ + \ ' one ', + \ '[ two ', + \ '- two ', + \ '[ three', + \ ' three', + \ ' four ', + \ ] + call assert_equal(expected, lines) + %bw! set fillchars& fdc& foldmethod& foldenable& endfunc diff --git a/src/version.c b/src/version.c index 0565a8216a..431536543a 100644 --- a/src/version.c +++ b/src/version.c @@ -729,6 +729,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1819, /**/ 1818, /**/