diff options
-rw-r--r-- | src/drawline.c | 41 | ||||
-rw-r--r-- | src/testdir/dumps/Test_conceal_cul_wcr_01.dump | 4 | ||||
-rw-r--r-- | src/testdir/dumps/Test_conceal_cul_wcr_02.dump | 4 | ||||
-rw-r--r-- | src/testdir/dumps/Test_conceal_cul_wcr_03.dump | 4 | ||||
-rw-r--r-- | src/testdir/dumps/Test_conceal_cul_wcr_rl_01.dump | 4 | ||||
-rw-r--r-- | src/testdir/dumps/Test_conceal_cul_wcr_rl_02.dump | 4 | ||||
-rw-r--r-- | src/testdir/dumps/Test_conceal_cul_wcr_rl_03.dump | 4 | ||||
-rw-r--r-- | src/testdir/test_conceal.vim | 51 | ||||
-rw-r--r-- | src/version.c | 2 |
9 files changed, 118 insertions, 0 deletions
diff --git a/src/drawline.c b/src/drawline.c index 629d66f1c2..946e9bd3dd 100644 --- a/src/drawline.c +++ b/src/drawline.c @@ -4121,6 +4121,47 @@ win_line( { #ifdef FEAT_CONCEAL wlv.col -= wlv.boguscols; + // Apply 'cursorline' and 'wincolor' highlight. + if (wlv.boguscols != 0 && ( +# ifdef LINE_ATTR + wlv.line_attr != 0 || +# endif + wlv.win_attr != 0 + ) + ) + { + int attr = wlv.win_attr; +# ifdef LINE_ATTR + if (wlv.line_attr != 0) + attr = hl_combine_attr(attr, wlv.line_attr); +# endif + while (( +# ifdef FEAT_RIGHTLEFT + wp->w_p_rl ? wlv.col >= 0 : +# endif + wlv.col < wp->w_width)) + { + ScreenLines[wlv.off] = ' '; + if (enc_utf8) + ScreenLinesUC[wlv.off] = 0; + ScreenAttrs[wlv.off] = attr; + ScreenCols[wlv.off] = MAXCOL; // TODO: this is wrong +# ifdef FEAT_RIGHTLEFT + if (wp->w_p_rl) + { + wlv.off--; + wlv.col--; + wlv.boguscols++; + } + else +# endif + { + wlv.off++; + wlv.col++; + wlv.boguscols--; + } + } + } wlv_screen_line(wp, &wlv, FALSE); wlv.col += wlv.boguscols; wlv.boguscols = 0; diff --git a/src/testdir/dumps/Test_conceal_cul_wcr_01.dump b/src/testdir/dumps/Test_conceal_cul_wcr_01.dump new file mode 100644 index 0000000000..9cb27c8e96 --- /dev/null +++ b/src/testdir/dumps/Test_conceal_cul_wcr_01.dump @@ -0,0 +1,4 @@ +|o+8&#ffffff0|n|e| |o|n|e| |o|n|e| @1|o|n|e| |o|n|e| |o|n|e| |o|n|e| |o|n>e| @7 +@1|o|n|e| |o|n|e| |o|n|e| @27 +|~+0#4040ff13&| @38 +| +0#0000000&@21|1|,|4|0| @9|A|l@1| diff --git a/src/testdir/dumps/Test_conceal_cul_wcr_02.dump b/src/testdir/dumps/Test_conceal_cul_wcr_02.dump new file mode 100644 index 0000000000..668e1af84f --- /dev/null +++ b/src/testdir/dumps/Test_conceal_cul_wcr_02.dump @@ -0,0 +1,4 @@ +|o+8#ffffff16#e000002|n|e| |o|n|e| |o|n|e| @1|o|n|e| |o|n|e| |o|n|e| |o|n|e| |o|n>e| @7 +@1|o|n|e| |o|n|e| |o|n|e| @27 +|~+0#4040ff13&| @38 +|:+0#0000000#ffffff0|s|e|t| |w|i|n|c|o|l|o|r|=|E|r@1|o|r|M|s|g|1|,|4|0| @9|A|l@1| diff --git a/src/testdir/dumps/Test_conceal_cul_wcr_03.dump b/src/testdir/dumps/Test_conceal_cul_wcr_03.dump new file mode 100644 index 0000000000..965e9f577b --- /dev/null +++ b/src/testdir/dumps/Test_conceal_cul_wcr_03.dump @@ -0,0 +1,4 @@ +|o+0#ffffff16#e000002|n|e| |o|n|e| |o|n|e| @1|o|n|e| |o|n|e| |o|n|e| |o|n|e| |o|n>e| @7 +@1|o|n|e| |o|n|e| |o|n|e| @27 +|~+0#4040ff13&| @38 +|:+0#0000000#ffffff0|s|e|t| |n|o|c|u|r|s|o|r|l|i|n|e| @4|1|,|4|0| @9|A|l@1| diff --git a/src/testdir/dumps/Test_conceal_cul_wcr_rl_01.dump b/src/testdir/dumps/Test_conceal_cul_wcr_rl_01.dump new file mode 100644 index 0000000000..d1a31a6aab --- /dev/null +++ b/src/testdir/dumps/Test_conceal_cul_wcr_rl_01.dump @@ -0,0 +1,4 @@ +| +8&#ffffff0@7>e|n|o| |e|n|o| |e|n|o| |e|n|o| |e|n|o| @1|e|n|o| |e|n|o| |e|n|o +| @27|e|n|o| |e|n|o| |e|n|o| +| +0#4040ff13&@38|~ +| +0#0000000&@21|1|,|4|0| @9|A|l@1| diff --git a/src/testdir/dumps/Test_conceal_cul_wcr_rl_02.dump b/src/testdir/dumps/Test_conceal_cul_wcr_rl_02.dump new file mode 100644 index 0000000000..21809e9408 --- /dev/null +++ b/src/testdir/dumps/Test_conceal_cul_wcr_rl_02.dump @@ -0,0 +1,4 @@ +| +8#ffffff16#e000002@7>e|n|o| |e|n|o| |e|n|o| |e|n|o| |e|n|o| @1|e|n|o| |e|n|o| |e|n|o +| @27|e|n|o| |e|n|o| |e|n|o| +| +0#4040ff13&@38|~ +|:+0#0000000#ffffff0|s|e|t| |w|i|n|c|o|l|o|r|=|E|r@1|o|r|M|s|g|1|,|4|0| @9|A|l@1| diff --git a/src/testdir/dumps/Test_conceal_cul_wcr_rl_03.dump b/src/testdir/dumps/Test_conceal_cul_wcr_rl_03.dump new file mode 100644 index 0000000000..0eeb739f3b --- /dev/null +++ b/src/testdir/dumps/Test_conceal_cul_wcr_rl_03.dump @@ -0,0 +1,4 @@ +| +0#ffffff16#e000002@7>e|n|o| |e|n|o| |e|n|o| |e|n|o| |e|n|o| @1|e|n|o| |e|n|o| |e|n|o +| @27|e|n|o| |e|n|o| |e|n|o| +| +0#4040ff13&@38|~ +|:+0#0000000#ffffff0|s|e|t| |n|o|c|u|r|s|o|r|l|i|n|e| @4|1|,|4|0| @9|A|l@1| diff --git a/src/testdir/test_conceal.vim b/src/testdir/test_conceal.vim index e9779213fd..16953fc32c 100644 --- a/src/testdir/test_conceal.vim +++ b/src/testdir/test_conceal.vim @@ -171,6 +171,57 @@ func Test_conceal_with_cursorcolumn() call StopVimInTerminal(buf) endfunc +" Check that 'cursorline' and 'wincolor' apply to the whole line in presence +" of wrapped lines containing concealed text. +func Test_conceal_wrapped_cursorline_wincolor() + CheckScreendump + + let code =<< trim [CODE] + call setline(1, 'one one one |hidden| one one one one one one one one') + syntax match test /|hidden|/ conceal + set conceallevel=2 concealcursor=n cursorline + normal! g$ + [CODE] + + call writefile(code, 'XTest_conceal_cul_wcr', 'D') + let buf = RunVimInTerminal('-S XTest_conceal_cul_wcr', {'rows': 4, 'cols': 40}) + call VerifyScreenDump(buf, 'Test_conceal_cul_wcr_01', {}) + + call term_sendkeys(buf, ":set wincolor=ErrorMsg\n") + call VerifyScreenDump(buf, 'Test_conceal_cul_wcr_02', {}) + + call term_sendkeys(buf, ":set nocursorline\n") + call VerifyScreenDump(buf, 'Test_conceal_cul_wcr_03', {}) + + " clean up + call StopVimInTerminal(buf) +endfunc + +" Same as Test_conceal_wrapped_cursorline_wincolor(), but with 'rightleft'. +func Test_conceal_wrapped_cursorline_wincolor_rightleft() + CheckScreendump + + let code =<< trim [CODE] + call setline(1, 'one one one |hidden| one one one one one one one one') + syntax match test /|hidden|/ conceal + set conceallevel=2 concealcursor=n cursorline rightleft + normal! g$ + [CODE] + + call writefile(code, 'XTest_conceal_cul_wcr_rl', 'D') + let buf = RunVimInTerminal('-S XTest_conceal_cul_wcr_rl', {'rows': 4, 'cols': 40}) + call VerifyScreenDump(buf, 'Test_conceal_cul_wcr_rl_01', {}) + + call term_sendkeys(buf, ":set wincolor=ErrorMsg\n") + call VerifyScreenDump(buf, 'Test_conceal_cul_wcr_rl_02', {}) + + call term_sendkeys(buf, ":set nocursorline\n") + call VerifyScreenDump(buf, 'Test_conceal_cul_wcr_rl_03', {}) + + " clean up + call StopVimInTerminal(buf) +endfunc + func Test_conceal_resize_term() CheckScreendump diff --git a/src/version.c b/src/version.c index 974744e60d..82bd4f4047 100644 --- a/src/version.c +++ b/src/version.c @@ -705,6 +705,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 174, +/**/ 173, /**/ 172, |