fix(folds): fix fold regression with :move (#18685)

This commit is contained in:
zeertzjq 2022-05-22 21:03:22 +08:00 committed by GitHub
parent e7b3fd8ad6
commit 70e3caec4a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 67 additions and 0 deletions

View File

@ -971,7 +971,11 @@ int do_move(linenr_T line1, linenr_T line2, linenr_T dest)
*/
last_line = curbuf->b_ml.ml_line_count;
mark_adjust_nofold(line1, line2, last_line - line2, 0L, kExtmarkNOOP);
disable_fold_update++;
changed_lines(last_line - num_lines + 1, 0, last_line + 1, num_lines, false);
disable_fold_update--;
int line_off = 0;
bcount_t byte_off = 0;
if (dest >= line2) {
@ -1005,7 +1009,9 @@ int do_move(linenr_T line1, linenr_T line2, linenr_T dest)
mark_adjust_nofold(last_line - num_lines + 1, last_line,
-(last_line - dest - extra), 0L, kExtmarkNOOP);
disable_fold_update++;
changed_lines(last_line - num_lines + 1, 0, last_line + 1, -extra, false);
disable_fold_update--;
// send update regarding the new lines that were added
buf_updates_send_changes(curbuf, dest + 1, num_lines, 0, true);

View File

@ -1757,6 +1757,67 @@ describe("folded lines", function()
end
assert_alive()
end)
it('work correctly with :move #18668', function()
screen:try_resize(45, 12)
source([[
set foldmethod=expr foldexpr=indent(v:lnum)
let content = ['', '', 'Line1', ' Line2', ' Line3',
\ 'Line4', ' Line5', ' Line6',
\ 'Line7', ' Line8', ' Line9']
call append(0, content)
normal! zM
call cursor(4, 1)
move 2
move 1
]])
if multigrid then
screen:expect([[
## grid 1
[2:---------------------------------------------]|
[2:---------------------------------------------]|
[2:---------------------------------------------]|
[2:---------------------------------------------]|
[2:---------------------------------------------]|
[2:---------------------------------------------]|
[2:---------------------------------------------]|
[2:---------------------------------------------]|
[2:---------------------------------------------]|
[2:---------------------------------------------]|
[2:---------------------------------------------]|
[3:---------------------------------------------]|
## grid 2
|
{5:^+-- 2 lines: Line2··························}|
|
Line1 |
Line4 |
{5:+-- 2 lines: Line5··························}|
Line7 |
{5:+-- 2 lines: Line8··························}|
|
{1:~ }|
{1:~ }|
## grid 3
|
]])
else
screen:expect([[
|
{5:^+-- 2 lines: Line2··························}|
|
Line1 |
Line4 |
{5:+-- 2 lines: Line5··························}|
Line7 |
{5:+-- 2 lines: Line8··························}|
|
{1:~ }|
{1:~ }|
|
]])
end
end)
end
describe("with ext_multigrid", function()