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 #8254)
This commit is contained in:
Bram Moolenaar
2021-05-29 19:18:01 +02:00
parent a06e345af5
commit 74ede80aeb
3 changed files with 38 additions and 3 deletions

View File

@ -6144,6 +6144,17 @@ nv_g_cmd(cmdarg_T *cap)
i = curwin->w_leftcol + curwin->w_width - col_off - 1;
coladvance((colnr_T)i);
// if the character doesn't fit move one back
if (curwin->w_cursor.col > 0
&& (*mb_ptr2cells)(ml_get_cursor()) > 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;

View File

@ -2201,9 +2201,9 @@ func 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
@ -2238,6 +2238,28 @@ func 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 '])

View File

@ -750,6 +750,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
2904,
/**/
2903,
/**/