summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2018-06-04 20:34:23 +0200
committerBram Moolenaar <Bram@vim.org>2018-06-04 20:34:23 +0200
commitadb8fbec4f4059d214fe6acf2485ffd35e803450 (patch)
tree6e91c9fd410bb086c611cd0f48cc18d611d1cb91 /src
parentacb9effecc9f54b93398a44cc0ec40e77978e094 (diff)
patch 8.1.0034: cursor not restored with ":edit #"v8.1.0034
Problem: Cursor not restored with ":edit #". Solution: Don't assume autocommands moved the cursor when it was moved to the first non-blank.
Diffstat (limited to 'src')
-rw-r--r--src/ex_cmds.c13
-rw-r--r--src/testdir/test_edit.vim14
-rw-r--r--src/version.c2
3 files changed, 26 insertions, 3 deletions
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index 111fe01d22..60d72023c9 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -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;
diff --git a/src/testdir/test_edit.vim b/src/testdir/test_edit.vim
index 7278bcd85d..3af8c4c880 100644
--- a/src/testdir/test_edit.vim
+++ b/src/testdir/test_edit.vim
@@ -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
diff --git a/src/version.c b/src/version.c
index 52269e7e84..a3f5c052fe 100644
--- a/src/version.c
+++ b/src/version.c
@@ -762,6 +762,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 34,
+/**/
33,
/**/
32,