aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Davis2022-11-27 18:47:26 +0000
committerBlaž Hrastnik2022-11-29 16:15:20 +0000
commit9a9e462183cb60bff6450f17173e6b18eadbbfb2 (patch)
tree888a8211b6c13ba38e32d00a334eedb7d2a826f1
parent2709ce33324cf6d4612c61609f336cf5937b6cac (diff)
Call View::apply within Document::append_changes_to_history
-rw-r--r--helix-term/src/commands.rs8
-rw-r--r--helix-term/src/commands/lsp.rs5
-rw-r--r--helix-term/src/commands/typed.rs8
-rw-r--r--helix-term/src/ui/editor.rs4
-rw-r--r--helix-view/src/document.rs9
5 files changed, 19 insertions, 15 deletions
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index 0817ca73..a6f88362 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -2564,7 +2564,7 @@ async fn make_format_callback(
if let Ok(format) = format {
if doc.version() == doc_version {
apply_transaction(&format, doc, view);
- doc.append_changes_to_history(view.id);
+ doc.append_changes_to_history(view);
doc.detect_indent_and_line_ending();
view.ensure_cursor_in_view(doc, scrolloff);
} else {
@@ -3365,7 +3365,7 @@ fn later(cx: &mut Context) {
fn commit_undo_checkpoint(cx: &mut Context) {
let (view, doc) = current!(cx.editor);
- doc.append_changes_to_history(view.id);
+ doc.append_changes_to_history(view);
}
// Yank / Paste
@@ -3677,7 +3677,7 @@ fn replace_selections_with_clipboard_impl(
});
apply_transaction(&transaction, doc, view);
- doc.append_changes_to_history(view.id);
+ doc.append_changes_to_history(view);
}
Err(e) => return Err(e.context("Couldn't get system clipboard contents")),
}
@@ -4884,7 +4884,7 @@ fn shell(cx: &mut compositor::Context, cmd: &str, behavior: &ShellBehavior) {
let transaction = Transaction::change(doc.text(), changes.into_iter())
.with_selection(Selection::new(ranges, selection.primary_index()));
apply_transaction(&transaction, doc, view);
- doc.append_changes_to_history(view.id);
+ doc.append_changes_to_history(view);
}
// after replace cursor may be out of bounds, do this to
diff --git a/helix-term/src/commands/lsp.rs b/helix-term/src/commands/lsp.rs
index 8faf1d08..1f80de5f 100644
--- a/helix-term/src/commands/lsp.rs
+++ b/helix-term/src/commands/lsp.rs
@@ -760,8 +760,9 @@ pub fn apply_workspace_edit(
text_edits,
offset_encoding,
);
- apply_transaction(&transaction, doc, view_mut!(editor, view_id));
- doc.append_changes_to_history(view_id);
+ let view = view_mut!(editor, view_id);
+ apply_transaction(&transaction, doc, view);
+ doc.append_changes_to_history(view);
};
if let Some(ref changes) = workspace_edit.changes {
diff --git a/helix-term/src/commands/typed.rs b/helix-term/src/commands/typed.rs
index 89c310fa..2fa903a7 100644
--- a/helix-term/src/commands/typed.rs
+++ b/helix-term/src/commands/typed.rs
@@ -464,7 +464,7 @@ fn set_line_ending(
}),
);
apply_transaction(&transaction, doc, view);
- doc.append_changes_to_history(view.id);
+ doc.append_changes_to_history(view);
Ok(())
}
@@ -909,7 +909,7 @@ fn replace_selections_with_clipboard_impl(
});
apply_transaction(&transaction, doc, view);
- doc.append_changes_to_history(view.id);
+ doc.append_changes_to_history(view);
Ok(())
}
Err(e) => Err(e.context("Couldn't get system clipboard contents")),
@@ -1573,7 +1573,7 @@ fn sort_impl(
);
apply_transaction(&transaction, doc, view);
- doc.append_changes_to_history(view.id);
+ doc.append_changes_to_history(view);
Ok(())
}
@@ -1617,7 +1617,7 @@ fn reflow(
});
apply_transaction(&transaction, doc, view);
- doc.append_changes_to_history(view.id);
+ doc.append_changes_to_history(view);
view.ensure_cursor_in_view(doc, scrolloff);
Ok(())
diff --git a/helix-term/src/ui/editor.rs b/helix-term/src/ui/editor.rs
index 6c8ee2d9..7bda74d2 100644
--- a/helix-term/src/ui/editor.rs
+++ b/helix-term/src/ui/editor.rs
@@ -1319,7 +1319,7 @@ impl Component for EditorView {
// Store a history state if not in insert mode. Otherwise wait till we exit insert
// to include any edits to the paste in the history state.
if mode != Mode::Insert {
- doc.append_changes_to_history(view.id);
+ doc.append_changes_to_history(view);
}
EventResult::Consumed(None)
@@ -1418,7 +1418,7 @@ impl Component for EditorView {
// Store a history state if not in insert mode. This also takes care of
// committing changes when leaving insert mode.
if mode != Mode::Insert {
- doc.append_changes_to_history(view.id);
+ doc.append_changes_to_history(view);
}
}
diff --git a/helix-view/src/document.rs b/helix-view/src/document.rs
index 17503553..ad47f838 100644
--- a/helix-view/src/document.rs
+++ b/helix-view/src/document.rs
@@ -641,7 +641,7 @@ impl Document {
// of the encoding.
let transaction = helix_core::diff::compare_ropes(self.text(), &rope);
apply_transaction(&transaction, self, view);
- self.append_changes_to_history(view.id);
+ self.append_changes_to_history(view);
self.reset_modified();
self.detect_indent_and_line_ending();
@@ -928,7 +928,7 @@ impl Document {
}
/// Commit pending changes to history
- pub fn append_changes_to_history(&mut self, view_id: ViewId) {
+ pub fn append_changes_to_history(&mut self, view: &mut View) {
if self.changes.is_empty() {
return;
}
@@ -938,7 +938,7 @@ impl Document {
// Instead of doing this messy merge we could always commit, and based on transaction
// annotations either add a new layer or compose into the previous one.
let transaction =
- Transaction::from(changes).with_selection(self.selection(view_id).clone());
+ Transaction::from(changes).with_selection(self.selection(view.id).clone());
// HAXX: we need to reconstruct the state as it was before the changes..
let old_state = self.old_state.take().expect("no old_state available");
@@ -946,6 +946,9 @@ impl Document {
let mut history = self.history.take();
history.commit_revision(&transaction, &old_state);
self.history.set(history);
+
+ // Update jumplist entries in the view.
+ view.apply(&transaction, self);
}
pub fn id(&self) -> DocumentId {