# HG changeset patch # User Bram Moolenaar # Date 1286637811 -7200 # Node ID c3b5d3fe94046702944964c32eea7522ecf92c4c # Parent fae782ef63dd77e2130473e53a787e91297b338f updated for version 7.3.020 Problem: Cursor position wrong when joining multiple lines and 'formatoptions' contains "a". (Moshe Kamensky) Solution: Adjust cursor position for skipped indent. (Carlo Teubner) diff --git a/src/ops.c b/src/ops.c --- a/src/ops.c +++ b/src/ops.c @@ -4153,9 +4153,10 @@ do_join(count, insert_space, save_undo) int save_undo; { char_u *curr = NULL; + char_u *curr_start = NULL; char_u *cend; char_u *newp; - char_u *spaces; /* number of spaces inserte before a line */ + char_u *spaces; /* number of spaces inserted before a line */ int endcurr1 = NUL; int endcurr2 = NUL; int currsize = 0; /* size of the current line */ @@ -4181,7 +4182,7 @@ do_join(count, insert_space, save_undo) */ for (t = 0; t < count; ++t) { - curr = ml_get((linenr_T)(curwin->w_cursor.lnum + t)); + curr = curr_start = ml_get((linenr_T)(curwin->w_cursor.lnum + t)); if (insert_space && t > 0) { curr = skipwhite(curr); @@ -4265,10 +4266,10 @@ do_join(count, insert_space, save_undo) copy_spaces(cend, (size_t)(spaces[t])); } mark_col_adjust(curwin->w_cursor.lnum + t, (colnr_T)0, (linenr_T)-t, - (long)(cend - newp + spaces[t])); + (long)(cend - newp + spaces[t] - (curr - curr_start))); if (t == 0) break; - curr = ml_get((linenr_T)(curwin->w_cursor.lnum + t - 1)); + curr = curr_start = ml_get((linenr_T)(curwin->w_cursor.lnum + t - 1)); if (insert_space && t > 1) curr = skipwhite(curr); currsize = (int)STRLEN(curr); diff --git a/src/testdir/test68.in b/src/testdir/test68.in --- a/src/testdir/test68.in +++ b/src/testdir/test68.in @@ -51,6 +51,17 @@ a b } STARTTEST +/^{/+2 +:set tw& fo=a +I^^ +ENDTEST + +{ + 1aa + 2bb +} + +STARTTEST :g/^STARTTEST/.,/^ENDTEST/d :1;/^Results/,$wq! test.out ENDTEST diff --git a/src/testdir/test68.ok b/src/testdir/test68.ok --- a/src/testdir/test68.ok +++ b/src/testdir/test68.ok @@ -33,3 +33,6 @@ a b #a b } + +{ 1aa ^^2bb } + diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -715,6 +715,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 20, +/**/ 19, /**/ 18,