# HG changeset patch # User Bram Moolenaar # Date 1665837907 -7200 # Node ID fa3aba805a3424213ffd6f19fa89d7745c865bb1 # Parent 163b574770571ce2ec1c9e63f565dd702ba5776e patch 9.0.0757: line number not visisble with 'smoothscroll', 'nu' and 'rnu' Commit: https://github.com/vim/vim/commit/eb4de629315f2682d8b314462d02422ec98d751a Author: Bram Moolenaar Date: Sat Oct 15 13:42:17 2022 +0100 patch 9.0.0757: line number not visisble with 'smoothscroll', 'nu' and 'rnu' Problem: Line number not visisble with 'smoothscroll', 'nu' and 'rnu'. Solution: Put the ">>>" after the line number instead of on top. diff --git a/src/drawline.c b/src/drawline.c --- a/src/drawline.c +++ b/src/drawline.c @@ -370,7 +370,8 @@ handle_lnum_col( #ifdef FEAT_PROP_POPUP + wlv->text_prop_above_count #endif - && (wp->w_skipcol == 0 || wlv->row > wp->w_winrow)) + && (wp->w_skipcol == 0 || wlv->row > wp->w_winrow + || (wp->w_p_nu && wp->w_p_rnu))) { long num; char *fmt = "%*ld "; @@ -770,8 +771,18 @@ wlv_screen_line(win_T *wp, winlinevars_T ) { int off = (int)(current_ScreenLine - ScreenLines); + int skip = 0; - for (int i = 0; i < 3; ++i) + if (wp->w_p_nu && wp->w_p_rnu) + // Do not overwrite the line number, change "123 text" to + // "123>>>xt". + while (skip < wp->w_width && VIM_ISDIGIT(ScreenLines[off])) + { + ++off; + ++skip; + } + + for (int i = 0; i < 3 && i + skip < wp->w_width; ++i) { ScreenLines[off] = '<'; if (enc_utf8) diff --git a/src/testdir/dumps/Test_smooth_number_7.dump b/src/testdir/dumps/Test_smooth_number_7.dump new file mode 100644 --- /dev/null +++ b/src/testdir/dumps/Test_smooth_number_7.dump @@ -0,0 +1,12 @@ +|2+0#af5f00255#ffffff0|<+0#4040ff13&@2|o+0#0000000&|n|g| |t|e|x|t| |v|e|r|y| |l|o|n|g| |t|e|x|t| |v|e|r|y| |l|o|n>g| |t|e +| +0#af5f00255&@3|x+0#0000000&|t| |v|e|r|y| |l|o|n|g| |t|e|x|t| |v|e|r|y| |l|o|n|g| |t|e|x|t| |v|e|r +| +0#af5f00255&@3|y+0#0000000&| |l|o|n|g| |t|e|x|t| |v|e|r|y| |l|o|n|g| |t|e|x|t| |v|e|r|y| |l|o|n|g +| +0#af5f00255&@3| +0#0000000&|t|e|x|t| |v|e|r|y| |l|o|n|g| |t|e|x|t| |v|e|r|y| |l|o|n|g| |t|e|x|t| +| +0#af5f00255&@1|1| |t+0#0000000&|h|r|e@1| @30 +|~+0#4040ff13&| @38 +|~| @38 +|~| @38 +|~| @38 +|~| @38 +|~| @38 +|-+0#0000000&@1|N|o|.@2|e|r|-@1| @10|2|,|7|3| @9|B|o|t| diff --git a/src/testdir/test_scroll_opt.vim b/src/testdir/test_scroll_opt.vim --- a/src/testdir/test_scroll_opt.vim +++ b/src/testdir/test_scroll_opt.vim @@ -121,6 +121,17 @@ func Test_smoothscroll_number() set smoothscroll set number cpo+=n :3 + + def g:DoRel() + set number relativenumber scrolloff=0 + :%del + setline(1, [ + 'one', + 'very long text '->repeat(12), + 'three', + ]) + exe "normal 2Gzt\" + enddef END call writefile(lines, 'XSmoothNumber', 'D') let buf = RunVimInTerminal('-S XSmoothNumber', #{rows: 12, cols: 40}) @@ -138,6 +149,9 @@ func Test_smoothscroll_number() call term_sendkeys(buf, "\") call VerifyScreenDump(buf, 'Test_smooth_number_6', {}) + call term_sendkeys(buf, ":call DoRel()\") + call VerifyScreenDump(buf, 'Test_smooth_number_7', {}) + call StopVimInTerminal(buf) endfunc 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 */ /**/ + 757, +/**/ 756, /**/ 755,