mirror of
https://github.com/vim/vim.git
synced 2025-10-04 05:25:06 -04:00
patch 9.0.1542: line not fully displayed if it doesn't fit in the screen
Problem: Line not fully displayed if it doesn't fit in the screen. Solution: Do not reset s_skipcol if not needed. (Luuk van Baal, closes #12376)
This commit is contained in:
committed by
Bram Moolenaar
parent
e741f039cf
commit
6c018680be
@@ -2772,11 +2772,10 @@ scroll_cursor_halfway(int atend, int prefer_above)
|
|||||||
topline = loff.lnum;
|
topline = loff.lnum;
|
||||||
|
|
||||||
int want_height;
|
int want_height;
|
||||||
int smooth_scroll = FALSE;
|
int do_sms = curwin->w_p_wrap && curwin->w_p_sms;
|
||||||
if (curwin->w_p_sms && curwin->w_p_wrap)
|
if (do_sms)
|
||||||
{
|
{
|
||||||
// 'smoothscroll' and 'wrap' are set
|
// 'smoothscroll' and 'wrap' are set
|
||||||
smooth_scroll = TRUE;
|
|
||||||
if (atend)
|
if (atend)
|
||||||
{
|
{
|
||||||
want_height = (curwin->w_height - used) / 2;
|
want_height = (curwin->w_height - used) / 2;
|
||||||
@@ -2790,7 +2789,7 @@ scroll_cursor_halfway(int atend, int prefer_above)
|
|||||||
{
|
{
|
||||||
// If using smoothscroll, we can precisely scroll to the
|
// If using smoothscroll, we can precisely scroll to the
|
||||||
// exact point where the cursor is halfway down the screen.
|
// exact point where the cursor is halfway down the screen.
|
||||||
if (smooth_scroll)
|
if (do_sms)
|
||||||
{
|
{
|
||||||
topline_back_winheight(&loff, FALSE);
|
topline_back_winheight(&loff, FALSE);
|
||||||
if (loff.height == MAXCOL)
|
if (loff.height == MAXCOL)
|
||||||
@@ -2892,7 +2891,7 @@ scroll_cursor_halfway(int atend, int prefer_above)
|
|||||||
curwin->w_skipcol = skipcol;
|
curwin->w_skipcol = skipcol;
|
||||||
redraw_later(UPD_NOT_VALID);
|
redraw_later(UPD_NOT_VALID);
|
||||||
}
|
}
|
||||||
else
|
else if (do_sms)
|
||||||
reset_skipcol();
|
reset_skipcol();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
8
src/testdir/dumps/Test_display_cursor_long_line.dump
Normal file
8
src/testdir/dumps/Test_display_cursor_long_line.dump
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
|<+0#4040ff13#ffffff0@2|b+0#0000000&@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4|
|
||||||
|
|b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@2
|
||||||
|
@2| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4|
|
||||||
|
|b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@2
|
||||||
|
@2| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4|
|
||||||
|
|b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@2
|
||||||
|
@2| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4| |b@4>
|
||||||
|
@57|2|,|6|0@1| @8|5|0|%|
|
@@ -489,4 +489,22 @@ func Test_display_long_lastline()
|
|||||||
call StopVimInTerminal(buf)
|
call StopVimInTerminal(buf)
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" Moving the cursor to a line that doesn't fit in the window should show
|
||||||
|
" correctly.
|
||||||
|
func Test_display_cursor_long_line()
|
||||||
|
CheckScreendump
|
||||||
|
|
||||||
|
let lines =<< trim END
|
||||||
|
call setline(1, ['a', 'bbbbb '->repeat(100), 'c'])
|
||||||
|
norm $j
|
||||||
|
END
|
||||||
|
|
||||||
|
call writefile(lines, 'XdispCursorLongline', 'D')
|
||||||
|
let buf = RunVimInTerminal('-S XdispCursorLongline', #{rows: 8})
|
||||||
|
|
||||||
|
call VerifyScreenDump(buf, 'Test_display_cursor_long_line', {})
|
||||||
|
|
||||||
|
call StopVimInTerminal(buf)
|
||||||
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@@ -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 */
|
||||||
|
/**/
|
||||||
|
1542,
|
||||||
/**/
|
/**/
|
||||||
1541,
|
1541,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user