mirror of
https://github.com/vim/vim.git
synced 2025-09-28 04:24:06 -04:00
When undoing a reload, move the cursor to the first changed line.
This commit is contained in:
36
src/undo.c
36
src/undo.c
@@ -2922,6 +2922,42 @@ u_unchanged(buf)
|
||||
buf->b_did_warn = FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
* After reloading a buffer which was saved for 'undoreload': Find the first
|
||||
* line that was changed and set the cursor there.
|
||||
*/
|
||||
void
|
||||
u_find_first_changed()
|
||||
{
|
||||
u_header_T *uhp = curbuf->b_u_newhead;
|
||||
u_entry_T *uep;
|
||||
linenr_T lnum;
|
||||
|
||||
if (curbuf->b_u_curhead != NULL || uhp == NULL)
|
||||
return; /* undid something in an autocmd? */
|
||||
|
||||
/* Check that the last undo block was for the whole file. */
|
||||
uep = uhp->uh_entry;
|
||||
if (uep->ue_top != 0 || uep->ue_bot != 0)
|
||||
return;
|
||||
|
||||
for (lnum = 1; lnum < curbuf->b_ml.ml_line_count
|
||||
&& lnum <= uep->ue_size; ++lnum)
|
||||
if (STRCMP(ml_get_buf(curbuf, lnum, FALSE),
|
||||
uep->ue_array[lnum - 1]) != 0)
|
||||
{
|
||||
clearpos(&(uhp->uh_cursor));
|
||||
uhp->uh_cursor.lnum = lnum;
|
||||
return;
|
||||
}
|
||||
if (curbuf->b_ml.ml_line_count != uep->ue_size)
|
||||
{
|
||||
/* lines added or deleted at the end, put the cursor there */
|
||||
clearpos(&(uhp->uh_cursor));
|
||||
uhp->uh_cursor.lnum = lnum;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Increase the write count, store it in the last undo header, what would be
|
||||
* used for "u".
|
||||
|
Reference in New Issue
Block a user