aboutsummaryrefslogtreecommitdiff
path: root/helix-view
diff options
context:
space:
mode:
authorGabriel Hansson2023-07-09 20:50:24 +0000
committerGitHub2023-07-09 20:50:24 +0000
commitc1488267e59a341ece2a8bb274e66127dca72088 (patch)
tree9f87c8f33b9e5679743b2fbac75c9a39688dba4f /helix-view
parent9a324f337a2705e68035a356ad6b626ee4c6669b (diff)
(Updated) Apply motion API refinements (#6078)
* _apply_motion generalization where possible API encourages users to not forget setting `editor.last_motion` when applying a motion. But also not setting `last_motion` without applying a motion first. * (rename) will_find_char -> find_char method name makes it sound like it would be returning a boolean. * use _apply_motion in find_char Feature that falls out from this is that repetitions of t,T,f,F are saved with the context extention/move and count. (Not defaulting to extend by 1 count). * Finalize apply_motion API last_motion is now a private field and can only be set by calling Editor.apply_motion(). Removing need (and possibility) of writing: `motion(editor); editor.last_motion = motion` Now it's just: `editor.apply_motion(motion)` * editor.last_message: rm Box wrap around Arc * Use pre-existing `Direction` rather than custom `SearchDirection`. * `LastMotion` type alias for `Option<Arc<dyn Fn(&mut Editor)>>` * Take motion rather than cloning it. Co-authored-by: Michael Davis <mcarsondavis@gmail.com> * last_motion as Option<Motion>. * Use `Box` over `Arc` for `last_motion`. --------- Co-authored-by: Michael Davis <mcarsondavis@gmail.com>
Diffstat (limited to 'helix-view')
-rw-r--r--helix-view/src/editor.rs30
1 files changed, 16 insertions, 14 deletions
diff --git a/helix-view/src/editor.rs b/helix-view/src/editor.rs
index 630ea5cf..affe87dd 100644
--- a/helix-view/src/editor.rs
+++ b/helix-view/src/editor.rs
@@ -834,18 +834,6 @@ impl Default for SearchConfig {
}
}
-pub struct Motion(pub Box<dyn Fn(&mut Editor)>);
-impl Motion {
- pub fn run(&self, e: &mut Editor) {
- (self.0)(e)
- }
-}
-impl std::fmt::Debug for Motion {
- fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- f.write_str("motion")
- }
-}
-
#[derive(Debug, Clone, Default)]
pub struct Breakpoint {
pub id: Option<usize>,
@@ -910,8 +898,7 @@ pub struct Editor {
pub auto_pairs: Option<AutoPairs>,
pub idle_timer: Pin<Box<Sleep>>,
- pub last_motion: Option<Motion>,
-
+ last_motion: Option<Motion>,
pub last_completion: Option<CompleteAction>,
pub exit_code: i32,
@@ -945,6 +932,8 @@ pub struct Editor {
pub completion_request_handle: Option<oneshot::Sender<()>>,
}
+pub type Motion = Box<dyn Fn(&mut Editor)>;
+
pub type RedrawHandle = (Arc<Notify>, Arc<RwLock<()>>);
#[derive(Debug)]
@@ -1051,6 +1040,19 @@ impl Editor {
}
}
+ pub fn apply_motion<F: Fn(&mut Self) + 'static>(&mut self, motion: F) {
+ motion(self);
+ self.last_motion = Some(Box::new(motion));
+ }
+
+ pub fn repeat_last_motion(&mut self, count: usize) {
+ if let Some(motion) = self.last_motion.take() {
+ for _ in 0..count {
+ motion(self);
+ }
+ self.last_motion = Some(motion);
+ }
+ }
/// Current editing mode for the [`Editor`].
pub fn mode(&self) -> Mode {
self.mode