mirror of
https://github.com/neovim/neovim.git
synced 2025-09-11 13:58:18 +00:00
vim-patch:8.0.1041: bogus characters when indenting during visual-block append
Problem: Bogus characters appear when indenting kicks in while doing a
visual-block append.
Solution: Recompute when indenting is done. (Christian Brabandt)
e2e69e4813
This commit is contained in:
@@ -2014,6 +2014,7 @@ void op_insert(oparg_T *oap, long count1)
|
||||
{
|
||||
long ins_len, pre_textlen = 0;
|
||||
char_u *firstline, *ins_text;
|
||||
colnr_T ind_pre, ind_post;
|
||||
struct block_def bd;
|
||||
int i;
|
||||
pos_T t1;
|
||||
@@ -2044,7 +2045,10 @@ void op_insert(oparg_T *oap, long count1)
|
||||
}
|
||||
// Get the info about the block before entering the text
|
||||
block_prep(oap, &bd, oap->start.lnum, true);
|
||||
// Get indent information
|
||||
ind_pre = (colnr_T)getwhitecols_curline();
|
||||
firstline = ml_get(oap->start.lnum) + bd.textcol;
|
||||
|
||||
if (oap->op_type == OP_APPEND)
|
||||
firstline += bd.textlen;
|
||||
pre_textlen = (long)STRLEN(firstline);
|
||||
@@ -2091,6 +2095,14 @@ void op_insert(oparg_T *oap, long count1)
|
||||
oap->start = curbuf->b_op_start_orig;
|
||||
}
|
||||
|
||||
// if indent kicked in, the firstline might have changed
|
||||
// but only do that, if the indent actually increased
|
||||
ind_post = (colnr_T)getwhitecols_curline();
|
||||
if (curbuf->b_op_start.col > ind_pre && ind_post > ind_pre) {
|
||||
bd.textcol += ind_post - ind_pre;
|
||||
bd.start_vcol += ind_post - ind_pre;
|
||||
}
|
||||
|
||||
/* If user has moved off this line, we don't know what to do, so do
|
||||
* nothing.
|
||||
* Also don't repeat the insert when Insert mode ended with CTRL-C. */
|
||||
@@ -2216,7 +2228,7 @@ int op_change(oparg_T *oap)
|
||||
}
|
||||
firstline = ml_get(oap->start.lnum);
|
||||
pre_textlen = (long)STRLEN(firstline);
|
||||
pre_indent = (long)(skipwhite(firstline) - firstline);
|
||||
pre_indent = (long)getwhitecols(firstline);
|
||||
bd.textcol = curwin->w_cursor.col;
|
||||
}
|
||||
|
||||
@@ -2237,7 +2249,7 @@ int op_change(oparg_T *oap)
|
||||
// the indent, exclude that indent change from the inserted text.
|
||||
firstline = ml_get(oap->start.lnum);
|
||||
if (bd.textcol > (colnr_T)pre_indent) {
|
||||
long new_indent = (long)(skipwhite(firstline) - firstline);
|
||||
long new_indent = (long)getwhitecols(firstline);
|
||||
|
||||
pre_textlen += new_indent - pre_indent;
|
||||
bd.textcol += (colnr_T)(new_indent - pre_indent);
|
||||
@@ -4122,8 +4134,7 @@ format_lines (
|
||||
mark_col_adjust(curwin->w_cursor.lnum, (colnr_T)0, 0L,
|
||||
(long)-next_leader_len);
|
||||
} else if (second_indent > 0) { /* the "leader" for FO_Q_SECOND */
|
||||
char_u *p = get_cursor_line_ptr();
|
||||
int indent = (int)(skipwhite(p) - p);
|
||||
int indent = (int)getwhitecols_curline();
|
||||
|
||||
if (indent > 0) {
|
||||
(void)del_bytes(indent, FALSE, FALSE);
|
||||
|
Reference in New Issue
Block a user