mirror of
https://github.com/helix-editor/helix.git
synced 2025-01-19 21:47:07 +04:00
fix change -> change -> undo -> change -> undo -> undo.
This commit is contained in:
parent
d181027225
commit
ea502c8665
@ -660,21 +660,15 @@ pub fn insert_char_prompt(prompt: &mut Prompt, c: char) {
|
||||
|
||||
// Undo / Redo
|
||||
|
||||
pub fn undo(cx: &mut Context) {
|
||||
if let Some(revert) = cx.view.doc.history.undo() {
|
||||
cx.view.doc.version += 1;
|
||||
cx.view.doc.apply(&revert);
|
||||
// TODO: undo/redo needs to avoid storing in self.changes/self.old_state
|
||||
}
|
||||
// TODO: each command could simply return a Option<transaction>, then the higher level handles
|
||||
// storing it?
|
||||
|
||||
// TODO: each command could simply return a Option<transaction>, then the higher level handles storing it?
|
||||
pub fn undo(cx: &mut Context) {
|
||||
cx.view.doc.undo();
|
||||
}
|
||||
|
||||
pub fn redo(cx: &mut Context) {
|
||||
if let Some(transaction) = cx.view.doc.history.redo() {
|
||||
cx.view.doc.version += 1;
|
||||
cx.view.doc.apply(&transaction);
|
||||
}
|
||||
cx.view.doc.redo();
|
||||
}
|
||||
|
||||
// Yank / Paste
|
||||
|
@ -185,6 +185,50 @@ pub fn apply(&mut self, transaction: &Transaction) -> bool {
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user