Patch 7.3.251
Problem:    "gH<Del>" deletes the current line, except when it's the last
            line.
Solution:   Set the "include" flag to indicate the last line is to be deleted.
Files:      src/normal.c, src/ops.c


*** ../vim-7.3.250/src/normal.c 2011-07-07 15:08:53.000000000 +0200
--- src/normal.c        2011-07-15 16:53:12.000000000 +0200
***************
*** 1795,1811 ****
                {
                    oap->inclusive = FALSE;
                    /* Try to include the newline, unless it's an operator
!                    * that works on lines only */
!                   if (*p_sel != 'o'
!                           && !op_on_lines(oap->op_type)
!                           && oap->end.lnum < curbuf->b_ml.ml_line_count)
                    {
!                       ++oap->end.lnum;
!                       oap->end.col = 0;
  # ifdef FEAT_VIRTUALEDIT
!                       oap->end.coladd = 0;
  # endif
!                       ++oap->line_count;
                    }
                }
            }
--- 1795,1819 ----
                {
                    oap->inclusive = FALSE;
                    /* Try to include the newline, unless it's an operator
!                    * that works on lines only. */
!                   if (*p_sel != 'o' && !op_on_lines(oap->op_type))
                    {
!                       if (oap->end.lnum < curbuf->b_ml.ml_line_count)
!                       {
!                           ++oap->end.lnum;
!                           oap->end.col = 0;
  # ifdef FEAT_VIRTUALEDIT
!                           oap->end.coladd = 0;
  # endif
!                           ++oap->line_count;
!                       }
!                       else
!                       {
!                           /* Cannot move below the last line, make the op
!                            * inclusive to tell the operation to include the
!                            * line break. */
!                           oap->inclusive = TRUE;
!                       }
                    }
                }
            }
*** ../vim-7.3.250/src/ops.c    2011-06-19 01:14:22.000000000 +0200
--- src/ops.c   2011-07-15 17:28:28.000000000 +0200
***************
*** 1650,1656 ****
            && oap->line_count > 1
            && oap->op_type == OP_DELETE)
      {
!       ptr = ml_get(oap->end.lnum) + oap->end.col + oap->inclusive;
        ptr = skipwhite(ptr);
        if (*ptr == NUL && inindent(0))
            oap->motion_type = MLINE;
--- 1650,1658 ----
            && oap->line_count > 1
            && oap->op_type == OP_DELETE)
      {
!       ptr = ml_get(oap->end.lnum) + oap->end.col;
!       if (*ptr != NUL)
!           ptr += oap->inclusive;
        ptr = skipwhite(ptr);
        if (*ptr == NUL && inindent(0))
            oap->motion_type = MLINE;
***************
*** 1920,1930 ****
                    curwin->w_cursor.coladd = 0;
            }
  #endif
!           (void)del_bytes((long)n, !virtual_op, oap->op_type == OP_DELETE
  #ifdef FEAT_VISUAL
                                    && !oap->is_VIsual
  #endif
                                                        );
        }
        else                            /* delete characters between lines */
        {
--- 1922,1941 ----
                    curwin->w_cursor.coladd = 0;
            }
  #endif
!           if (oap->inclusive && oap->end.lnum == curbuf->b_ml.ml_line_count
!                   && n > (int)STRLEN(ml_get(oap->end.lnum)))
!           {
!               /* Special case: gH<Del> deletes the last line. */
!               del_lines(1L, FALSE);
!           }
!           else
!           {
!               (void)del_bytes((long)n, !virtual_op, oap->op_type == OP_DELETE
  #ifdef FEAT_VISUAL
                                    && !oap->is_VIsual
  #endif
                                                        );
+           }
        }
        else                            /* delete characters between lines */
        {
***************
*** 1941,1957 ****
            ++curwin->w_cursor.lnum;
            del_lines((long)(oap->line_count - 2), FALSE);
  
!           /* delete from start of line until op_end */
!           curwin->w_cursor.col = 0;
!           (void)del_bytes((long)(oap->end.col + 1 - !oap->inclusive),
!                                       !virtual_op, oap->op_type == OP_DELETE
  #ifdef FEAT_VISUAL
                                        && !oap->is_VIsual
  #endif
                                                            );
!           curwin->w_cursor = curpos;          /* restore curwin->w_cursor */
! 
!           (void)do_join(2, FALSE, FALSE);
        }
      }
  
--- 1952,1980 ----
            ++curwin->w_cursor.lnum;
            del_lines((long)(oap->line_count - 2), FALSE);
  
!           n = (oap->end.col + 1 - !oap->inclusive);
!           if (oap->inclusive && oap->end.lnum == curbuf->b_ml.ml_line_count
!                   && n > (int)STRLEN(ml_get(oap->end.lnum)))
!           {
!               /* Special case: gH<Del> deletes the last line. */
!               del_lines(1L, FALSE);
!               curwin->w_cursor = curpos;      /* restore curwin->w_cursor */
!               if (curwin->w_cursor.lnum > 1)
!                   --curwin->w_cursor.lnum;
!           }
!           else
!           {
!               /* delete from start of line until op_end */
!               curwin->w_cursor.col = 0;
!               (void)del_bytes((long)n, !virtual_op, oap->op_type == OP_DELETE
  #ifdef FEAT_VISUAL
                                        && !oap->is_VIsual
  #endif
                                                            );
!               curwin->w_cursor = curpos;      /* restore curwin->w_cursor */
!           }
!           if (curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
!               (void)do_join(2, FALSE, FALSE);
        }
      }
  
*** ../vim-7.3.250/src/version.c        2011-07-15 15:54:39.000000000 +0200
--- src/version.c       2011-07-15 17:35:18.000000000 +0200
***************
*** 711,712 ****
--- 711,714 ----
  {   /* Add new patch number below this line */
+ /**/
+     251,
  /**/

-- 
            ### Hiroshima 45, Chernobyl 86, Windows 95 ###

 /// 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

Raspunde prin e-mail lui