To: vim_dev@googlegroups.com Subject: Patch 8.2.2524 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.2524 Problem: Cannot change the characters displayed in the foldcolumn. Solution: Add fields to 'fillchars'. (Yegappan Lakshmanan, Matthieu Coudron, closes #7860) Files: runtime/doc/options.txt, src/globals.h, src/mouse.c, src/screen.c, src/testdir/test_display.vim *** ../vim-8.2.2523/runtime/doc/options.txt 2021-02-15 20:37:58.453374547 +0100 --- runtime/doc/options.txt 2021-02-17 13:02:49.733623294 +0100 *************** *** 3243,3248 **** --- 3247,3255 ---- 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 *** ../vim-8.2.2523/src/globals.h 2021-02-15 20:37:58.457374538 +0100 --- src/globals.h 2021-02-17 13:02:49.733623294 +0100 *************** *** 1347,1352 **** --- 1347,1355 ---- 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(= '~'); *** ../vim-8.2.2523/src/mouse.c 2020-11-02 20:03:51.615794746 +0100 --- src/mouse.c 2021-02-17 13:02:49.733623294 +0100 *************** *** 1989,1995 **** count |= CURSOR_MOVED; // Cursor has moved # ifdef FEAT_FOLDING ! if (mouse_char == '+') count |= MOUSE_FOLD_OPEN; else if (mouse_char != ' ') count |= MOUSE_FOLD_CLOSE; --- 1989,1995 ---- count |= CURSOR_MOVED; // Cursor has moved # ifdef FEAT_FOLDING ! if (mouse_char == fill_foldclosed) count |= MOUSE_FOLD_OPEN; else if (mouse_char != ' ') count |= MOUSE_FOLD_CLOSE; *** ../vim-8.2.2523/src/screen.c 2021-02-16 22:22:08.115777605 +0100 --- src/screen.c 2021-02-17 13:02:49.733623294 +0100 *************** *** 272,280 **** { if (win_foldinfo.fi_lnum == lnum && first_level + i >= win_foldinfo.fi_low_level) ! p[i] = '-'; else if (first_level == 1) ! p[i] = '|'; else if (first_level + i <= 9) p[i] = '0' + first_level + i; else --- 272,280 ---- { if (win_foldinfo.fi_lnum == lnum && first_level + i >= win_foldinfo.fi_low_level) ! p[i] = fill_foldopen; else if (first_level == 1) ! p[i] = fill_foldsep; else if (first_level + i <= 9) p[i] = '0' + first_level + i; else *************** *** 284,290 **** } } if (closed) ! p[i >= fdc ? i - 1 : i] = '+'; } #endif // FEAT_FOLDING --- 284,290 ---- } } if (closed) ! p[i >= fdc ? i - 1 : i] = fill_foldclosed; } #endif // FEAT_FOLDING *************** *** 4761,4772 **** }; static struct charstab filltab[] = { ! {&fill_stl, "stl"}, ! {&fill_stlnc, "stlnc"}, ! {&fill_vert, "vert"}, ! {&fill_fold, "fold"}, ! {&fill_diff, "diff"}, ! {&fill_eob, "eob"}, }; static lcs_chars_T lcs_chars; struct charstab lcstab[] = --- 4761,4775 ---- }; static struct charstab filltab[] = { ! {&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,4826 **** --- 4824,4832 ---- else { fill_diff = '-'; + fill_foldopen = '-'; + fill_foldclosed = '+'; + fill_foldsep = '|'; fill_eob = '~'; } } *** ../vim-8.2.2523/src/testdir/test_display.vim 2021-02-13 18:24:19.326118995 +0100 --- src/testdir/test_display.vim 2021-02-17 13:02:49.733623294 +0100 *************** *** 279,282 **** --- 279,336 ---- 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 *** ../vim-8.2.2523/src/version.c 2021-02-17 12:29:12.218657041 +0100 --- src/version.c 2021-02-17 13:04:53.465335180 +0100 *************** *** 752,753 **** --- 752,755 ---- { /* Add new patch number below this line */ + /**/ + 2524, /**/ -- CRONE: Who sent you? ARTHUR: The Knights Who Say Ni! CRONE: Aaaagh! (she looks around in rear) No! We have no shrubberies here. "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///