Mercurial > vim
changeset 23964:17697c4e5d48 v8.2.2524
patch 8.2.2524: cannot change the characters displayed in the foldcolumn
Commit: https://github.com/vim/vim/commit/3aca5a6fbcfbf5f4492b9ea0c4308ac524d33606
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed Feb 17 13:14:07 2021 +0100
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)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Wed, 17 Feb 2021 13:15:03 +0100 |
parents | 29b58c9d9df1 |
children | ece767530ffc |
files | runtime/doc/options.txt src/globals.h src/mouse.c src/screen.c src/testdir/test_display.vim src/version.c |
diffstat | 6 files changed, 78 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -3247,6 +3247,9 @@ A jump table for the options with a shor 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
--- a/src/globals.h +++ b/src/globals.h @@ -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(= '~');
--- a/src/mouse.c +++ b/src/mouse.c @@ -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;
--- a/src/screen.c +++ b/src/screen.c @@ -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 **var }; 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 **var else { fill_diff = '-'; + fill_foldopen = '-'; + fill_foldclosed = '+'; + fill_foldsep = '|'; fill_eob = '~'; } }
--- a/src/testdir/test_display.vim +++ b/src/testdir/test_display.vim @@ -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