mirror of
https://github.com/neovim/neovim.git
synced 2025-09-18 17:28:23 +00:00
Merge #6221
This commit is contained in:
@@ -756,14 +756,6 @@ int do_move(linenr_T line1, linenr_T line2, linenr_T dest)
|
||||
linenr_T num_lines; // Num lines moved
|
||||
linenr_T last_line; // Last line in file after adding new text
|
||||
|
||||
// Moving lines seems to corrupt the folds, delete folding info now
|
||||
// and recreate it when finished. Don't do this for manual folding, it
|
||||
// would delete all folds.
|
||||
bool isFolded = hasAnyFolding(curwin) && !foldmethodIsManual(curwin);
|
||||
if (isFolded) {
|
||||
deleteFoldRecurse(&curwin->w_folds);
|
||||
}
|
||||
|
||||
if (dest >= line1 && dest < line2) {
|
||||
EMSG(_("E134: Move lines into themselves"));
|
||||
return FAIL;
|
||||
@@ -801,21 +793,29 @@ int do_move(linenr_T line1, linenr_T line2, linenr_T dest)
|
||||
* their final destination at the new text position -- webb
|
||||
*/
|
||||
last_line = curbuf->b_ml.ml_line_count;
|
||||
mark_adjust(line1, line2, last_line - line2, 0L);
|
||||
changed_lines(last_line - num_lines + 1, 0, last_line + 1, num_lines);
|
||||
mark_adjust_nofold(line1, line2, last_line - line2, 0L);
|
||||
if (dest >= line2) {
|
||||
mark_adjust(line2 + 1, dest, -num_lines, 0L);
|
||||
mark_adjust_nofold(line2 + 1, dest, -num_lines, 0L);
|
||||
FOR_ALL_TAB_WINDOWS(tab, win) {
|
||||
if (win->w_buffer == curbuf) {
|
||||
foldMoveRange(&win->w_folds, line1, line2, dest);
|
||||
}
|
||||
}
|
||||
curbuf->b_op_start.lnum = dest - num_lines + 1;
|
||||
curbuf->b_op_end.lnum = dest;
|
||||
} else {
|
||||
mark_adjust(dest + 1, line1 - 1, num_lines, 0L);
|
||||
mark_adjust_nofold(dest + 1, line1 - 1, num_lines, 0L);
|
||||
FOR_ALL_TAB_WINDOWS(tab, win) {
|
||||
if (win->w_buffer == curbuf) {
|
||||
foldMoveRange(&win->w_folds, dest + 1, line1 - 1, line2);
|
||||
}
|
||||
}
|
||||
curbuf->b_op_start.lnum = dest + 1;
|
||||
curbuf->b_op_end.lnum = dest + num_lines;
|
||||
}
|
||||
curbuf->b_op_start.col = curbuf->b_op_end.col = 0;
|
||||
mark_adjust(last_line - num_lines + 1, last_line,
|
||||
-(last_line - dest - extra), 0L);
|
||||
changed_lines(last_line - num_lines + 1, 0, last_line + 1, -extra);
|
||||
mark_adjust_nofold(last_line - num_lines + 1, last_line,
|
||||
-(last_line - dest - extra), 0L);
|
||||
|
||||
/*
|
||||
* Now we delete the original text -- webb
|
||||
@@ -851,11 +851,6 @@ int do_move(linenr_T line1, linenr_T line2, linenr_T dest)
|
||||
changed_lines(dest + 1, 0, line1 + num_lines, 0L);
|
||||
}
|
||||
|
||||
// recreate folds
|
||||
if (isFolded) {
|
||||
foldUpdateAll(curwin);
|
||||
}
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user