diff options
author | Bram Moolenaar <Bram@vim.org> | 2016-01-10 20:21:57 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2016-01-10 20:21:57 +0100 |
commit | a52dfaed104183c1fa2a3b6e4430b23d86bcbece (patch) | |
tree | 46f8aafba6ce55faab3defcfeb84bb8d0591cc57 | |
parent | e1edc1caba05c553fa60b1cf45a7670b1cfd63fe (diff) | |
download | vim-git-a52dfaed104183c1fa2a3b6e4430b23d86bcbece.tar.gz |
patch 7.4.1085v7.4.1085
Problem: The CTRL-A and CTRL-X commands do not update the '[ and '] marks.
Solution: (Yukihiro Nakadaira)
-rw-r--r-- | src/ops.c | 16 | ||||
-rw-r--r-- | src/testdir/test_marks.in | 18 | ||||
-rw-r--r-- | src/testdir/test_marks.ok | 10 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 45 insertions, 1 deletions
@@ -5382,6 +5382,8 @@ do_addsub(command, Prenum1, g_cmd) int pos = 0; int bit = 0; int bits = sizeof(unsigned long) * 8; + pos_T startpos; + pos_T endpos; dohex = (vim_strchr(curbuf->b_p_nf, 'x') != NULL); /* "heX" */ dooct = (vim_strchr(curbuf->b_p_nf, 'o') != NULL); /* "Octal" */ @@ -5582,9 +5584,12 @@ do_addsub(command, Prenum1, g_cmd) #endif } curwin->w_cursor.col = col; + if (!did_change) + startpos = curwin->w_cursor; did_change = TRUE; (void)del_char(FALSE); ins_char(firstdigit); + endpos = curwin->w_cursor; curwin->w_cursor.col = col; } else @@ -5677,6 +5682,8 @@ do_addsub(command, Prenum1, g_cmd) * Delete the old number. */ curwin->w_cursor.col = col; + if (!did_change) + startpos = curwin->w_cursor; did_change = TRUE; todel = length; c = gchar_cursor(); @@ -5763,6 +5770,7 @@ do_addsub(command, Prenum1, g_cmd) STRCAT(buf1, buf2); ins_str(buf1); /* insert the new number */ vim_free(buf1); + endpos = curwin->w_cursor; if (lnum < lnume) curwin->w_cursor.col = t.col; else if (did_change && curwin->w_cursor.col) @@ -5788,6 +5796,14 @@ do_addsub(command, Prenum1, g_cmd) if (visual) /* cursor at the top of the selection */ curwin->w_cursor = VIsual; + if (did_change) + { + /* set the '[ and '] marks */ + curbuf->b_op_start = startpos; + curbuf->b_op_end = endpos; + if (curbuf->b_op_end.col > 0) + --curbuf->b_op_end.col; + } return OK; } diff --git a/src/testdir/test_marks.in b/src/testdir/test_marks.in index 341f3ac30..23c2fb65f 100644 --- a/src/testdir/test_marks.in +++ b/src/testdir/test_marks.in @@ -8,11 +8,27 @@ STARTTEST madduu :let a = string(getpos("'a")) :$put ='Mark after delete-undo-redo-undo: '.a -:/^\t/,$wq! test.out +:'' ENDTEST textline A textline B textline C +STARTTEST +:" test that CTRL-A and CTRL-X updates last changed mark '[, ']. +:/^123/ +:execute "normal! \<C-A>`[v`]rAjwvjw\<C-X>`[v`]rX" +ENDTEST + +CTRL-A CTRL-X: +123 123 123 +123 123 123 +123 123 123 + +STARTTEST +:g/^STARTTEST/.,/^ENDTEST/d +:wq! test.out +ENDTEST + Results: diff --git a/src/testdir/test_marks.ok b/src/testdir/test_marks.ok index dd1a3e43b..e6c02ee7b 100644 --- a/src/testdir/test_marks.ok +++ b/src/testdir/test_marks.ok @@ -1,6 +1,16 @@ +Tests for marks. + + textline A textline B textline C + +CTRL-A CTRL-X: +AAA 123 123 +123 XXXXXXX +XXX 123 123 + + Results: Mark after delete-undo-redo-undo: [0, 15, 2, 0] diff --git a/src/version.c b/src/version.c index 33eef0107..07d2c2631 100644 --- a/src/version.c +++ b/src/version.c @@ -742,6 +742,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1085, +/**/ 1084, /**/ 1083, |