0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 7.4.1085

Problem:    The CTRL-A and CTRL-X commands do not update the '[ and '] marks.
Solution:   (Yukihiro Nakadaira)
This commit is contained in:
Bram Moolenaar 2016-01-10 20:21:57 +01:00
parent e1edc1caba
commit a52dfaed10
4 changed files with 45 additions and 1 deletions

View File

@ -5382,6 +5382,8 @@ do_addsub(command, Prenum1, g_cmd)
int pos = 0; int pos = 0;
int bit = 0; int bit = 0;
int bits = sizeof(unsigned long) * 8; int bits = sizeof(unsigned long) * 8;
pos_T startpos;
pos_T endpos;
dohex = (vim_strchr(curbuf->b_p_nf, 'x') != NULL); /* "heX" */ dohex = (vim_strchr(curbuf->b_p_nf, 'x') != NULL); /* "heX" */
dooct = (vim_strchr(curbuf->b_p_nf, 'o') != NULL); /* "Octal" */ dooct = (vim_strchr(curbuf->b_p_nf, 'o') != NULL); /* "Octal" */
@ -5582,9 +5584,12 @@ do_addsub(command, Prenum1, g_cmd)
#endif #endif
} }
curwin->w_cursor.col = col; curwin->w_cursor.col = col;
if (!did_change)
startpos = curwin->w_cursor;
did_change = TRUE; did_change = TRUE;
(void)del_char(FALSE); (void)del_char(FALSE);
ins_char(firstdigit); ins_char(firstdigit);
endpos = curwin->w_cursor;
curwin->w_cursor.col = col; curwin->w_cursor.col = col;
} }
else else
@ -5677,6 +5682,8 @@ do_addsub(command, Prenum1, g_cmd)
* Delete the old number. * Delete the old number.
*/ */
curwin->w_cursor.col = col; curwin->w_cursor.col = col;
if (!did_change)
startpos = curwin->w_cursor;
did_change = TRUE; did_change = TRUE;
todel = length; todel = length;
c = gchar_cursor(); c = gchar_cursor();
@ -5763,6 +5770,7 @@ do_addsub(command, Prenum1, g_cmd)
STRCAT(buf1, buf2); STRCAT(buf1, buf2);
ins_str(buf1); /* insert the new number */ ins_str(buf1); /* insert the new number */
vim_free(buf1); vim_free(buf1);
endpos = curwin->w_cursor;
if (lnum < lnume) if (lnum < lnume)
curwin->w_cursor.col = t.col; curwin->w_cursor.col = t.col;
else if (did_change && curwin->w_cursor.col) else if (did_change && curwin->w_cursor.col)
@ -5788,6 +5796,14 @@ do_addsub(command, Prenum1, g_cmd)
if (visual) if (visual)
/* cursor at the top of the selection */ /* cursor at the top of the selection */
curwin->w_cursor = VIsual; 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; return OK;
} }

View File

@ -8,11 +8,27 @@ STARTTEST
madduu madduu
:let a = string(getpos("'a")) :let a = string(getpos("'a"))
:$put ='Mark after delete-undo-redo-undo: '.a :$put ='Mark after delete-undo-redo-undo: '.a
:/^\t/,$wq! test.out :''
ENDTEST ENDTEST
textline A textline A
textline B textline B
textline C 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: Results:

View File

@ -1,6 +1,16 @@
Tests for marks.
textline A textline A
textline B textline B
textline C textline C
CTRL-A CTRL-X:
AAA 123 123
123 XXXXXXX
XXX 123 123
Results: Results:
Mark after delete-undo-redo-undo: [0, 15, 2, 0] Mark after delete-undo-redo-undo: [0, 15, 2, 0]

View File

@ -741,6 +741,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1085,
/**/ /**/
1084, 1084,
/**/ /**/