aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorluukvbaal <luukvbaal@gmail.com>2024-07-05 01:51:34 +0200
committerGitHub <noreply@github.com>2024-07-05 07:51:34 +0800
commit3e6cec0befd41d37ee36cb4f602e84c58c5f0d27 (patch)
treef321739c38bb6062937f839f00fe43bcb80e8b3e
parent842725eedc1fce7ec1f4ab593215589b3029d6ae (diff)
downloadrneovim-3e6cec0befd41d37ee36cb4f602e84c58c5f0d27.tar.gz
rneovim-3e6cec0befd41d37ee36cb4f602e84c58c5f0d27.tar.bz2
rneovim-3e6cec0befd41d37ee36cb4f602e84c58c5f0d27.zip
vim-patch:9.1.0526: Unwanted cursor movement with pagescroll at start of buffer (#29569)
Problem: Cursor is moved to bottom of window trying to pagescroll when already at the start of the buffer (Asheq Imran, after v9.1.0357) Solution: Don't move cursor when buffer content did not move. (Luuk van Baal) https://github.com/vim/vim/commit/8ccb89016e4b4b7f87acd1da78486c077350ceef
-rw-r--r--src/nvim/move.c8
-rw-r--r--test/old/testdir/test_normal.vim3
2 files changed, 8 insertions, 3 deletions
diff --git a/src/nvim/move.c b/src/nvim/move.c
index e942f58711..8c206b3e8d 100644
--- a/src/nvim/move.c
+++ b/src/nvim/move.c
@@ -2518,9 +2518,11 @@ int pagescroll(Direction dir, int count, bool half)
? MAX(1, (int)p_window - 2) : get_scroll_overlap(dir));
nochange = scroll_with_sms(dir, count, &count);
- // Place cursor at top or bottom of window.
- validate_botline(curwin);
- curwin->w_cursor.lnum = (dir == FORWARD ? curwin->w_topline : curwin->w_botline - 1);
+ if (!nochange) {
+ // Place cursor at top or bottom of window.
+ validate_botline(curwin);
+ curwin->w_cursor.lnum = (dir == FORWARD ? curwin->w_topline : curwin->w_botline - 1);
+ }
}
if (get_scrolloff_value(curwin) > 0) {
diff --git a/test/old/testdir/test_normal.vim b/test/old/testdir/test_normal.vim
index 170b2cda53..6ebdfb1604 100644
--- a/test/old/testdir/test_normal.vim
+++ b/test/old/testdir/test_normal.vim
@@ -4267,6 +4267,9 @@ func Test_page_cursor_topbot()
call assert_equal(18, line('.'))
exe "norm! \<C-B>\<C-F>"
call assert_equal(9, line('.'))
+ " Not when already at the start of the buffer.
+ exe "norm! ggj\<C-B>"
+ call assert_equal(2, line('.'))
bwipe!
endfunc