mirror of
https://github.com/neovim/neovim.git
synced 2024-12-20 11:15:14 -07:00
fix: invoke changed_bytes when rewriting <Tab> char #25125
When tabstop and shiftwidth are not equal, tabs are inserted as individual spaces and then rewritten as tab characters in a second pass. That second pass did not call changed_bytes which resulted in events being omitted. Fixes #25092
This commit is contained in:
parent
28233bcb49
commit
f5a09f1b03
@ -4429,9 +4429,8 @@ static bool ins_tab(void)
|
||||
}
|
||||
}
|
||||
if (!(State & VREPLACE_FLAG)) {
|
||||
extmark_splice_cols(curbuf, (int)fpos.lnum - 1, change_col,
|
||||
cursor->col - change_col, fpos.col - change_col,
|
||||
kExtmarkUndo);
|
||||
inserted_bytes(fpos.lnum, change_col,
|
||||
cursor->col - change_col, fpos.col - change_col);
|
||||
}
|
||||
}
|
||||
cursor->col -= i;
|
||||
|
@ -826,53 +826,53 @@ describe('lua: nvim_buf_attach on_bytes', function()
|
||||
|
||||
feed("<esc>u")
|
||||
check_events {
|
||||
{ "test1", "bytes", 1, 8, 0, 0, 0, 0, 1, 1, 0, 4, 4 },
|
||||
{ "test1", "bytes", 1, 8, 0, 0, 0, 0, 4, 4, 0, 0, 0 }
|
||||
{ "test1", "bytes", 1, 9, 0, 0, 0, 0, 1, 1, 0, 4, 4 },
|
||||
{ "test1", "bytes", 1, 9, 0, 0, 0, 0, 4, 4, 0, 0, 0 }
|
||||
}
|
||||
|
||||
-- in REPLACE mode
|
||||
feed("R<tab><tab>")
|
||||
check_events {
|
||||
{ "test1", "bytes", 1, 9, 0, 0, 0, 0, 1, 1, 0, 1, 1 },
|
||||
{ "test1", "bytes", 1, 10, 0, 1, 1, 0, 0, 0, 0, 1, 1 },
|
||||
{ "test1", "bytes", 1, 11, 0, 2, 2, 0, 1, 1, 0, 1, 1 },
|
||||
{ "test1", "bytes", 1, 12, 0, 3, 3, 0, 0, 0, 0, 1, 1 },
|
||||
{ "test1", "bytes", 1, 13, 0, 0, 0, 0, 4, 4, 0, 1, 1 },
|
||||
{ "test1", "bytes", 1, 10, 0, 0, 0, 0, 1, 1, 0, 1, 1 },
|
||||
{ "test1", "bytes", 1, 11, 0, 1, 1, 0, 0, 0, 0, 1, 1 },
|
||||
{ "test1", "bytes", 1, 12, 0, 2, 2, 0, 1, 1, 0, 1, 1 },
|
||||
{ "test1", "bytes", 1, 13, 0, 3, 3, 0, 0, 0, 0, 1, 1 },
|
||||
{ "test1", "bytes", 1, 14, 0, 0, 0, 0, 4, 4, 0, 1, 1 },
|
||||
}
|
||||
feed("<esc>u")
|
||||
check_events {
|
||||
{ "test1", "bytes", 1, 14, 0, 0, 0, 0, 1, 1, 0, 4, 4 },
|
||||
{ "test1", "bytes", 1, 14, 0, 2, 2, 0, 2, 2, 0, 1, 1 },
|
||||
{ "test1", "bytes", 1, 14, 0, 0, 0, 0, 2, 2, 0, 1, 1 }
|
||||
{ "test1", "bytes", 1, 16, 0, 0, 0, 0, 1, 1, 0, 4, 4 },
|
||||
{ "test1", "bytes", 1, 16, 0, 2, 2, 0, 2, 2, 0, 1, 1 },
|
||||
{ "test1", "bytes", 1, 16, 0, 0, 0, 0, 2, 2, 0, 1, 1 }
|
||||
}
|
||||
|
||||
-- in VISUALREPLACE mode
|
||||
feed("gR<tab><tab>")
|
||||
check_events {
|
||||
{ "test1", "bytes", 1, 15, 0, 0, 0, 0, 1, 1, 0, 1, 1 };
|
||||
{ "test1", "bytes", 1, 16, 0, 1, 1, 0, 1, 1, 0, 1, 1 };
|
||||
{ "test1", "bytes", 1, 17, 0, 2, 2, 0, 1, 1, 0, 1, 1 };
|
||||
{ "test1", "bytes", 1, 18, 0, 3, 3, 0, 1, 1, 0, 1, 1 };
|
||||
{ "test1", "bytes", 1, 19, 0, 3, 3, 0, 1, 1, 0, 0, 0 };
|
||||
{ "test1", "bytes", 1, 20, 0, 3, 3, 0, 0, 0, 0, 1, 1 };
|
||||
{ "test1", "bytes", 1, 22, 0, 2, 2, 0, 1, 1, 0, 0, 0 };
|
||||
{ "test1", "bytes", 1, 23, 0, 2, 2, 0, 0, 0, 0, 1, 1 };
|
||||
{ "test1", "bytes", 1, 25, 0, 1, 1, 0, 1, 1, 0, 0, 0 };
|
||||
{ "test1", "bytes", 1, 26, 0, 1, 1, 0, 0, 0, 0, 1, 1 };
|
||||
{ "test1", "bytes", 1, 28, 0, 0, 0, 0, 1, 1, 0, 0, 0 };
|
||||
{ "test1", "bytes", 1, 29, 0, 0, 0, 0, 0, 0, 0, 1, 1 };
|
||||
{ "test1", "bytes", 1, 31, 0, 0, 0, 0, 4, 4, 0, 1, 1 };
|
||||
{ "test1", "bytes", 1, 17, 0, 0, 0, 0, 1, 1, 0, 1, 1 };
|
||||
{ "test1", "bytes", 1, 18, 0, 1, 1, 0, 1, 1, 0, 1, 1 };
|
||||
{ "test1", "bytes", 1, 19, 0, 2, 2, 0, 1, 1, 0, 1, 1 };
|
||||
{ "test1", "bytes", 1, 20, 0, 3, 3, 0, 1, 1, 0, 1, 1 };
|
||||
{ "test1", "bytes", 1, 21, 0, 3, 3, 0, 1, 1, 0, 0, 0 };
|
||||
{ "test1", "bytes", 1, 22, 0, 3, 3, 0, 0, 0, 0, 1, 1 };
|
||||
{ "test1", "bytes", 1, 24, 0, 2, 2, 0, 1, 1, 0, 0, 0 };
|
||||
{ "test1", "bytes", 1, 25, 0, 2, 2, 0, 0, 0, 0, 1, 1 };
|
||||
{ "test1", "bytes", 1, 27, 0, 1, 1, 0, 1, 1, 0, 0, 0 };
|
||||
{ "test1", "bytes", 1, 28, 0, 1, 1, 0, 0, 0, 0, 1, 1 };
|
||||
{ "test1", "bytes", 1, 30, 0, 0, 0, 0, 1, 1, 0, 0, 0 };
|
||||
{ "test1", "bytes", 1, 31, 0, 0, 0, 0, 0, 0, 0, 1, 1 };
|
||||
{ "test1", "bytes", 1, 33, 0, 0, 0, 0, 4, 4, 0, 1, 1 };
|
||||
}
|
||||
|
||||
-- inserting tab after other tabs
|
||||
command("set sw=4")
|
||||
feed("<esc>0a<tab>")
|
||||
check_events {
|
||||
{ "test1", "bytes", 1, 32, 0, 1, 1, 0, 0, 0, 0, 1, 1 };
|
||||
{ "test1", "bytes", 1, 33, 0, 2, 2, 0, 0, 0, 0, 1, 1 };
|
||||
{ "test1", "bytes", 1, 34, 0, 3, 3, 0, 0, 0, 0, 1, 1 };
|
||||
{ "test1", "bytes", 1, 35, 0, 4, 4, 0, 0, 0, 0, 1, 1 };
|
||||
{ "test1", "bytes", 1, 36, 0, 1, 1, 0, 4, 4, 0, 1, 1 };
|
||||
{ "test1", "bytes", 1, 34, 0, 1, 1, 0, 0, 0, 0, 1, 1 };
|
||||
{ "test1", "bytes", 1, 35, 0, 2, 2, 0, 0, 0, 0, 1, 1 };
|
||||
{ "test1", "bytes", 1, 36, 0, 3, 3, 0, 0, 0, 0, 1, 1 };
|
||||
{ "test1", "bytes", 1, 37, 0, 4, 4, 0, 0, 0, 0, 1, 1 };
|
||||
{ "test1", "bytes", 1, 38, 0, 1, 1, 0, 4, 4, 0, 1, 1 };
|
||||
}
|
||||
end)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user