diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-07-25 19:12:06 +0800 |
---|---|---|
committer | zeertzjq <zeertzjq@outlook.com> | 2022-07-25 20:30:35 +0800 |
commit | 611b43369e73b0da799226f70a6821c0c31ca222 (patch) | |
tree | dd2f96fa93d6263faa1fc728e5d9b00c35f19713 /src | |
parent | e12c62c1f7a7ebb957831ca1e0e49771e190a1a8 (diff) | |
download | rneovim-611b43369e73b0da799226f70a6821c0c31ca222.tar.gz rneovim-611b43369e73b0da799226f70a6821c0c31ca222.tar.bz2 rneovim-611b43369e73b0da799226f70a6821c0c31ca222.zip |
vim-patch:8.2.5155: in diff mode windows may get out of sync
Problem: In diff mode windows may get out of sync. (Gary Johnson)
Solution: Avoid that the other window scrolls for 'cursorbind'.
https://github.com/vim/vim/commit/a315ce1f326b836167ca8b1037dafd93eb8d4d4e
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/move.c | 8 | ||||
-rw-r--r-- | src/nvim/testdir/test_diffmode.vim | 69 |
2 files changed, 76 insertions, 1 deletions
diff --git a/src/nvim/move.c b/src/nvim/move.c index bd68ad6f97..6d4eb8ef49 100644 --- a/src/nvim/move.c +++ b/src/nvim/move.c @@ -2271,7 +2271,13 @@ void do_check_cursorbind(void) int restart_edit_save = restart_edit; restart_edit = true; check_cursor(); - validate_cursor(); + + // Avoid a scroll here for the cursor position, 'scrollbind' is + // more important. + if (!curwin->w_p_scb) { + validate_cursor(); + } + restart_edit = restart_edit_save; } // Correct cursor for multi-byte character. diff --git a/src/nvim/testdir/test_diffmode.vim b/src/nvim/testdir/test_diffmode.vim index 007b7e0f14..e059ecb493 100644 --- a/src/nvim/testdir/test_diffmode.vim +++ b/src/nvim/testdir/test_diffmode.vim @@ -1378,4 +1378,73 @@ func Test_diff_foldinvert() set scrollbind& endfunc +" This was scrolling for 'cursorbind' but 'scrollbind' is more important +func Test_diff_scroll() + CheckScreendump + + let left =<< trim END + line 1 + line 2 + line 3 + line 4 + + // Common block + // one + // containing + // four lines + + // Common block + // two + // containing + // four lines + END + call writefile(left, 'Xleft') + let right =<< trim END + line 1 + line 2 + line 3 + line 4 + + Lorem + ipsum + dolor + sit + amet, + consectetur + adipiscing + elit. + Etiam + luctus + lectus + sodales, + dictum + + // Common block + // one + // containing + // four lines + + Vestibulum + tincidunt + aliquet + nulla. + + // Common block + // two + // containing + // four lines + END + call writefile(right, 'Xright') + let buf = RunVimInTerminal('-d Xleft Xright', {'rows': 12}) + call term_sendkeys(buf, "\<C-W>\<C-W>jjjj") + call VerifyScreenDump(buf, 'Test_diff_scroll_1', {}) + call term_sendkeys(buf, "j") + call VerifyScreenDump(buf, 'Test_diff_scroll_2', {}) + + call StopVimInTerminal(buf) + call delete('Xleft') + call delete('Xright') +endfunc + + " vim: shiftwidth=2 sts=2 expandtab |