mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
vim-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.
eb4de62931
Co-authored-by: Bram Moolenaar <Bram@vim.org>
This commit is contained in:
parent
c426f7a622
commit
6146400605
@ -609,7 +609,7 @@ static void handle_lnum_col(win_T *wp, winlinevars_T *wlv, int num_signs, int si
|
||||
} else {
|
||||
// Draw the line number (empty space after wrapping).
|
||||
if (wlv->row == wlv->startrow + wlv->filler_lines
|
||||
&& (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))) {
|
||||
get_line_number_str(wp, wlv->lnum, wlv->extra, sizeof(wlv->extra));
|
||||
if (wp->w_skipcol > 0 && wlv->startrow == 0) {
|
||||
for (wlv->p_extra = wlv->extra; *wlv->p_extra == ' '; wlv->p_extra++) {
|
||||
|
@ -533,9 +533,21 @@ void grid_put_linebuf(ScreenGrid *grid, int row, int coloff, int endcol, int cle
|
||||
if (topline && wp->w_skipcol > 0 && *get_showbreak_value(wp) == NUL) {
|
||||
// Take care of putting "<<<" on the first line for 'smoothscroll'
|
||||
// when 'showbreak' is not set.
|
||||
for (int i = 0; i < 3; i++) {
|
||||
schar_from_ascii(linebuf_char[i], '<');
|
||||
linebuf_attr[i] = HL_ATTR(HLF_AT);
|
||||
int off = 0;
|
||||
int skip = 0;
|
||||
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 && ascii_isdigit(*linebuf_char[off])) {
|
||||
off++;
|
||||
skip++;
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < 3 && i + skip < wp->w_width; i++) {
|
||||
schar_from_ascii(linebuf_char[off], '<');
|
||||
linebuf_attr[off] = HL_ATTR(HLF_AT);
|
||||
off++;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -181,6 +181,12 @@ describe('smoothscroll', function()
|
||||
set smoothscroll scrolloff=5
|
||||
set number cpo+=n
|
||||
:3
|
||||
func g:DoRel()
|
||||
set number relativenumber scrolloff=0
|
||||
:%del
|
||||
call setline(1, [ 'one', 'very long text '->repeat(12), 'three', ])
|
||||
exe "normal 2Gzt\<C-E>"
|
||||
endfunc
|
||||
]])
|
||||
screen:expect([[
|
||||
1 one word word word word word word wo|
|
||||
@ -271,6 +277,21 @@ describe('smoothscroll', function()
|
||||
~ |
|
||||
|
|
||||
]])
|
||||
exec('call DoRel()')
|
||||
screen:expect([[
|
||||
2<<<ong text very long text very lon^g te|
|
||||
xt very long text very long text ver|
|
||||
y long text very long text very long|
|
||||
text very long text very long text |
|
||||
1 three |
|
||||
~ |
|
||||
~ |
|
||||
~ |
|
||||
~ |
|
||||
~ |
|
||||
~ |
|
||||
--No lines in buffer-- |
|
||||
]])
|
||||
end)
|
||||
|
||||
-- oldtest: Test_smoothscroll_diff_mode()
|
||||
|
@ -138,6 +138,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\<C-E>"
|
||||
enddef
|
||||
END
|
||||
call writefile(lines, 'XSmoothNumber', 'D')
|
||||
let buf = RunVimInTerminal('-S XSmoothNumber', #{rows: 12, cols: 40})
|
||||
@ -155,6 +166,9 @@ func Test_smoothscroll_number()
|
||||
call term_sendkeys(buf, "\<C-Y>")
|
||||
call VerifyScreenDump(buf, 'Test_smooth_number_6', {})
|
||||
|
||||
call term_sendkeys(buf, ":call DoRel()\<CR>")
|
||||
call VerifyScreenDump(buf, 'Test_smooth_number_7', {})
|
||||
|
||||
call StopVimInTerminal(buf)
|
||||
endfunc
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user