From 887d8018bb27e17efc2b85f48dde1c6ae21324d6 Mon Sep 17 00:00:00 2001 From: Karsten Hopp Date: Jul 03 2015 16:00:04 +0000 Subject: - patchlevel 765 --- diff --git a/7.4.765 b/7.4.765 new file mode 100644 index 0000000..768422a --- /dev/null +++ b/7.4.765 @@ -0,0 +1,759 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.765 +Fcc: outbox +From: Bram Moolenaar +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 on letter ++ Test: ++ a ++ a ++ a ++ a ++ Expected: ++ 1) g Ctrl-A on visually selected lines ++ b ++ c ++ d ++ e ++ ++ 6) g on letter ++ Test: ++ z ++ z ++ z ++ z ++ Expected: ++ 1) g Ctrl-X on visually selected lines ++ y ++ x ++ w ++ v ++ ++ 7) 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 ///