patch 8.1.0034: cursor not restored with ":edit #" v8.1.0034
authorBram Moolenaar <Bram@vim.org>
Mon, 4 Jun 2018 18:34:23 +0000 (20:34 +0200)
committerBram Moolenaar <Bram@vim.org>
Mon, 4 Jun 2018 18:34:23 +0000 (20:34 +0200)
Problem:    Cursor not restored with ":edit #".
Solution:   Don't assume autocommands moved the cursor when it was moved to
            the first non-blank.

src/ex_cmds.c
src/testdir/test_edit.vim
src/version.c

index 111fe01d22a32be2ef77d5f0acb7b1872af888b0..60d72023c9a740ff224f7715b698e3934b9b2851 100644 (file)
@@ -4193,11 +4193,18 @@ do_ecmd(
        check_arg_idx(curwin);
 
        /* If autocommands change the cursor position or topline, we should
-        * keep it.  Also when it moves within a line. */
+        * keep it.  Also when it moves within a line. But not when it moves
+        * to the first non-blank. */
        if (!EQUAL_POS(curwin->w_cursor, orig_pos))
        {
-           newlnum = curwin->w_cursor.lnum;
-           newcol = curwin->w_cursor.col;
+           char_u *text = ml_get_curline();
+
+           if (curwin->w_cursor.lnum != orig_pos.lnum
+                   || curwin->w_cursor.col != (int)(skipwhite(text) - text))
+           {
+               newlnum = curwin->w_cursor.lnum;
+               newcol = curwin->w_cursor.col;
+           }
        }
        if (curwin->w_topline == topline)
            topline = 0;
index 7278bcd85d14c9b7e070159c4f5451361e85ce81..3af8c4c8805e455692eaef2d98ced9e4d84007d3 100644 (file)
@@ -1387,3 +1387,17 @@ func Test_edit_quit()
   only
 endfunc
 
+func Test_edit_alt()
+  " Keeping the cursor line didn't happen when the first line has indent.
+  new
+  call setline(1, ['  one', 'two', 'three'])
+  w XAltFile
+  $
+  call assert_equal(3, line('.'))
+  e Xother
+  e #
+  call assert_equal(3, line('.'))
+
+  bwipe XAltFile
+  call delete('XAltFile')
+endfunc
index 52269e7e84a39424618e8396291f0372dddef356..a3f5c052feaa2b49409e1aff3f7603fd0d4f07d4 100644 (file)
@@ -761,6 +761,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    34,
 /**/
     33,
 /**/