From e7beb32fd7b9262e61dad96fdf4b36ebdc5367f7 Mon Sep 17 00:00:00 2001 From: Ivan Tham Date: Tue, 5 Apr 2022 08:43:04 +0800 Subject: [PATCH] Add paragraph to last motion (#1956) Fix #1954 --- helix-term/src/commands.rs | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs index b93cfc41..9a222427 100644 --- a/helix-term/src/commands.rs +++ b/helix-term/src/commands.rs @@ -905,22 +905,26 @@ fn move_next_long_word_end(cx: &mut Context) { fn move_para_impl(cx: &mut Context, move_fn: F) where - F: Fn(RopeSlice, Range, usize, Movement) -> Range, + F: Fn(RopeSlice, Range, usize, Movement) -> Range + 'static, { let count = cx.count(); - let (view, doc) = current!(cx.editor); - let text = doc.text().slice(..); - let behavior = if doc.mode == Mode::Select { - Movement::Extend - } else { - Movement::Move - }; + let motion = move |editor: &mut Editor| { + let (view, doc) = current!(editor); + let text = doc.text().slice(..); + let behavior = if doc.mode == Mode::Select { + Movement::Extend + } else { + Movement::Move + }; - let selection = doc - .selection(view.id) - .clone() - .transform(|range| move_fn(text, range, count, behavior)); - doc.set_selection(view.id, selection); + let selection = doc + .selection(view.id) + .clone() + .transform(|range| move_fn(text, range, count, behavior)); + doc.set_selection(view.id, selection); + }; + motion(cx.editor); + cx.editor.last_motion = Some(Motion(Box::new(motion))); } fn move_prev_paragraph(cx: &mut Context) {