Hi!

Thank you for this patch! Unfortunately, there are still some bugs left:

(1) Just write an ß, go to Normal mode and do U. The ß gets killed. Do U 
again and the ß appears again. You can do this repeatedly.

(2) Just write a line containing an ß. Visual select the whole line and 
do U. The line is uppercase afterwards. Now do U repeatedly. The whole 
line disappears, appears, disappears ...

(3) Write a line without any ß. Visual select the whole line and do U. 
The line is upercase afterwards and the Visual selection is gone (which 
is ok). But if you do U repeatedly now, you will see the whole line 
alternate between lowercase and uppercase.

BTW, I have started Vim by doing "gvim -u NONE".

Best regards,
Georg Dahn





Bram Moolenaar wrote:
> 
> 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
>   jllll jj>wll jlll>
> ***************
> *** 14,20 ****
>   Gllll kkklllrq
>   :" Test block-change
>   G$khhh hhkkcmno 
> ! :$-4,$wq! test.out
>   ENDTEST
>   
>   abcdefghijklm
> --- 16,37 ----
>   Gllll kkklllrq
>   :" Test block-change
>   G$khhh hhkkcmno 
> ! :$-4,$w! test.out
> ! :" gUe must uppercase a whole word, also when ß changes to SS
> ! Gothe youtußeuu end Ypk0wgUe
> ! :" 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
> ! YPGi111 VUddP
> ! :" Uppercase two lines
> ! Oblah di
> ! doh dut VkUj
> ! :" Uppercase part of two lines
> ! ddppi333 k0i222 fyllvjfuUk
> ! :/^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,
>   /**/
> 

--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---

Raspunde prin e-mail lui