| 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 |
| |
| |
| |
| |
| |
| *** 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); |
| } |
| } |
| |
| |
| |
| |
| *** 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) |
| |
| |
| |
| *** 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)); |
| |
| |
| |
| *** 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)); |
| |
| |
| |
| *** 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 /// |