vim/7.4.765
2015-07-03 18:00:04 +02:00

760 lines
12 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

To: vim_dev@googlegroups.com
Subject: Patch 7.4.765
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
------------
Patch 7.4.765 (after 7.4.754)
Problem: CTRL-A and CTRL-X in Visual mode do not always work well.
Solution: Improvements for increment and decrement. (Christian Brabandt)
Files: src/normal.c, src/ops.c, src/testdir/test_increment.in,
src/testdir/test_increment.ok
*** ../vim-7.4.764/src/normal.c 2015-06-25 13:57:20.029431114 +0200
--- src/normal.c 2015-07-03 11:43:43.250141166 +0200
***************
*** 4204,4210 ****
int visual = VIsual_active;
if (cap->oap->op_type == OP_NOP
&& do_addsub((int)cap->cmdchar, cap->count1, cap->arg) == OK)
! prep_redo_cmd(cap);
else
clearopbeep(cap->oap);
if (visual)
--- 4204,4227 ----
int visual = VIsual_active;
if (cap->oap->op_type == OP_NOP
&& do_addsub((int)cap->cmdchar, cap->count1, cap->arg) == OK)
! {
! if (visual)
! {
! ResetRedobuff();
! AppendCharToRedobuff(VIsual_mode);
! if (VIsual_mode == 'V')
! {
! AppendNumberToRedobuff(cap->oap->line_count);
! AppendCharToRedobuff('j');
! }
! AppendNumberToRedobuff(cap->count1);
! if (cap->nchar != NUL)
! AppendCharToRedobuff(cap->nchar);
! AppendCharToRedobuff(cap->cmdchar);
! }
! else
! prep_redo_cmd(cap);
! }
else
clearopbeep(cap->oap);
if (visual)
*** ../vim-7.4.764/src/ops.c 2015-06-25 13:57:20.033431073 +0200
--- src/ops.c 2015-07-03 12:31:42.315559376 +0200
***************
*** 5386,5392 ****
int hex; /* 'X' or 'x': hex; '0': octal */
static int hexupper = FALSE; /* 0xABC */
unsigned long n;
! long offset = 0; /* line offset for Ctrl_V mode */
long_u oldn;
char_u *ptr;
int c;
--- 5386,5392 ----
int hex; /* 'X' or 'x': hex; '0': octal */
static int hexupper = FALSE; /* 0xABC */
unsigned long n;
! unsigned long offset = 0; /* line offset for Ctrl_V mode */
long_u oldn;
char_u *ptr;
int c;
***************
*** 5398,5407 ****
--- 5398,5409 ----
int firstdigit;
int subtract;
int negative = FALSE;
+ int was_positive = TRUE;
int visual = VIsual_active;
int i;
int lnum = curwin->w_cursor.lnum;
int lnume = curwin->w_cursor.lnum;
+ int startcol;
dohex = (vim_strchr(curbuf->b_p_nf, 'x') != NULL); /* "heX" */
dooct = (vim_strchr(curbuf->b_p_nf, 'o') != NULL); /* "Octal" */
***************
*** 5431,5444 ****
curbuf->b_visual.vi_end = curwin->w_cursor;
curbuf->b_visual.vi_mode = VIsual_mode;
! col = VIsual.col;
lnum = VIsual.lnum;
lnume = curwin->w_cursor.lnum;
- if (ptr[col] == '-')
- {
- negative = TRUE;
- col++;
- }
}
else
{
--- 5433,5446 ----
curbuf->b_visual.vi_end = curwin->w_cursor;
curbuf->b_visual.vi_mode = VIsual_mode;
! if (VIsual_mode != 'v')
! startcol = VIsual.col < curwin->w_cursor.col ? VIsual.col
! : curwin->w_cursor.col;
! else
! startcol = VIsual.col;
! col = startcol;
lnum = VIsual.lnum;
lnume = curwin->w_cursor.lnum;
}
else
{
***************
*** 5481,5489 ****
{
curwin->w_cursor.lnum = i;
ptr = ml_get_curline();
- RLADDSUBFIX(ptr);
if ((int)STRLEN(ptr) <= col)
! col = 0;
/*
* If a number was found, and saving for undo works, replace the number.
*/
--- 5483,5498 ----
{
curwin->w_cursor.lnum = i;
ptr = ml_get_curline();
if ((int)STRLEN(ptr) <= col)
! /* try again on next line */
! continue;
! if (visual && ptr[col] == '-')
! {
! negative = TRUE;
! was_positive = FALSE;
! col++;
! }
! RLADDSUBFIX(ptr);
/*
* If a number was found, and saving for undo works, replace the number.
*/
***************
*** 5598,5603 ****
--- 5607,5620 ----
negative = FALSE;
}
+ if (visual && !was_positive && !negative)
+ {
+ /* need to remove the '-' */
+ col--;
+ length++;
+ }
+
+
/*
* Delete the old number.
*/
***************
*** 5634,5641 ****
if (buf1 == NULL)
return FAIL;
ptr = buf1;
! /* do not add leading '-' for visual mode */
! if (negative && !visual)
{
*ptr++ = '-';
}
--- 5651,5657 ----
if (buf1 == NULL)
return FAIL;
ptr = buf1;
! if (negative && (!visual || (visual && was_positive)))
{
*ptr++ = '-';
}
***************
*** 5654,5676 ****
* Put the number characters in buf2[].
*/
if (hex == 0)
! sprintf((char *)buf2, "%lu", n + offset);
else if (hex == '0')
! sprintf((char *)buf2, "%lo", n + offset);
else if (hex && hexupper)
! sprintf((char *)buf2, "%lX", n + offset);
else
! sprintf((char *)buf2, "%lx", n + offset);
length -= (int)STRLEN(buf2);
- if (g_cmd)
- {
- if (subtract)
- offset -= (unsigned long)Prenum1;
- else
- offset += (unsigned long)Prenum1;
- }
-
/*
* Adjust number of zeros to the new number of digits, so the
* total length of the number remains the same.
--- 5670,5684 ----
* Put the number characters in buf2[].
*/
if (hex == 0)
! sprintf((char *)buf2, "%lu", n);
else if (hex == '0')
! sprintf((char *)buf2, "%lo", n);
else if (hex && hexupper)
! sprintf((char *)buf2, "%lX", n);
else
! sprintf((char *)buf2, "%lx", n);
length -= (int)STRLEN(buf2);
/*
* Adjust number of zeros to the new number of digits, so the
* total length of the number remains the same.
***************
*** 5685,5697 ****
ins_str(buf1); /* insert the new number */
vim_free(buf1);
}
! --curwin->w_cursor.col;
curwin->w_set_curswant = TRUE;
#ifdef FEAT_RIGHTLEFT
ptr = ml_get_buf(curbuf, curwin->w_cursor.lnum, TRUE);
RLADDSUBFIX(ptr);
#endif
}
return OK;
}
--- 5693,5719 ----
ins_str(buf1); /* insert the new number */
vim_free(buf1);
}
!
! if (g_cmd)
! {
! offset = (unsigned long)Prenum1;
! g_cmd = 0;
! }
! /* reset */
! subtract = FALSE;
! negative = FALSE;
! if (visual && VIsual_mode != Ctrl_V)
! col = 0;
! else
! col = startcol;
! Prenum1 += offset;
curwin->w_set_curswant = TRUE;
#ifdef FEAT_RIGHTLEFT
ptr = ml_get_buf(curbuf, curwin->w_cursor.lnum, TRUE);
RLADDSUBFIX(ptr);
#endif
}
+ --curwin->w_cursor.col;
return OK;
}
*** ../vim-7.4.764/src/testdir/test_increment.in 2015-06-28 19:24:32.198911433 +0200
--- src/testdir/test_increment.in 2015-07-03 11:47:53.111483406 +0200
***************
*** 6,11 ****
--- 6,12 ----
1) Ctrl-A on visually selected number
Text:
foobar-10
+ Expected:
1) Ctrl-A on start of line:
foobar-9
2) Ctrl-A on visually selected "-10":
***************
*** 24,29 ****
--- 25,31 ----
30
40
+ Expected:
1) Ctrl-A on visually selected lines:
11
21
***************
*** 46,51 ****
--- 48,54 ----
40
+ Expected:
1) 2 g Ctrl-A on visually selected lines:
12
***************
*** 66,74 ****
--- 69,190 ----
4) Ctrl-A on non-number
Text:
foobar-10
+ Expected:
1) visually select foobar:
foobar-10
+ 5) g<Ctrl-A> on letter
+ Test:
+ a
+ a
+ a
+ a
+ Expected:
+ 1) g Ctrl-A on visually selected lines
+ b
+ c
+ d
+ e
+
+ 6) g<Ctrl-A> on letter
+ Test:
+ z
+ z
+ z
+ z
+ Expected:
+ 1) g Ctrl-X on visually selected lines
+ y
+ x
+ w
+ v
+
+ 7) <Ctrl-A> on letter
+ Test:
+ 2
+ 1
+ 0
+ -1
+ -2
+
+ Expected:
+ 1) Ctrl-A on visually selected lines
+ 3
+ 2
+ 1
+ 0
+ -1
+
+ 2) Ctrl-X on visually selected lines
+ 1
+ 0
+ -1
+ -2
+ -3
+ 8) Block increment on 0x9
+ Text:
+ 0x9
+ 0x9
+ Expected:
+ 1) Ctrl-A on visually block selected region (cursor at beginning):
+ 0xa
+ 0xa
+ 2) Ctrl-A on visually block selected region (cursor at end)
+ 0xa
+ 0xa
+
+ 9) Increment and redo
+ Text:
+ 2
+ 2
+
+ 3
+ 3
+
+ Expected:
+ 1) 2 Ctrl-A on first 2 visually selected lines
+ 4
+ 4
+ 2) redo (.) on 3
+ 5
+ 5
+ 10) sequentially decrement 1
+ Text:
+ 1
+ 1
+ 1
+ 1
+ Expected:
+ 1) g Ctrl-X on visually selected lines
+ 0
+ -1
+ -2
+ -3
+
+ 11) visually block selected indented lines
+ Text:
+ 1
+ 1
+ 1
+ 1
+ Expexted:
+ 1) g Ctrl-A on block selected indented lines
+ 2
+ 1
+ 3
+ 4
+
+ 12) visually selected several columns
+ Text:
+ 0 0
+ 0 0
+ 0 0
+ Expected:
+ 1) 'v' select last zero and first zeroes
+ 0 1
+ 1 0
+ 1 0
+
STARTTEST
:so small.vim
:"
***************
*** 77,92 ****
:"
:" Test 1
:/^S1=/+,/^E1=/-y a
! :/^E1/+put a
! :/^E1/+2put a
! f-v$:/^E1/+3put a
! f1v$:/^E1/+4put a
! f-v$:/^E1/+5put a
f1v$
:" Test 22
:/^S2=/+,/^E2=/-y a
! :/^E2/+put a
V3k$:.+put a
V3k$
--- 193,208 ----
:"
:" Test 1
:/^S1=/+,/^E1=/-y a
! :/^E1=/+put a
! :/^E1=/+2put a
! f-v$:/^E1=/+3put a
! f1v$:/^E1=/+4put a
! f-v$:/^E1=/+5put a
f1v$
:" Test 22
:/^S2=/+,/^E2=/-y a
! :/^E2=/+put a
V3k$:.+put a
V3k$
***************
*** 101,106 ****
--- 217,265 ----
:/^E4=/+put a
vf-
+ :" Test 5
+ :set nrformats+=alpha
+ :/^S5=/+,/^E5=/-y a
+ :/^E5=/+put a
+ v3kg
+
+ :" Test 6
+ :/^S6=/+,/^E6=/-y a
+ :/^E6=/+put a
+ v3kg
+
+ :" Test 7
+ :/^S7=/+,/^E7=/-y a
+ :/^E7=/+put a
+ V4k:.+put a
+ V4k
+
+ :" Test 8
+ :/^S8=/+,/^E8=/-y a
+ :/^E8=/+put a
+ kj$:.+put a
+ k$+
+
+ :" Test 9
+ :/^S9=/+,/^E9=/-y a
+ :/^E9=/+put a
+ 5kVj22j.
+
+ :" Test 10
+ :/^S10=/+,/^E10=/-y a
+ :/^E10=/+put a
+ V3kg
+
+ : Test 11
+ :/^S11=/+,/^E11=/-y a
+ :/^E11=/+put a
+ 3kf13jg
+
+ :" Test 12
+ :/^S12=/+,/^E12=/-y a
+ :/^E12=/+put a
+ 2k$v++
+
:" Save the report
:/^# Test 1/,$w! test.out
:qa!
***************
*** 142,146 ****
--- 301,393 ----
E4=====
+
+ # Test 5
+ S5====
+ a
+ a
+ a
+ a
+ E5====
+
+
+ # Test 6
+ S6====
+ z
+ z
+ z
+ z
+ E6====
+
+
+
+ # Test 7
+ S7====
+ 2
+ 1
+ 0
+ -1
+ -2
+ E7====
+
+
+
+ # Test 8
+ S8====
+ 0x9
+ 0x9
+ E8====
+
+
+
+
+ # Test 9
+ S9====
+ 2
+ 2
+
+ 3
+ 3
+
+ E9====
+
+
+
+
+ # Test 10
+ S10====
+ 1
+ 1
+ 1
+ 1
+ E10====
+
+
+
+
+ # Test 11
+ S11====
+ 1
+ 1
+ 1
+ 1
+ E11====
+
+
+
+ # Test 12
+ S12====
+ 0 0
+ 0 0
+ 0 0
+ E12====
+
+
+
+
+
+
+
+
ENDTEST
*** ../vim-7.4.764/src/testdir/test_increment.ok 2015-06-25 13:57:20.033431073 +0200
--- src/testdir/test_increment.ok 2015-07-03 11:43:43.254141124 +0200
***************
*** 62,66 ****
--- 62,193 ----
foobar-10
+
+ # Test 5
+ S5====
+ a
+ a
+ a
+ a
+ E5====
+
+ b
+ c
+ d
+ e
+
+ # Test 6
+ S6====
+ z
+ z
+ z
+ z
+ E6====
+
+ y
+ x
+ w
+ v
+
+
+ # Test 7
+ S7====
+ 2
+ 1
+ 0
+ -1
+ -2
+ E7====
+
+ 3
+ 2
+ 1
+ 0
+ -1
+
+ 1
+ 0
+ -1
+ -2
+ -3
+
+ # Test 8
+ S8====
+ 0x9
+ 0x9
+ E8====
+
+ 0xa
+ 0xa
+
+ 0xa
+ 0xa
+
+
+ # Test 9
+ S9====
+ 2
+ 2
+
+ 3
+ 3
+
+ E9====
+
+ 4
+ 4
+
+ 5
+ 5
+
+
+
+
+ # Test 10
+ S10====
+ 1
+ 1
+ 1
+ 1
+ E10====
+
+ 0
+ -1
+ -2
+ -3
+
+
+
+ # Test 11
+ S11====
+ 1
+ 1
+ 1
+ 1
+ E11====
+
+ 2
+ 1
+ 3
+ 4
+
+
+ # Test 12
+ S12====
+ 0 0
+ 0 0
+ 0 0
+ E12====
+
+ 0 1
+ 1 0
+ 1 0
+
+
+
+
+
+
+
ENDTEST
*** ../vim-7.4.764/src/version.c 2015-06-28 19:24:32.198911433 +0200
--- src/version.c 2015-07-03 11:45:07.697242802 +0200
***************
*** 743,744 ****
--- 743,746 ----
{ /* Add new patch number below this line */
+ /**/
+ 765,
/**/
--
hundred-and-one symptoms of being an internet addict:
171. You invent another person and chat with yourself in empty chat rooms.
/// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///