# HG changeset patch # User Bram Moolenaar # Date 1666029604 -7200 # Node ID 51ffb2dedf04de828a975ed95f840bf7db454fbd # Parent 0c2f18e44a54a92a1d5bf3f22d3969adfcea030e patch 9.0.0784: text prop "above" not right with 'number' and "n" in 'cpo' Commit: https://github.com/vim/vim/commit/b99e6e6c5fbabbade6431fb555c4fe7409a9269a Author: Bram Moolenaar Date: Mon Oct 17 18:55:03 2022 +0100 patch 9.0.0784: text prop "above" not right with 'number' and "n" in 'cpo' Problem: Text prop "above" not displayed correctly with 'number' and "n" in 'cpo'. Solution: Draw the line number column until the line text is reached. diff --git a/src/drawline.c b/src/drawline.c --- a/src/drawline.c +++ b/src/drawline.c @@ -343,9 +343,14 @@ handle_lnum_col( int num_attr UNUSED) { int has_cpo_n = vim_strchr(p_cpo, CPO_NUMCOL) != NULL; + int lnum_row = wlv->startrow + wlv->filler_lines +#ifdef FEAT_PROP_POPUP + + wlv->text_prop_above_count +#endif + ; if ((wp->w_p_nu || wp->w_p_rnu) - && (wlv->row == wlv->startrow + wlv->filler_lines || !has_cpo_n) + && (wlv->row <= lnum_row || !has_cpo_n) // there is no line number in a wrapped line when "n" is in // 'cpoptions', but 'breakindent' assumes it anyway. && !((has_cpo_n @@ -366,10 +371,7 @@ handle_lnum_col( // Draw the line number (empty space after wrapping). // When there are text properties above the line put the line number // below them. - if (wlv->row == wlv->startrow + wlv->filler_lines -#ifdef FEAT_PROP_POPUP - + wlv->text_prop_above_count -#endif + if (wlv->row == lnum_row && (wp->w_skipcol == 0 || wlv->row > wp->w_winrow || (wp->w_p_nu && wp->w_p_rnu))) { @@ -1695,6 +1697,8 @@ win_line( { area_highlighting = TRUE; extra_check = TRUE; + // text props "above" move the line number down to where the + // text is. for (int i = 0; i < text_prop_count; ++i) if (text_props[i].tp_flags & TP_FLAG_ALIGN_ABOVE) ++wlv.text_prop_above_count; diff --git a/src/testdir/dumps/Test_prop_above_number_1.dump b/src/testdir/dumps/Test_prop_above_number_1.dump new file mode 100644 --- /dev/null +++ b/src/testdir/dumps/Test_prop_above_number_1.dump @@ -0,0 +1,8 @@ +| +0#af5f00255#ffffff0@1|1| >o+0#0000000&|n|e| |o|n|e| |o|n|e| @59 +| +0#af5f00255&@3|a+0#0000000#ffd7ff255|b|o|v|e| |t|h|e| |t|e|x|t| +0&#ffffff0@56 +| +0#af5f00255&@1|2| |t+0#0000000&|w|o| |t|w|o| |t|w|o| @59 +| +0#af5f00255&@1|3| |t+0#0000000&|h|r|e@1| |t|h|r|e@1| |t|h|r|e@1| @53 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|1|,|1| @10|A|l@1| diff --git a/src/testdir/dumps/Test_prop_above_number_2.dump b/src/testdir/dumps/Test_prop_above_number_2.dump new file mode 100644 --- /dev/null +++ b/src/testdir/dumps/Test_prop_above_number_2.dump @@ -0,0 +1,8 @@ +| +0#af5f00255#ffffff0@1|1| >o+0#0000000&|n|e| |o|n|e| |o|n|e| @59 +| +0#af5f00255&@3|a+0#0000000#ffd7ff255|b|o|v|e| |t|h|e| |t|e|x|t| +0&#ffffff0@56 +| +0#af5f00255&@3|a+0#0000000#ffd7ff255|l|s|o| |a|b|o|v|e| |t|h|e| |t|e|x|t| +0&#ffffff0@51 +| +0#af5f00255&@1|2| |t+0#0000000&|w|o| |t|w|o| |t|w|o| @59 +| +0#af5f00255&@1|3| |t+0#0000000&|h|r|e@1| |t|h|r|e@1| |t|h|r|e@1| @53 +|~+0#4040ff13&| @73 +|~| @73 +| +0#0000000&@56|1|,|1| @10|A|l@1| diff --git a/src/testdir/test_textprop.vim b/src/testdir/test_textprop.vim --- a/src/testdir/test_textprop.vim +++ b/src/testdir/test_textprop.vim @@ -2964,6 +2964,37 @@ func Test_prop_above_with_indent() call prop_type_delete('indented') endfunc +func Test_prop_above_with_number() + CheckRunVimInTerminal + + let lines =<< trim END + vim9script + setline(1, ['one one one', 'two two two', 'three three three']) + set number cpo+=n + prop_type_add('test', {highlight: 'DiffChange'}) + prop_add(2, 0, { + text: 'above the text', + type: 'test', + text_align: 'above', + }) + def g:OneMore() + prop_add(2, 0, { + text: 'also above the text', + type: 'test', + text_align: 'above', + }) + enddef + END + call writefile(lines, 'XscriptPropAboveNr', 'D') + let buf = RunVimInTerminal('-S XscriptPropAboveNr', #{rows: 8}) + call VerifyScreenDump(buf, 'Test_prop_above_number_1', {}) + + call term_sendkeys(buf, ":call OneMore()\") + call VerifyScreenDump(buf, 'Test_prop_above_number_2', {}) + + call StopVimInTerminal(buf) +endfunc + func Test_prop_below_split_line() CheckRunVimInTerminal diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -696,6 +696,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 784, +/**/ 783, /**/ 782,