Maintain a different undo/redo stack in MultiBuffer

This only applies to singleton mode.
This commit is contained in:
Antonio Scandurra 2021-12-14 17:43:41 +01:00
parent 523cbe781b
commit 08e9f3e1e3
3 changed files with 345 additions and 22 deletions

View file

@ -1375,6 +1375,23 @@ impl Buffer {
}
}
pub fn undo_transaction(
&mut self,
transaction_id: TransactionId,
cx: &mut ModelContext<Self>,
) -> bool {
let was_dirty = self.is_dirty();
let old_version = self.version.clone();
if let Some(operation) = self.text.undo_transaction(transaction_id) {
self.send_operation(Operation::Buffer(operation), cx);
self.did_edit(&old_version, was_dirty, cx);
true
} else {
false
}
}
pub fn redo(&mut self, cx: &mut ModelContext<Self>) -> Option<TransactionId> {
let was_dirty = self.is_dirty();
let old_version = self.version.clone();
@ -1387,6 +1404,23 @@ impl Buffer {
None
}
}
pub fn redo_transaction(
&mut self,
transaction_id: TransactionId,
cx: &mut ModelContext<Self>,
) -> bool {
let was_dirty = self.is_dirty();
let old_version = self.version.clone();
if let Some(operation) = self.text.redo_transaction(transaction_id) {
self.send_operation(Operation::Buffer(operation), cx);
self.did_edit(&old_version, was_dirty, cx);
true
} else {
false
}
}
}
#[cfg(any(test, feature = "test-support"))]