mirror of
https://github.com/neovim/neovim.git
synced 2024-12-26 14:11:15 -07:00
vim-patch:8.2.2904: "g$" causes scroll if half a double width char is visible
Problem: "g$" causes scroll if half a double width char is visible.
Solution: Advance to the last fully visible character. (closes vim/vim#8254)
74ede80aeb
This commit is contained in:
parent
d0835617fa
commit
f42657cbcf
@ -6157,6 +6157,16 @@ static void nv_g_cmd(cmdarg_T *cap)
|
||||
i = curwin->w_leftcol + curwin->w_width_inner - col_off - 1;
|
||||
coladvance((colnr_T)i);
|
||||
|
||||
// if the character doesn't fit move one back
|
||||
if (curwin->w_cursor.col > 0 && utf_ptr2cells((const char *)get_cursor_pos_ptr()) > 1) {
|
||||
colnr_T vcol;
|
||||
|
||||
getvvcol(curwin, &curwin->w_cursor, NULL, NULL, &vcol);
|
||||
if (vcol >= curwin->w_leftcol + curwin->w_width - col_off) {
|
||||
curwin->w_cursor.col--;
|
||||
}
|
||||
}
|
||||
|
||||
// Make sure we stick in this column.
|
||||
validate_virtcol();
|
||||
curwin->w_curswant = curwin->w_virtcol;
|
||||
|
@ -1784,9 +1784,9 @@ fun! Test_normal33_g_cmd2()
|
||||
%d
|
||||
15vsp
|
||||
set wrap listchars= sbr=
|
||||
let lineA='abcdefghijklmnopqrstuvwxyz'
|
||||
let lineB='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||
let lineC='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
|
||||
let lineA = 'abcdefghijklmnopqrstuvwxyz'
|
||||
let lineB = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||
let lineC = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
|
||||
$put =lineA
|
||||
$put =lineB
|
||||
|
||||
@ -1821,6 +1821,28 @@ fun! Test_normal33_g_cmd2()
|
||||
call assert_equal('l', getreg(0))
|
||||
call assert_beeps('normal 5g$')
|
||||
|
||||
" Test for g$ with double-width character half displayed
|
||||
vsplit
|
||||
9wincmd |
|
||||
setlocal nowrap nonumber
|
||||
call setline(2, 'asdfasdfヨ')
|
||||
2
|
||||
normal 0g$
|
||||
call assert_equal(8, col('.'))
|
||||
10wincmd |
|
||||
normal 0g$
|
||||
call assert_equal(9, col('.'))
|
||||
|
||||
setlocal signcolumn=yes
|
||||
11wincmd |
|
||||
normal 0g$
|
||||
call assert_equal(8, col('.'))
|
||||
12wincmd |
|
||||
normal 0g$
|
||||
call assert_equal(9, col('.'))
|
||||
|
||||
close
|
||||
|
||||
" Test for g_
|
||||
call assert_beeps('normal! 100g_')
|
||||
call setline(2, [' foo ', ' foobar '])
|
||||
|
Loading…
Reference in New Issue
Block a user