Mercurial > vim
changeset 12684:185f8dbdcf26 v8.0.1220
patch 8.0.1220: skipping empty statusline groups is not correct
commit https://github.com/vim/vim/commit/235dddf1f4afe3a40047dbf2aca1bd177b7be18b
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Oct 26 18:21:24 2017 +0200
patch 8.0.1220: skipping empty statusline groups is not correct
Problem: Skipping empty statusline groups is not correct.
Solution: Also set group_end_userhl. (itchyny)
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Thu, 26 Oct 2017 18:30:05 +0200 |
parents | b7686c1c66b7 |
children | 7f73fbae6771 |
files | src/buffer.c src/testdir/test_statusline.vim src/version.c |
diffstat | 3 files changed, 15 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/buffer.c +++ b/src/buffer.c @@ -4028,9 +4028,14 @@ build_stl_str_hl( /* remove group if all items are empty and highlight group * doesn't change */ group_start_userhl = group_end_userhl = 0; - for (n = 0; n < groupitem[groupdepth]; n++) + for (n = groupitem[groupdepth] - 1; n >= 0; n--) + { if (item[n].type == Highlight) - group_start_userhl = item[n].minwid; + { + group_start_userhl = group_end_userhl = item[n].minwid; + break; + } + } for (n = groupitem[groupdepth] + 1; n < curitem; n++) { if (item[n].type == Normal)
--- a/src/testdir/test_statusline.vim +++ b/src/testdir/test_statusline.vim @@ -312,6 +312,12 @@ func Test_statusline() call assert_equal(sa1, sa3) call assert_equal(sa1, sa4) + let g:a = '' + set statusline=%#Error#{%(\ %{g:a}\ %)} + call assert_match('^{}\s*$', s:get_statusline()) + let g:a = 'X' + call assert_match('^{ X }\s*$', s:get_statusline()) + " %%: a percent sign. set statusline=10%% call assert_match('^10%\s*$', s:get_statusline())