patch 9.1.1819: Cannot configure the inner foldlevel indicator

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 <majosolano99@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Maria José Solano
2025-10-03 08:24:31 +00:00
committed by Christian Brabandt
parent 09b1ce0860
commit 1a691afd27
7 changed files with 45 additions and 4 deletions

View File

@ -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:

View File

@ -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

View File

@ -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

View File

@ -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 = '@';

View File

@ -3913,6 +3913,7 @@ typedef struct
int foldopen;
int foldclosed;
int foldsep;
int foldinner;
int diff;
int eob;
int lastline;

View File

@ -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

View File

@ -729,6 +729,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1819,
/**/
1818,
/**/