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 {
|
} else {
|
||||||
// Draw the line number (empty space after wrapping).
|
// Draw the line number (empty space after wrapping).
|
||||||
if (wlv->row == wlv->startrow + wlv->filler_lines
|
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));
|
get_line_number_str(wp, wlv->lnum, wlv->extra, sizeof(wlv->extra));
|
||||||
if (wp->w_skipcol > 0 && wlv->startrow == 0) {
|
if (wp->w_skipcol > 0 && wlv->startrow == 0) {
|
||||||
for (wlv->p_extra = wlv->extra; *wlv->p_extra == ' '; wlv->p_extra++) {
|
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) {
|
if (topline && wp->w_skipcol > 0 && *get_showbreak_value(wp) == NUL) {
|
||||||
// Take care of putting "<<<" on the first line for 'smoothscroll'
|
// Take care of putting "<<<" on the first line for 'smoothscroll'
|
||||||
// when 'showbreak' is not set.
|
// when 'showbreak' is not set.
|
||||||
for (int i = 0; i < 3; i++) {
|
int off = 0;
|
||||||
schar_from_ascii(linebuf_char[i], '<');
|
int skip = 0;
|
||||||
linebuf_attr[i] = HL_ATTR(HLF_AT);
|
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 smoothscroll scrolloff=5
|
||||||
set number cpo+=n
|
set number cpo+=n
|
||||||
:3
|
: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([[
|
screen:expect([[
|
||||||
1 one word word word word word word wo|
|
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)
|
end)
|
||||||
|
|
||||||
-- oldtest: Test_smoothscroll_diff_mode()
|
-- oldtest: Test_smoothscroll_diff_mode()
|
||||||
|
@ -138,6 +138,17 @@ func Test_smoothscroll_number()
|
|||||||
set smoothscroll
|
set smoothscroll
|
||||||
set number cpo+=n
|
set number cpo+=n
|
||||||
:3
|
: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
|
END
|
||||||
call writefile(lines, 'XSmoothNumber', 'D')
|
call writefile(lines, 'XSmoothNumber', 'D')
|
||||||
let buf = RunVimInTerminal('-S XSmoothNumber', #{rows: 12, cols: 40})
|
let buf = RunVimInTerminal('-S XSmoothNumber', #{rows: 12, cols: 40})
|
||||||
@ -155,6 +166,9 @@ func Test_smoothscroll_number()
|
|||||||
call term_sendkeys(buf, "\<C-Y>")
|
call term_sendkeys(buf, "\<C-Y>")
|
||||||
call VerifyScreenDump(buf, 'Test_smooth_number_6', {})
|
call VerifyScreenDump(buf, 'Test_smooth_number_6', {})
|
||||||
|
|
||||||
|
call term_sendkeys(buf, ":call DoRel()\<CR>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_smooth_number_7', {})
|
||||||
|
|
||||||
call StopVimInTerminal(buf)
|
call StopVimInTerminal(buf)
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user