Skip to content

Commit

Permalink
Fix earlier/later missing changeset update (#1069)
Browse files Browse the repository at this point in the history
Fix #1059
  • Loading branch information
pickfire committed Nov 11, 2021
1 parent d131a9d commit 9d59142
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 6 deletions.
10 changes: 8 additions & 2 deletions helix-term/src/commands.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1845,7 +1845,10 @@ mod cmd {
.map_err(|s| anyhow!(s))?;

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(())
}
Expand All @@ -1860,7 +1863,10 @@ mod cmd {
.parse::<helix_core::history::UndoKind>()
.map_err(|s| anyhow!(s))?;
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(())
}
Expand Down
24 changes: 20 additions & 4 deletions helix-view/src/document.rs
Original file line number Diff line number Diff line change
Expand Up @@ -751,19 +751,35 @@ impl Document {
}

/// 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 mut success = false;
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`.
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 mut success = false;
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
Expand Down

0 comments on commit 9d59142

Please sign in to comment.