Blob Blame History Raw
To: vim-dev@vim.org
Subject: Patch 7.1.243
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
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    ///