aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/move.c9
-rw-r--r--test/functional/legacy/display_spec.lua22
-rw-r--r--test/old/testdir/test_display.vim18
3 files changed, 43 insertions, 6 deletions
diff --git a/src/nvim/move.c b/src/nvim/move.c
index 9e053b2db5..ada6d004e8 100644
--- a/src/nvim/move.c
+++ b/src/nvim/move.c
@@ -2090,10 +2090,9 @@ void scroll_cursor_halfway(bool atend, bool prefer_above)
colnr_T skipcol = 0;
int want_height;
- bool smooth_scroll = false;
- if (curwin->w_p_sms && curwin->w_p_wrap) {
+ bool do_sms = curwin->w_p_wrap && curwin->w_p_sms;
+ if (do_sms) {
// 'smoothscroll' and 'wrap' are set
- smooth_scroll = true;
if (atend) {
want_height = (curwin->w_height_inner - used) / 2;
used = 0;
@@ -2106,7 +2105,7 @@ void scroll_cursor_halfway(bool atend, bool prefer_above)
while (topline > 1) {
// If using smoothscroll, we can precisely scroll to the
// exact point where the cursor is halfway down the screen.
- if (smooth_scroll) {
+ if (do_sms) {
topline_back_winheight(curwin, &loff, false);
if (loff.height == MAXCOL) {
break;
@@ -2190,7 +2189,7 @@ void scroll_cursor_halfway(bool atend, bool prefer_above)
if (skipcol != 0) {
curwin->w_skipcol = skipcol;
redraw_later(curwin, UPD_NOT_VALID);
- } else {
+ } else if (do_sms) {
reset_skipcol(curwin);
}
}
diff --git a/test/functional/legacy/display_spec.lua b/test/functional/legacy/display_spec.lua
index f1cd8d1aac..a698bed9f7 100644
--- a/test/functional/legacy/display_spec.lua
+++ b/test/functional/legacy/display_spec.lua
@@ -196,7 +196,7 @@ describe('display', function()
end)
-- oldtest: Test_display_long_lastline()
- it('display "lastline" shows correct text when end of wrapped line is deleted', function()
+ it('"lastline" shows correct text when end of wrapped line is deleted', function()
local screen = Screen.new(35, 14)
screen:attach()
exec([[
@@ -241,4 +241,24 @@ describe('display', function()
|
]])
end)
+
+ -- oldtest: Test_display_cursor_long_line()
+ it("correctly shows line that doesn't fit in the window", function()
+ local screen = Screen.new(75, 8)
+ screen:attach()
+ exec([[
+ call setline(1, ['a', 'bbbbb '->repeat(100), 'c'])
+ norm $j
+ ]])
+ screen:expect([[
+ <<<bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb |
+ bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbb|
+ bb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb |
+ bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbb|
+ bb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb |
+ bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbb|
+ bb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb bbbbb^ |
+ |
+ ]])
+ end)
end)
diff --git a/test/old/testdir/test_display.vim b/test/old/testdir/test_display.vim
index f27a8362a9..b30f3bbeef 100644
--- a/test/old/testdir/test_display.vim
+++ b/test/old/testdir/test_display.vim
@@ -500,4 +500,22 @@ func Test_display_long_lastline()
call StopVimInTerminal(buf)
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