To: vim-dev@vim.org Subject: Patch 7.1.243 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit ------------ Patch 7.1.243 (after 7.1.240) Problem: "U" doesn't work on all text in Visual mode. (Adri Verhoef) Solution: Loop over all the lines to be changed. Add tests for this. Files: src/ops.c, src/testdir/test39.in, src/testdir/test39.ok *** ../vim-7.1.242/src/ops.c Tue Jan 22 16:01:25 2008 --- src/ops.c Mon Feb 4 22:23:22 2008 *************** *** 2197,2203 **** #ifdef FEAT_VISUAL struct block_def bd; #endif ! int did_change; if (u_save((linenr_T)(oap->start.lnum - 1), (linenr_T)(oap->end.lnum + 1)) == FAIL) --- 2197,2203 ---- #ifdef FEAT_VISUAL struct block_def bd; #endif ! int did_change = FALSE; if (u_save((linenr_T)(oap->start.lnum - 1), (linenr_T)(oap->end.lnum + 1)) == FAIL) *************** *** 2242,2248 **** else if (!oap->inclusive) dec(&(oap->end)); ! did_change = swapchars(oap->op_type, &pos, oap->end.col - pos.col + 1); if (did_change) { changed_lines(oap->start.lnum, oap->start.col, oap->end.lnum + 1, --- 2242,2259 ---- else if (!oap->inclusive) dec(&(oap->end)); ! if (pos.lnum == oap->end.lnum) ! did_change = swapchars(oap->op_type, &pos, ! oap->end.col - pos.col + 1); ! else ! for (;;) ! { ! did_change |= swapchars(oap->op_type, &pos, ! pos.lnum == oap->end.lnum ? oap->end.col + 1: ! (int)STRLEN(ml_get_pos(&pos))); ! if (ltoreq(oap->end, pos) || inc(&pos) == -1) ! break; ! } if (did_change) { changed_lines(oap->start.lnum, oap->start.col, oap->end.lnum + 1, *************** *** 2314,2330 **** for (todo = length; todo > 0; --todo) { # ifdef FEAT_MBYTE - int pos_col = pos->col; - if (has_mbyte) /* we're counting bytes, not characters */ todo -= (*mb_ptr2len)(ml_get_pos(pos)) - 1; # endif did_change |= swapchar(op_type, pos); - # ifdef FEAT_MBYTE - /* Changing German sharp s to SS increases the column. */ - todo += pos->col - pos_col; - # endif if (inc(pos) == -1) /* at end of file */ break; } --- 2325,2335 ---- *** ../vim-7.1.242/src/testdir/test39.in Sun Jun 13 18:21:09 2004 --- src/testdir/test39.in Wed Feb 6 13:57:37 2008 *************** *** 1,8 **** --- 1,10 ---- Test Visual block mode commands + And test "U" in Visual mode, also on German sharp S. STARTTEST :so small.vim + :so mbyte.vim /^abcde :" Test shift-right of a block jlllljj>wlljlll> *************** *** 14,20 **** Gllllkkklllrq :" Test block-change G$khhhhhkkcmno ! :$-4,$wq! test.out ENDTEST abcdefghijklm --- 16,37 ---- Gllllkkklllrq :" Test block-change G$khhhhhkkcmno ! :$-4,$w! test.out ! :" gUe must uppercase a whole word, also when ß changes to SS ! Gothe youtußeuu endYpk0wgUe ! :" gUfx must uppercase until x, inclusive. ! O- youßtußexu -0fogUfx ! :" VU must uppercase a whole line ! YpkVU ! :" same, when it's the last line in the buffer ! YPGi111VUddP ! :" Uppercase two lines ! Oblah di ! doh dutVkUj ! :" Uppercase part of two lines ! ddppi333k0i222fyllvjfuUk ! :/^the/,$w >> test.out ! :qa! ENDTEST abcdefghijklm *** ../vim-7.1.242/src/testdir/test39.ok Sun Jun 13 18:59:28 2004 --- src/testdir/test39.ok Tue Feb 5 22:25:38 2008 *************** *** 3,5 **** --- 3,13 ---- axyzqqqqef mno ghijklm axyzqqqqefgmnoklm abcdqqqqijklm + the YOUTUSSEUU end + - yOUSSTUSSEXu - + THE YOUTUSSEUU END + 111THE YOUTUSSEUU END + BLAH DI + DOH DUT + 222the yoUTUSSEUU END + 333THE YOUTUßeuu end *** ../vim-7.1.242/src/version.c Sat Jan 26 21:15:00 2008 --- src/version.c Wed Feb 6 14:41:00 2008 *************** *** 668,669 **** --- 668,671 ---- { /* Add new patch number below this line */ + /**/ + 243, /**/ -- It's totally unfair to suggest - as many have - that engineers are socially inept. Engineers simply have different objectives when it comes to social interaction. (Scott Adams - The Dilbert principle) /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ download, build and distribute -- http://www.A-A-P.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///