mirror of
https://github.com/vim/vim.git
synced 2025-09-28 04:24:06 -04:00
patch 9.0.0998: "gk" may reset skipcol when not needed
Problem: "gk" may reset skipcol when not needed. Solution: Only reset skipcol if the cursor column is less.
This commit is contained in:
@@ -2343,7 +2343,7 @@ scroll_cursor_top(int min_scroll, int always)
|
|||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* If "always" is FALSE, only adjust topline to a lower value, higher
|
* If "always" is FALSE, only adjust topline to a lower value, higher
|
||||||
* value may happen with wrapping lines
|
* value may happen with wrapping lines.
|
||||||
*/
|
*/
|
||||||
if (new_topline < curwin->w_topline || always)
|
if (new_topline < curwin->w_topline || always)
|
||||||
curwin->w_topline = new_topline;
|
curwin->w_topline = new_topline;
|
||||||
@@ -2360,7 +2360,8 @@ scroll_cursor_top(int min_scroll, int always)
|
|||||||
check_topfill(curwin, FALSE);
|
check_topfill(curwin, FALSE);
|
||||||
#endif
|
#endif
|
||||||
// TODO: if the line doesn't fit may optimize w_skipcol
|
// TODO: if the line doesn't fit may optimize w_skipcol
|
||||||
if (curwin->w_topline == curwin->w_cursor.lnum)
|
if (curwin->w_topline == curwin->w_cursor.lnum
|
||||||
|
&& curwin->w_skipcol >= curwin->w_cursor.col)
|
||||||
reset_skipcol();
|
reset_skipcol();
|
||||||
if (curwin->w_topline != old_topline
|
if (curwin->w_topline != old_topline
|
||||||
|| curwin->w_skipcol != old_skipcol
|
|| curwin->w_skipcol != old_skipcol
|
||||||
|
@@ -359,6 +359,12 @@ func Test_smoothscroll_long_line_showbreak()
|
|||||||
call StopVimInTerminal(buf)
|
call StopVimInTerminal(buf)
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func s:check_col_calc(win_col, win_line, buf_col)
|
||||||
|
call assert_equal(a:win_col, wincol())
|
||||||
|
call assert_equal(a:win_line, winline())
|
||||||
|
call assert_equal(a:buf_col, col('.'))
|
||||||
|
endfunc
|
||||||
|
|
||||||
" Test that if the current cursor is on a smooth scrolled line, we correctly
|
" Test that if the current cursor is on a smooth scrolled line, we correctly
|
||||||
" reposition it. Also check that we don't miscalculate the values by checking
|
" reposition it. Also check that we don't miscalculate the values by checking
|
||||||
" the consistency between wincol() and col('.') as they are calculated
|
" the consistency between wincol() and col('.') as they are calculated
|
||||||
@@ -368,12 +374,6 @@ func Test_smoothscroll_cursor_position()
|
|||||||
setl smoothscroll wrap
|
setl smoothscroll wrap
|
||||||
call setline(1, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
|
call setline(1, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
|
||||||
|
|
||||||
func s:check_col_calc(win_col, win_line, buf_col)
|
|
||||||
call assert_equal(a:win_col, wincol())
|
|
||||||
call assert_equal(a:win_line, winline())
|
|
||||||
call assert_equal(a:buf_col, col('.'))
|
|
||||||
endfunc
|
|
||||||
|
|
||||||
call s:check_col_calc(1, 1, 1)
|
call s:check_col_calc(1, 1, 1)
|
||||||
exe "normal \<C-E>"
|
exe "normal \<C-E>"
|
||||||
|
|
||||||
@@ -450,9 +450,41 @@ func Test_smoothscroll_cursor_position()
|
|||||||
call s:check_col_calc(1, 3, 37)
|
call s:check_col_calc(1, 3, 37)
|
||||||
normal gg
|
normal gg
|
||||||
|
|
||||||
bwipeout!
|
bwipe!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_smoothscroll_cursor_scrolloff()
|
||||||
|
call NewWindow(10, 20)
|
||||||
|
setl smoothscroll wrap
|
||||||
|
setl scrolloff=3
|
||||||
|
|
||||||
|
" 120 chars are 6 screen lines
|
||||||
|
call setline(1, "abcdefghijklmnopqrstABCDEFGHIJKLMNOPQRSTabcdefghijklmnopqrstABCDEFGHIJKLMNOPQRSTabcdefghijklmnopqrstABCDEFGHIJKLMNOPQRST")
|
||||||
|
call setline(2, "below")
|
||||||
|
|
||||||
|
call s:check_col_calc(1, 1, 1)
|
||||||
|
|
||||||
|
" CTRL-E shows "<<<DEFG...", cursor move four lines down
|
||||||
|
exe "normal \<C-E>"
|
||||||
|
call s:check_col_calc(1, 4, 81)
|
||||||
|
|
||||||
|
" cursor on start of second line, "gk" moves into first line, skipcol doesn't
|
||||||
|
" change
|
||||||
|
exe "normal G0gk"
|
||||||
|
call s:check_col_calc(1, 5, 101)
|
||||||
|
|
||||||
|
" move cursor left one window width worth, scrolls one screen line
|
||||||
|
exe "normal 20h"
|
||||||
|
call s:check_col_calc(1, 5, 81)
|
||||||
|
|
||||||
|
" move cursor left one window width worth, scrolls one screen line
|
||||||
|
exe "normal 20h"
|
||||||
|
call s:check_col_calc(1, 4, 61)
|
||||||
|
|
||||||
|
bwipe!
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
|
||||||
" Test that mouse picking is still accurate when we have smooth scrolled lines
|
" Test that mouse picking is still accurate when we have smooth scrolled lines
|
||||||
func Test_smoothscroll_mouse_pos()
|
func Test_smoothscroll_mouse_pos()
|
||||||
CheckNotGui
|
CheckNotGui
|
||||||
|
@@ -695,6 +695,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
998,
|
||||||
/**/
|
/**/
|
||||||
997,
|
997,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user