Patch 7.4.052
Problem:    With 'fo' set to "a2" inserting a space in the first column may
            cause the cursor to jump to the previous line.
Solution:   Handle the case when there is no comment leader properly. (Tor
            Perkins)  Also fix that cursor is in the wrong place when spaces
            get replaced with a Tab.
Files:      src/misc1.c, src/ops.c, src/testdir/test68.in,
            src/testdir/test68.ok


*** ../vim-7.4.051/src/misc1.c  2013-09-05 21:41:35.000000000 +0200
--- src/misc1.c 2013-10-06 17:46:18.000000000 +0200
***************
*** 303,312 ****
        ml_replace(curwin->w_cursor.lnum, newline, FALSE);
        if (flags & SIN_CHANGED)
            changed_bytes(curwin->w_cursor.lnum, 0);
!       /* Correct saved cursor position if it's after the indent. */
!       if (saved_cursor.lnum == curwin->w_cursor.lnum
!                               && saved_cursor.col >= (colnr_T)(p - oldline))
!           saved_cursor.col += ind_len - (colnr_T)(p - oldline);
        retval = TRUE;
      }
      else
--- 303,320 ----
        ml_replace(curwin->w_cursor.lnum, newline, FALSE);
        if (flags & SIN_CHANGED)
            changed_bytes(curwin->w_cursor.lnum, 0);
!       /* Correct saved cursor position if it is in this line. */
!       if (saved_cursor.lnum == curwin->w_cursor.lnum)
!       {
!           if (saved_cursor.col >= (colnr_T)(p - oldline))
!               /* cursor was after the indent, adjust for the number of
!                * bytes added/removed */
!               saved_cursor.col += ind_len - (colnr_T)(p - oldline);
!           else if (saved_cursor.col >= (colnr_T)(s - newline))
!               /* cursor was in the indent, and is now after it, put it back
!                * at the start of the indent (replacing spaces with TAB) */
!               saved_cursor.col = (colnr_T)(s - newline);
!       }
        retval = TRUE;
      }
      else
***************
*** 1581,1589 ****
  
  #if defined(FEAT_COMMENTS) || defined(PROTO)
  /*
!  * get_leader_len() returns the length of the prefix of the given string
!  * which introduces a comment.        If this string is not a comment then 0 
is
!  * returned.
   * When "flags" is not NULL, it is set to point to the flags of the recognized
   * comment leader.
   * "backward" must be true for the "O" command.
--- 1589,1597 ----
  
  #if defined(FEAT_COMMENTS) || defined(PROTO)
  /*
!  * get_leader_len() returns the length in bytes of the prefix of the given
!  * string which introduces a comment.  If this string is not a comment then
!  * 0 is returned.
   * When "flags" is not NULL, it is set to point to the flags of the recognized
   * comment leader.
   * "backward" must be true for the "O" command.
*** ../vim-7.4.051/src/ops.c    2013-09-25 23:24:54.000000000 +0200
--- src/ops.c   2013-10-06 17:11:51.000000000 +0200
***************
*** 4989,4995 ****
  
            /*
             * When still in same paragraph, join the lines together.  But
!            * first delete the comment leader from the second line.
             */
            if (!is_end_par)
            {
--- 4989,4995 ----
  
            /*
             * When still in same paragraph, join the lines together.  But
!            * first delete the leader from the second line.
             */
            if (!is_end_par)
            {
***************
*** 4999,5009 ****
                if (line_count < 0 && u_save_cursor() == FAIL)
                    break;
  #ifdef FEAT_COMMENTS
-               (void)del_bytes((long)next_leader_len, FALSE, FALSE);
                if (next_leader_len > 0)
                    mark_col_adjust(curwin->w_cursor.lnum, (colnr_T)0, 0L,
                                                      (long)-next_leader_len);
  #endif
                curwin->w_cursor.lnum--;
                if (do_join(2, TRUE, FALSE, FALSE) == FAIL)
                {
--- 4999,5023 ----
                if (line_count < 0 && u_save_cursor() == FAIL)
                    break;
  #ifdef FEAT_COMMENTS
                if (next_leader_len > 0)
+               {
+                   (void)del_bytes((long)next_leader_len, FALSE, FALSE);
                    mark_col_adjust(curwin->w_cursor.lnum, (colnr_T)0, 0L,
                                                      (long)-next_leader_len);
+               } else
  #endif
+                   if (second_indent > 0)  /* the "leader" for FO_Q_SECOND */
+               {
+                   char_u *p = ml_get_curline();
+                   int indent = skipwhite(p) - p;
+ 
+                   if (indent > 0)
+                   {
+                       (void)del_bytes(indent, FALSE, FALSE);
+                       mark_col_adjust(curwin->w_cursor.lnum,
+                                              (colnr_T)0, 0L, (long)-indent);
+                     }
+               }
                curwin->w_cursor.lnum--;
                if (do_join(2, TRUE, FALSE, FALSE) == FAIL)
                {
*** ../vim-7.4.051/src/testdir/test68.in        2012-07-25 15:57:06.000000000 
+0200
--- src/testdir/test68.in       2013-10-06 16:20:33.000000000 +0200
***************
*** 62,67 ****
--- 62,81 ----
  }
  
  STARTTEST
+ /^{/+3
+ :set tw=5 fo=t2a si
+ i   A_ 
+ ENDTEST
+ 
+ {
+ 
+   x a
+   b
+  c
+ 
+ }
+ 
+ STARTTEST
  /^{/+1
  :set tw=5 fo=qn comments=:#
  gwap
*** ../vim-7.4.051/src/testdir/test68.ok        2012-07-25 16:03:05.000000000 
+0200
--- src/testdir/test68.ok       2013-10-06 16:20:33.000000000 +0200
***************
*** 43,48 ****
--- 43,57 ----
  
  
  {
+ 
+   x a
+     b_
+     c
+ 
+ }
+ 
+ 
+ {
  # 1 a
  #   b
  }
*** ../vim-7.4.051/src/version.c        2013-10-06 15:46:06.000000000 +0200
--- src/version.c       2013-10-06 17:25:27.000000000 +0200
***************
*** 740,741 ****
--- 740,743 ----
  {   /* Add new patch number below this line */
+ /**/
+     52,
  /**/

-- 
ARTHUR:    Will you ask your master if he wants to join my court at Camelot?!
GUARD #1:  But then of course African swallows are not migratory.
GUARD #2:  Oh, yeah...
GUARD #1:  So they couldn't bring a coconut back anyway...
                                  The Quest for the Holy Grail (Monty Python)

 /// Bram Moolenaar -- [email protected] -- 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    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Raspunde prin e-mail lui