To: vim-dev@vim.org Subject: Patch 7.1.231 Fcc: outbox From: Bram Moolenaar 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 ///