summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Tham2021-11-11 13:32:44 +0000
committerGitHub2021-11-11 13:32:44 +0000
commit9d591427be900b7a43fc7e13dd86f31199e8c00e (patch)
tree2348bfed1cf794d35bed04fa3156557d5838f021
parentd131a9dd0efc5ff271f8b78cd65a8dc30c193af4 (diff)
Fix earlier/later missing changeset update (#1069)
Fix #1059
-rw-r--r--helix-term/src/commands.rs10
-rw-r--r--helix-view/src/document.rs24
2 files changed, 28 insertions, 6 deletions
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index 23b385eb..738621b0 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -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(())
}
@@ -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(())
}
diff --git a/helix-view/src/document.rs b/helix-view/src/document.rs
index 351ad05a..80f6a740 100644
--- a/helix-view/src/document.rs
+++ b/helix-view/src/document.rs
@@ -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