Blob Blame History Raw
To: vim-dev@vim.org
Subject: Patch 7.1.231
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.231
Problem:    When shifting lines the change is acted upon multiple times.
Solution:   Don't have shift_line() call changed_bytes.
Files:	    src/edit.c, src/ops.c, src/proto/edit.pro, src/proto/ops.pro


*** ../vim-7.1.230/src/edit.c	Mon Jan 14 20:11:37 2008
--- src/edit.c	Mon Jan 14 20:06:43 2008
***************
*** 1662,1672 ****
   * if round is TRUE, round the indent to 'shiftwidth' (only with _INC and _Dec).
   */
      void
! change_indent(type, amount, round, replaced)
      int		type;
      int		amount;
      int		round;
      int		replaced;	/* replaced character, put on replace stack */
  {
      int		vcol;
      int		last_vcol;
--- 1662,1673 ----
   * if round is TRUE, round the indent to 'shiftwidth' (only with _INC and _Dec).
   */
      void
! change_indent(type, amount, round, replaced, call_changed_bytes)
      int		type;
      int		amount;
      int		round;
      int		replaced;	/* replaced character, put on replace stack */
+     int		call_changed_bytes;	/* call changed_bytes() */
  {
      int		vcol;
      int		last_vcol;
***************
*** 1723,1729 ****
       * Set the new indent.  The cursor will be put on the first non-blank.
       */
      if (type == INDENT_SET)
! 	(void)set_indent(amount, SIN_CHANGED);
      else
      {
  #ifdef FEAT_VREPLACE
--- 1724,1730 ----
       * Set the new indent.  The cursor will be put on the first non-blank.
       */
      if (type == INDENT_SET)
! 	(void)set_indent(amount, call_changed_bytes ? SIN_CHANGED : 0);
      else
      {
  #ifdef FEAT_VREPLACE
***************
*** 1733,1739 ****
  	if (State & VREPLACE_FLAG)
  	    State = INSERT;
  #endif
! 	shift_line(type == INDENT_DEC, round, 1);
  #ifdef FEAT_VREPLACE
  	State = save_State;
  #endif
--- 1734,1740 ----
  	if (State & VREPLACE_FLAG)
  	    State = INSERT;
  #endif
! 	shift_line(type == INDENT_DEC, round, 1, call_changed_bytes);
  #ifdef FEAT_VREPLACE
  	State = save_State;
  #endif
***************
*** 5921,5927 ****
  	    {
  #ifdef FEAT_VREPLACE
  		if (State & VREPLACE_FLAG)
! 		    change_indent(INDENT_SET, second_indent, FALSE, NUL);
  		else
  #endif
  		    (void)set_indent(second_indent, SIN_CHANGED);
--- 5922,5928 ----
  	    {
  #ifdef FEAT_VREPLACE
  		if (State & VREPLACE_FLAG)
! 		    change_indent(INDENT_SET, second_indent, FALSE, NUL, TRUE);
  		else
  #endif
  		    (void)set_indent(second_indent, SIN_CHANGED);
***************
*** 7227,7233 ****
  fixthisline(get_the_indent)
      int (*get_the_indent) __ARGS((void));
  {
!     change_indent(INDENT_SET, get_the_indent(), FALSE, 0);
      if (linewhite(curwin->w_cursor.lnum))
  	did_ai = TRUE;	    /* delete the indent if the line stays empty */
  }
--- 7228,7234 ----
  fixthisline(get_the_indent)
      int (*get_the_indent) __ARGS((void));
  {
!     change_indent(INDENT_SET, get_the_indent(), FALSE, 0, TRUE);
      if (linewhite(curwin->w_cursor.lnum))
  	did_ai = TRUE;	    /* delete the indent if the line stays empty */
  }
***************
*** 8170,8179 ****
  	    replace_pop_ins();
  	if (lastc == '^')
  	    old_indent = get_indent();	/* remember curr. indent */
! 	change_indent(INDENT_SET, 0, TRUE, 0);
      }
      else
! 	change_indent(c == Ctrl_D ? INDENT_DEC : INDENT_INC, 0, TRUE, 0);
  
      if (did_ai && *skipwhite(ml_get_curline()) != NUL)
  	did_ai = FALSE;
--- 8171,8180 ----
  	    replace_pop_ins();
  	if (lastc == '^')
  	    old_indent = get_indent();	/* remember curr. indent */
! 	change_indent(INDENT_SET, 0, TRUE, 0, TRUE);
      }
      else
! 	change_indent(c == Ctrl_D ? INDENT_DEC : INDENT_INC, 0, TRUE, 0, TRUE);
  
      if (did_ai && *skipwhite(ml_get_curline()) != NUL)
  	did_ai = FALSE;
***************
*** 9633,9639 ****
  	    curwin->w_cursor = old_pos;
  #ifdef FEAT_VREPLACE
  	    if (State & VREPLACE_FLAG)
! 		change_indent(INDENT_SET, i, FALSE, NUL);
  	    else
  #endif
  		(void)set_indent(i, SIN_CHANGED);
--- 9634,9640 ----
  	    curwin->w_cursor = old_pos;
  #ifdef FEAT_VREPLACE
  	    if (State & VREPLACE_FLAG)
! 		change_indent(INDENT_SET, i, FALSE, NUL, TRUE);
  	    else
  #endif
  		(void)set_indent(i, SIN_CHANGED);
***************
*** 9662,9668 ****
  		curwin->w_cursor = old_pos;
  	    }
  	    if (temp)
! 		shift_line(TRUE, FALSE, 1);
  	}
      }
  
--- 9663,9669 ----
  		curwin->w_cursor = old_pos;
  	    }
  	    if (temp)
