diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-08-14 16:36:38 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-08-14 16:36:38 +0100 |
commit | 9e7e28fc4c32337f2153b94fb08140f47e46e35d (patch) | |
tree | 04da7aebe5211c82361dd7455ca34968332dd8cd | |
parent | 28c162f6f1f525882a9a60f10ab4836dee7eb59f (diff) |
patch 9.0.0208: the override flag has no effect for virtual textv9.0.0208
Problem: The override flag has no effect for virtual text. (Ben Jackson)
Solution: Make the override flag work. (closes #10915)
-rw-r--r-- | src/drawline.c | 19 | ||||
-rw-r--r-- | src/testdir/dumps/Test_prop_with_text_override_1.dump | 6 | ||||
-rw-r--r-- | src/testdir/dumps/Test_prop_with_text_override_2.dump | 6 | ||||
-rw-r--r-- | src/testdir/test_textprop.vim | 24 | ||||
-rw-r--r-- | src/version.c | 2 |
5 files changed, 51 insertions, 6 deletions
diff --git a/src/drawline.c b/src/drawline.c index a129bae420..19070228c2 100644 --- a/src/drawline.c +++ b/src/drawline.c @@ -554,6 +554,7 @@ win_line( int *text_prop_idxs = NULL; int text_props_active = 0; proptype_T *text_prop_type = NULL; + int extra_for_textprop = FALSE; // wlv.n_extra set for textprop int text_prop_attr = 0; int text_prop_id = 0; // active property ID int text_prop_flags = 0; @@ -1645,10 +1646,13 @@ win_line( ++text_prop_next; } - text_prop_attr = 0; - text_prop_flags = 0; - text_prop_type = NULL; - text_prop_id = 0; + if (wlv.n_extra == 0 || !extra_for_textprop) + { + text_prop_attr = 0; + text_prop_flags = 0; + text_prop_type = NULL; + text_prop_id = 0; + } if (text_props_active > 0 && wlv.n_extra == 0) { int used_tpi = -1; @@ -1709,6 +1713,7 @@ win_line( wlv.c_extra = NUL; wlv.c_final = NUL; wlv.n_extra = (int)STRLEN(p); + extra_for_textprop = TRUE; extra_attr = used_attr; n_attr = mb_charlen(p); saved_search_attr = search_attr; @@ -2094,6 +2099,7 @@ win_line( #if defined(FEAT_PROP_POPUP) if (wlv.n_extra <= 0) { + extra_for_textprop = FALSE; in_linebreak = FALSE; if (search_attr == 0) search_attr = saved_search_attr; @@ -2982,11 +2988,12 @@ win_line( } #endif - // Use "extra_attr", but don't override visual selection highlighting. + // Use "extra_attr", but don't override visual selection highlighting, + // unless text property overrides. // Don't use "extra_attr" until n_attr_skip is zero. if (n_attr_skip == 0 && n_attr > 0 && wlv.draw_state == WL_LINE - && !attr_pri) + && (!attr_pri || (text_prop_flags & PT_FLAG_OVERRIDE))) { #ifdef LINE_ATTR if (line_attr) diff --git a/src/testdir/dumps/Test_prop_with_text_override_1.dump b/src/testdir/dumps/Test_prop_with_text_override_1.dump new file mode 100644 index 0000000000..50b8511861 --- /dev/null +++ b/src/testdir/dumps/Test_prop_with_text_override_1.dump @@ -0,0 +1,6 @@ +>s+8&#e0e0e08|o|m|e| | +8#4040ff13#40ffff15|i|n|s|e|r|t|e|d| |t+8#0000000#e0e0e08|e|x|t| |h|e|r|e| @35 +|~+0#4040ff13#ffffff0| @58 +|~| @58 +|~| @58 +|~| @58 +| +0#0000000&@41|1|,|1| @10|A|l@1| diff --git a/src/testdir/dumps/Test_prop_with_text_override_2.dump b/src/testdir/dumps/Test_prop_with_text_override_2.dump new file mode 100644 index 0000000000..334929e112 --- /dev/null +++ b/src/testdir/dumps/Test_prop_with_text_override_2.dump @@ -0,0 +1,6 @@ +|s+0&#ffffff0|o|m+0&#e0e0e08|e| | +0#4040ff13#40ffff15|i|n|s|e|r|t|e|d| |t+0#0000000#e0e0e08|e|x|t| |h|e>r+0&#ffffff0|e| @35 +|~+0#4040ff13&| @58 +|~| @58 +|~| @58 +|~| @58 +|-+2#0000000&@1| |V|I|S|U|A|L| |-@1| +0&&@19|1@1| @7|1|,|1|3|-|2|3| @6|A|l@1| diff --git a/src/testdir/test_textprop.vim b/src/testdir/test_textprop.vim index 2e72db9b9b..db17e79bda 100644 --- a/src/testdir/test_textprop.vim +++ b/src/testdir/test_textprop.vim @@ -2805,6 +2805,30 @@ func Test_props_with_text_below_nowrap() call delete('XscriptPropsBelowNowrap') endfunc +func Test_props_with_text_override() + CheckRunVimInTerminal + + let lines =<< trim END + vim9script + setline(1, 'some text here') + hi Likethis ctermfg=blue ctermbg=cyan + prop_type_add('prop', {highlight: 'Likethis', override: true}) + prop_add(1, 6, {type: 'prop', text: ' inserted '}) + hi CursorLine cterm=underline ctermbg=lightgrey + set cursorline + END + call writefile(lines, 'XscriptPropsOverride') + let buf = RunVimInTerminal('-S XscriptPropsOverride', #{rows: 6, cols: 60}) + call VerifyScreenDump(buf, 'Test_prop_with_text_override_1', {}) + + call term_sendkeys(buf, ":set nocursorline\<CR>") + call term_sendkeys(buf, "0llvfr") + call VerifyScreenDump(buf, 'Test_prop_with_text_override_2', {}) + + call StopVimInTerminal(buf) + call delete('XscriptPropsOverride') +endfunc + func Test_props_with_text_CursorMoved() CheckRunVimInTerminal diff --git a/src/version.c b/src/version.c index 1ef5b39e97..00afb67e41 100644 --- a/src/version.c +++ b/src/version.c @@ -736,6 +736,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 208, +/**/ 207, /**/ 206, |