When undoing a reload, move the cursor to the first changed line.
diff --git a/src/undo.c b/src/undo.c
index eb887d8..1b74197 100644
--- a/src/undo.c
+++ b/src/undo.c
@@ -2923,6 +2923,42 @@
}
/*
+ * 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".
*/