! 		shift_line(TRUE, FALSE, 1, TRUE);
  	}
      }
  
*** ../vim-7.1.230/src/ops.c	Thu Jan  3 16:31:17 2008
--- src/ops.c	Sun Jan 13 21:52:18 2008
***************
*** 258,264 ****
  	    if (first_char != '#' || !preprocs_left())
  #endif
  	{
! 	    shift_line(oap->op_type == OP_LSHIFT, p_sr, amount);
  	}
  	++curwin->w_cursor.lnum;
      }
--- 258,264 ----
  	    if (first_char != '#' || !preprocs_left())
  #endif
  	{
! 	    shift_line(oap->op_type == OP_LSHIFT, p_sr, amount, FALSE);
  	}
  	++curwin->w_cursor.lnum;
      }
***************
*** 321,330 ****
   * leaves cursor on first blank in the line
   */
      void
! shift_line(left, round, amount)
      int	left;
      int	round;
      int	amount;
  {
      int		count;
      int		i, j;
--- 321,331 ----
   * leaves cursor on first blank in the line
   */
      void
! shift_line(left, round, amount, call_changed_bytes)
      int	left;
      int	round;
      int	amount;
+     int call_changed_bytes;	/* call changed_bytes() */
  {
      int		count;
      int		i, j;
***************
*** 363,372 ****
      /* Set new indent */
  #ifdef FEAT_VREPLACE
      if (State & VREPLACE_FLAG)
! 	change_indent(INDENT_SET, count, FALSE, NUL);
      else
  #endif
! 	(void)set_indent(count, SIN_CHANGED);
  }
  
  #if defined(FEAT_VISUALEXTRA) || defined(PROTO)
--- 364,373 ----
      /* Set new indent */
  #ifdef FEAT_VREPLACE
      if (State & VREPLACE_FLAG)
! 	change_indent(INDENT_SET, count, FALSE, NUL, call_changed_bytes);
      else
  #endif
! 	(void)set_indent(count, call_changed_bytes ? SIN_CHANGED : 0);
  }
  
  #if defined(FEAT_VISUALEXTRA) || defined(PROTO)
*** ../vim-7.1.230/src/proto/edit.pro	Wed Jan  2 17:48:24 2008
--- src/proto/edit.pro	Sun Jan 13 21:52:27 2008
***************
*** 3,9 ****
  void edit_putchar __ARGS((int c, int highlight));
  void edit_unputchar __ARGS((void));
  void display_dollar __ARGS((colnr_T col));
! void change_indent __ARGS((int type, int amount, int round, int replaced));
  void truncate_spaces __ARGS((char_u *line));
  void backspace_until_column __ARGS((int col));
  int vim_is_ctrl_x_key __ARGS((int c));
--- 3,9 ----
  void edit_putchar __ARGS((int c, int highlight));
  void edit_unputchar __ARGS((void));
  void display_dollar __ARGS((colnr_T col));
! void change_indent __ARGS((int type, int amount, int round, int replaced, int call_changed_bytes));
  void truncate_spaces __ARGS((char_u *line));
  void backspace_until_column __ARGS((int col));
  int vim_is_ctrl_x_key __ARGS((int c));
*** ../vim-7.1.230/src/proto/ops.pro	Sun May  6 13:56:32 2007
--- src/proto/ops.pro	Sun Jan 13 21:52:30 2008
***************
*** 4,10 ****
  int get_op_char __ARGS((int optype));
  int get_extra_op_char __ARGS((int optype));
  void op_shift __ARGS((oparg_T *oap, int curs_top, int amount));
! void shift_line __ARGS((int left, int round, int amount));
  void op_reindent __ARGS((oparg_T *oap, int (*how)(void)));
  int get_expr_register __ARGS((void));
  void set_expr_line __ARGS((char_u *new_line));
--- 4,10 ----
  int get_op_char __ARGS((int optype));
  int get_extra_op_char __ARGS((int optype));
  void op_shift __ARGS((oparg_T *oap, int curs_top, int amount));
! void shift_line __ARGS((int left, int round, int amount, int call_changed_bytes));
  void op_reindent __ARGS((oparg_T *oap, int (*how)(void)));
  int get_expr_register __ARGS((void));
  void set_expr_line __ARGS((char_u *new_line));
*** ../vim-7.1.230/src/version.c	Tue Jan 15 22:16:36 2008
--- src/version.c	Wed Jan 16 19:58:25 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     231,
  /**/

-- 
Snoring is prohibited unless all bedroom windows are closed and securely
locked.
		[real standing law in Massachusetts, United States of America]

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