mirror of
https://github.com/helix-editor/helix.git
synced 2024-11-22 09:26:19 +04:00
deduplicate savepoints
This commit is contained in:
parent
9c558fc470
commit
bcb8c3d34d
@ -1240,6 +1240,22 @@ pub fn redo(&mut self, view: &mut View) -> bool {
|
|||||||
/// the state it had when this function was called.
|
/// the state it had when this function was called.
|
||||||
pub fn savepoint(&mut self, view: &View) -> Arc<SavePoint> {
|
pub fn savepoint(&mut self, view: &View) -> Arc<SavePoint> {
|
||||||
let revert = Transaction::new(self.text()).with_selection(self.selection(view.id).clone());
|
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 {
|
let savepoint = Arc::new(SavePoint {
|
||||||
view: view.id,
|
view: view.id,
|
||||||
revert: Mutex::new(revert),
|
revert: Mutex::new(revert),
|
||||||
|
Loading…
Reference in New Issue
Block a user