From ea502c8665332932b2311df3852b5ac8df6509af Mon Sep 17 00:00:00 2001 From: Blaž Hrastnik Date: Mon, 21 Dec 2020 13:58:54 +0900 Subject: fix change -> change -> undo -> change -> undo -> undo. --- helix-view/src/document.rs | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'helix-view/src') diff --git a/helix-view/src/document.rs b/helix-view/src/document.rs index 0dc40c5a..d6246c34 100644 --- a/helix-view/src/document.rs +++ b/helix-view/src/document.rs @@ -185,6 +185,50 @@ impl Document { success } + pub fn undo(&mut self) -> bool { + if let Some(transaction) = self.history.undo() { + let old_doc = self.text().clone(); + self.version += 1; + let success = transaction.apply(&mut self.state); + + // update tree-sitter syntax tree + if let Some(syntax) = &mut self.syntax { + // TODO: no unwrap + syntax + .update(&old_doc, &self.state.doc, transaction.changes()) + .unwrap(); + } + + // reset changeset to fix len + self.changes = ChangeSet::new(self.text()); + + return success; + } + false + } + + pub fn redo(&mut self) -> bool { + if let Some(transaction) = self.history.redo() { + let old_doc = self.text().clone(); + self.version += 1; + let success = transaction.apply(&mut self.state); + + // update tree-sitter syntax tree + if let Some(syntax) = &mut self.syntax { + // TODO: no unwrap + syntax + .update(&old_doc, &self.state.doc, transaction.changes()) + .unwrap(); + } + + // reset changeset to fix len + self.changes = ChangeSet::new(self.text()); + + return success; + } + false + } + #[inline] pub fn mode(&self) -> Mode { self.mode -- cgit v1.2.3-70-g09d2