diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs index b3614793f..7f43fa9ce 100644 --- a/helix-term/src/commands.rs +++ b/helix-term/src/commands.rs @@ -2617,14 +2617,19 @@ fn selection_is_linewise(selection: &Selection, text: &Rope) -> bool { }) } -fn delete_selection_impl(cx: &mut Context, op: Operation, yank: bool) { +enum YankAction { + Yank, + NoYank, +} + +fn delete_selection_impl(cx: &mut Context, op: Operation, yank: YankAction) { let (view, doc) = current!(cx.editor); let selection = doc.selection(view.id); let only_whole_lines = selection_is_linewise(selection, doc.text()); - if cx.register != Some('_') && yank { - // first yank the selection + if cx.register != Some('_') && matches!(yank, YankAction::Yank) { + // yank the selection let text = doc.text().slice(..); let values: Vec = selection.fragments(text).map(Cow::into_owned).collect(); let reg_name = cx.register.unwrap_or('"'); @@ -2632,9 +2637,9 @@ fn delete_selection_impl(cx: &mut Context, op: Operation, yank: bool) { cx.editor.set_error(err.to_string()); return; } - }; + } - // then delete + // delete the selection let transaction = Transaction::delete_by_selection(doc.text(), selection, |range| (range.from(), range.to())); doc.apply(&transaction, view.id); @@ -2700,19 +2705,19 @@ fn delete_by_selection_insert_mode( } fn delete_selection(cx: &mut Context) { - delete_selection_impl(cx, Operation::Delete, true); + delete_selection_impl(cx, Operation::Delete, YankAction::Yank); } fn delete_selection_noyank(cx: &mut Context) { - delete_selection_impl(cx, Operation::Delete, false); + delete_selection_impl(cx, Operation::Delete, YankAction::NoYank); } fn change_selection(cx: &mut Context) { - delete_selection_impl(cx, Operation::Change, true); + delete_selection_impl(cx, Operation::Change, YankAction::Yank); } fn change_selection_noyank(cx: &mut Context) { - delete_selection_impl(cx, Operation::Change, false); + delete_selection_impl(cx, Operation::Change, YankAction::NoYank); } fn collapse_selection(cx: &mut Context) {