1
0
forked from aniani/vim

patch 8.2.2524: cannot change the characters displayed in the foldcolumn

Problem:    Cannot change the characters displayed in the foldcolumn.
Solution:   Add fields to 'fillchars'. (Yegappan Lakshmanan, Matthieu Coudron,
            closes #7860)
This commit is contained in:
Bram Moolenaar
2021-02-17 13:14:07 +01:00
parent c0fcb6e0b1
commit 3aca5a6fbc
6 changed files with 78 additions and 10 deletions

View File

@@ -3247,6 +3247,9 @@ A jump table for the options with a short description can be found at |Q_op|.
stlnc:c ' ' or '=' statusline of the non-current windows
vert:c '|' vertical separators |:vsplit|
fold:c '-' filling 'foldtext'
foldopen:c '-' mark the beginning of a fold
foldclose:c '+' show a closed fold
foldsep:c '|' open fold middle character
diff:c '-' deleted lines of the 'diff' option
eob:c '~' empty lines below the end of a buffer

View File

@@ -1347,6 +1347,9 @@ EXTERN int fill_stl INIT(= ' ');
EXTERN int fill_stlnc INIT(= ' ');
EXTERN int fill_vert INIT(= ' ');
EXTERN int fill_fold INIT(= '-');
EXTERN int fill_foldopen INIT(= '-');
EXTERN int fill_foldclosed INIT(= '+');
EXTERN int fill_foldsep INIT(= '|');
EXTERN int fill_diff INIT(= '-');
EXTERN int fill_eob INIT(= '~');

View File

@@ -1989,7 +1989,7 @@ retnomove:
count |= CURSOR_MOVED; // Cursor has moved
# ifdef FEAT_FOLDING
if (mouse_char == '+')
if (mouse_char == fill_foldclosed)
count |= MOUSE_FOLD_OPEN;
else if (mouse_char != ' ')
count |= MOUSE_FOLD_CLOSE;

View File

@@ -272,9 +272,9 @@ fill_foldcolumn(
{
if (win_foldinfo.fi_lnum == lnum
&& first_level + i >= win_foldinfo.fi_low_level)
p[i] = '-';
p[i] = fill_foldopen;
else if (first_level == 1)
p[i] = '|';
p[i] = fill_foldsep;
else if (first_level + i <= 9)
p[i] = '0' + first_level + i;
else
@@ -284,7 +284,7 @@ fill_foldcolumn(
}
}
if (closed)
p[i >= fdc ? i - 1 : i] = '+';
p[i >= fdc ? i - 1 : i] = fill_foldclosed;
}
#endif // FEAT_FOLDING
@@ -4761,12 +4761,15 @@ set_chars_option(win_T *wp, char_u **varp)
};
static struct charstab filltab[] =
{
{&fill_stl, "stl"},
{&fill_stlnc, "stlnc"},
{&fill_vert, "vert"},
{&fill_fold, "fold"},
{&fill_diff, "diff"},
{&fill_eob, "eob"},
{&fill_stl, "stl"},
{&fill_stlnc, "stlnc"},
{&fill_vert, "vert"},
{&fill_fold, "fold"},
{&fill_foldopen, "foldopen"},
{&fill_foldclosed, "foldclose"},
{&fill_foldsep, "foldsep"},
{&fill_diff, "diff"},
{&fill_eob, "eob"},
};
static lcs_chars_T lcs_chars;
struct charstab lcstab[] =
@@ -4821,6 +4824,9 @@ set_chars_option(win_T *wp, char_u **varp)
else
{
fill_diff = '-';
fill_foldopen = '-';
fill_foldclosed = '+';
fill_foldsep = '|';
fill_eob = '~';
}
}

View File

@@ -279,4 +279,58 @@ func Test_eob_fillchars()
close
endfunc
" Test for 'foldopen', 'foldclose' and 'foldsep' in 'fillchars'
func Test_fold_fillchars()
new
set fdc=2 foldenable foldmethod=manual
call setline(1, ['one', 'two', 'three', 'four', 'five'])
2,4fold
" First check for the default setting for a closed fold
let lines = ScreenLines([1, 3], 8)
let expected = [
\ ' one ',
\ '+ +-- 3',
\ ' five '
\ ]
call assert_equal(expected, lines)
normal 2Gzo
" check the characters for an open fold
let lines = ScreenLines([1, 5], 8)
let expected = [
\ ' one ',
\ '- two ',
\ '| three ',
\ '| four ',
\ ' five '
\ ]
call assert_equal(expected, lines)
" change the setting
set fillchars=vert:\|,fold:-,eob:~,foldopen:[,foldclose:],foldsep:-
" check the characters for an open fold
let lines = ScreenLines([1, 5], 8)
let expected = [
\ ' one ',
\ '[ two ',
\ '- three ',
\ '- four ',
\ ' five '
\ ]
call assert_equal(expected, lines)
" check the characters for a closed fold
normal 2Gzc
let lines = ScreenLines([1, 3], 8)
let expected = [
\ ' one ',
\ '] +-- 3',
\ ' five '
\ ]
call assert_equal(expected, lines)
%bw!
set fillchars& fdc& foldmethod& foldenable&
endfunc
" vim: shiftwidth=2 sts=2 expandtab

View File

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