mirror of
https://github.com/neovim/neovim.git
synced 2025-09-07 20:08:17 +00:00
API: fix cursor position when lines are added #9961
Restore code removed in #9674.
This commit is contained in:

committed by
Justin M. Keyes

parent
b3adfa03b7
commit
400ee59247
@@ -474,6 +474,7 @@ void nvim_buf_set_lines(uint64_t channel_id,
|
||||
false);
|
||||
|
||||
changed_lines((linenr_T)start, 0, (linenr_T)end, (long)extra, true);
|
||||
fix_cursor((linenr_T)start, (linenr_T)end, (linenr_T)extra);
|
||||
|
||||
end:
|
||||
for (size_t i = 0; i < new_len; i++) {
|
||||
@@ -1106,6 +1107,26 @@ free_exit:
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Check if deleting lines made the cursor position invalid.
|
||||
// Changed lines from `lo` to `hi`; added `extra` lines (negative if deleted).
|
||||
static void fix_cursor(linenr_T lo, linenr_T hi, linenr_T extra)
|
||||
{
|
||||
if (curwin->w_cursor.lnum >= lo) {
|
||||
// Adjust cursor position if it's in/after the changed lines.
|
||||
if (curwin->w_cursor.lnum >= hi) {
|
||||
curwin->w_cursor.lnum += extra;
|
||||
check_cursor_col();
|
||||
} else if (extra < 0) {
|
||||
curwin->w_cursor.lnum = lo;
|
||||
check_cursor();
|
||||
} else {
|
||||
check_cursor_col();
|
||||
}
|
||||
changed_cline_bef_curs();
|
||||
}
|
||||
invalidate_botline();
|
||||
}
|
||||
|
||||
// Normalizes 0-based indexes to buffer line numbers
|
||||
static int64_t normalize_index(buf_T *buf, int64_t index, bool *oob)
|
||||
{
|
||||
|
Reference in New Issue
Block a user