# HG changeset patch # User vimboss # Date 1202305483 0 # Node ID e212d1a40ca9638a4b306013d54417dfcbe9d8ab # Parent 03ec0f2b9a403b1cbc494eac6c038076ece0b37c updated for version 7.1-243 diff --git a/src/ops.c b/src/ops.c --- a/src/ops.c +++ b/src/ops.c @@ -2197,7 +2197,7 @@ op_tilde(oap) #ifdef FEAT_VISUAL struct block_def bd; #endif - int did_change; + int did_change = FALSE; if (u_save((linenr_T)(oap->start.lnum - 1), (linenr_T)(oap->end.lnum + 1)) == FAIL) @@ -2242,7 +2242,18 @@ op_tilde(oap) else if (!oap->inclusive) dec(&(oap->end)); - did_change = swapchars(oap->op_type, &pos, oap->end.col - pos.col + 1); + 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,17 +2325,11 @@ swapchars(op_type, pos, length) 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; } diff --git a/src/testdir/test39.in b/src/testdir/test39.in --- a/src/testdir/test39.in +++ b/src/testdir/test39.in @@ -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,7 +16,22 @@ GklkkkIxyz Gllllkkklllrq :" Test block-change G$khhhhhkkcmno -:$-4,$wq! test.out +:$-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 diff --git a/src/testdir/test39.ok b/src/testdir/test39.ok --- a/src/testdir/test39.ok +++ b/src/testdir/test39.ok @@ -3,3 +3,11 @@ axyzqqqq mno ghijklm 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 diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -667,6 +667,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 243, +/**/ 242, /**/ 241,