aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-02-16 07:41:39 +0800
committerzeertzjq <zeertzjq@outlook.com>2023-02-16 08:09:41 +0800
commit0bb3a373d32e150af3909e3873be91f34df211dc (patch)
tree4dd105e8c45b6f7b47f22afeb18b3bfcc8c0144f /src
parenta2dd7fa97bab06be2b357e34af0ed0a194774d70 (diff)
downloadrneovim-0bb3a373d32e150af3909e3873be91f34df211dc.tar.gz
rneovim-0bb3a373d32e150af3909e3873be91f34df211dc.tar.bz2
rneovim-0bb3a373d32e150af3909e3873be91f34df211dc.zip
vim-patch:9.0.1312: Cursor position wrong when splitting window in insert mode
Problem: Cursor position wrong when splitting window in insert mode. Solution: Pass the actual mode to win_fix_cursor(). (Luuk van Baal, closes vim/vim#11999, https://github.com/vim/vim/commit/bc3dc298b37820a8212e7d839e882e07d6cc98c8 Co-authored-by: Luuk van Baal <luukvbaal@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/nvim/testdir/test_window_cmd.vim9
-rw-r--r--src/nvim/window.c7
2 files changed, 6 insertions, 10 deletions
diff --git a/src/nvim/testdir/test_window_cmd.vim b/src/nvim/testdir/test_window_cmd.vim
index 4a8a1b11f1..8b9457ae1d 100644
--- a/src/nvim/testdir/test_window_cmd.vim
+++ b/src/nvim/testdir/test_window_cmd.vim
@@ -1653,14 +1653,7 @@ func Test_splitkeep_options()
" Scroll when cursor becomes invalid in insert mode.
norm Lic
- call assert_equal(curpos[0], getcurpos()[0], 'run ' .. run)
-
- " The line number might be one less because of round-off.
- call assert_inrange(curpos[1] - 1, curpos[1], getcurpos()[1], 'run ' .. run)
-
- call assert_equal(curpos[2], getcurpos()[2], 'run ' .. run)
- call assert_equal(curpos[3], getcurpos()[3], 'run ' .. run)
- call assert_equal(curpos[4], getcurpos()[4], 'run ' .. run)
+ call assert_equal(curpos, getcurpos(), 'run ' .. run)
" No scroll when topline not equal to 1
only | execute "norm gg5\<C-e>" | split | wincmd k
diff --git a/src/nvim/window.c b/src/nvim/window.c
index c6694cd489..36d422abd5 100644
--- a/src/nvim/window.c
+++ b/src/nvim/window.c
@@ -4835,7 +4835,9 @@ static void win_enter_ext(win_T *const wp, const int flags)
if (*p_spk == 'c') {
changed_line_abv_curs(); // assume cursor position needs updating
} else {
- win_fix_cursor(true);
+ // Make sure the cursor position is valid, either by moving the cursor
+ // or by scrolling the text.
+ win_fix_cursor(get_real_state() & (MODE_NORMAL|MODE_CMDLINE|MODE_TERMINAL));
}
fix_current_dir();
@@ -6407,7 +6409,8 @@ void win_fix_scroll(int resize)
/// Make sure the cursor position is valid for 'splitkeep'.
/// If it is not, put the cursor position in the jumplist and move it.
-/// If we are not in normal mode, scroll to make valid instead.
+/// If we are not in normal mode ("normal" is zero), make it valid by scrolling
+/// instead.
static void win_fix_cursor(int normal)
{
win_T *wp = curwin;