Fix earlier/later missing changeset update (#1069)

Fix #1059
This commit is contained in:
Ivan Tham 2021-11-11 21:32:44 +08:00 committed by GitHub
parent d131a9dd0e
commit 9d591427be
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 28 additions and 6 deletions

View file

@ -1845,7 +1845,10 @@ mod cmd {
.map_err(|s| anyhow!(s))?; .map_err(|s| anyhow!(s))?;
let (view, doc) = current!(cx.editor); let (view, doc) = current!(cx.editor);
doc.earlier(view.id, uk); let success = doc.earlier(view.id, uk);
if !success {
cx.editor.set_status("Already at oldest change".to_owned());
}
Ok(()) Ok(())
} }
@ -1860,7 +1863,10 @@ mod cmd {
.parse::<helix_core::history::UndoKind>() .parse::<helix_core::history::UndoKind>()
.map_err(|s| anyhow!(s))?; .map_err(|s| anyhow!(s))?;
let (view, doc) = current!(cx.editor); let (view, doc) = current!(cx.editor);
doc.later(view.id, uk); let success = doc.later(view.id, uk);
if !success {
cx.editor.set_status("Already at newest change".to_owned());
}
Ok(()) Ok(())
} }

View file

@ -751,19 +751,35 @@ impl Document {
} }
/// Undo modifications to the [`Document`] according to `uk`. /// Undo modifications to the [`Document`] according to `uk`.
pub fn earlier(&mut self, view_id: ViewId, uk: helix_core::history::UndoKind) { pub fn earlier(&mut self, view_id: ViewId, uk: helix_core::history::UndoKind) -> bool {
let txns = self.history.get_mut().earlier(uk); let txns = self.history.get_mut().earlier(uk);
let mut success = false;
for txn in txns { for txn in txns {
self.apply_impl(&txn, view_id); if self.apply_impl(&txn, view_id) {
success = true;
}
} }
if success {
// reset changeset to fix len
self.changes = ChangeSet::new(self.text());
}
success
} }
/// Redo modifications to the [`Document`] according to `uk`. /// Redo modifications to the [`Document`] according to `uk`.
pub fn later(&mut self, view_id: ViewId, uk: helix_core::history::UndoKind) { pub fn later(&mut self, view_id: ViewId, uk: helix_core::history::UndoKind) -> bool {
let txns = self.history.get_mut().later(uk); let txns = self.history.get_mut().later(uk);
let mut success = false;
for txn in txns { for txn in txns {
self.apply_impl(&txn, view_id); if self.apply_impl(&txn, view_id) {
success = true;
}
} }
if success {
// reset changeset to fix len
self.changes = ChangeSet::new(self.text());
}
success
} }
/// Commit pending changes to history /// Commit pending changes to history