From bcb8c3d34d87d97d01d37a2dda839197f2a375d8 Mon Sep 17 00:00:00 2001 From: Pascal Kuthe Date: Wed, 5 Apr 2023 20:24:49 +0200 Subject: [PATCH] deduplicate savepoints --- helix-view/src/document.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/helix-view/src/document.rs b/helix-view/src/document.rs index e467efd39..4d8e61e1d 100644 --- a/helix-view/src/document.rs +++ b/helix-view/src/document.rs @@ -1240,6 +1240,22 @@ impl Document { /// the state it had when this function was called. pub fn savepoint(&mut self, view: &View) -> Arc { let revert = Transaction::new(self.text()).with_selection(self.selection(view.id).clone()); + // check if there is already an existing (identical) savepoint around + if let Some(savepoint) = self + .savepoints + .iter() + .rev() + .find_map(|savepoint| savepoint.upgrade()) + { + let transaction = savepoint.revert.lock(); + if savepoint.view == view.id + && transaction.changes().is_empty() + && transaction.selection() == revert.selection() + { + drop(transaction); + return savepoint; + } + } let savepoint = Arc::new(SavePoint { view: view.id, revert: Mutex::new(revert),