mirror of
https://github.com/helix-editor/helix.git
synced 2025-01-19 13:37:06 +04:00
Call View::apply within Document::append_changes_to_history
This commit is contained in:
parent
2709ce3332
commit
9a9e462183
@ -2564,7 +2564,7 @@ async fn make_format_callback(
|
|||||||
if let Ok(format) = format {
|
if let Ok(format) = format {
|
||||||
if doc.version() == doc_version {
|
if doc.version() == doc_version {
|
||||||
apply_transaction(&format, doc, view);
|
apply_transaction(&format, doc, view);
|
||||||
doc.append_changes_to_history(view.id);
|
doc.append_changes_to_history(view);
|
||||||
doc.detect_indent_and_line_ending();
|
doc.detect_indent_and_line_ending();
|
||||||
view.ensure_cursor_in_view(doc, scrolloff);
|
view.ensure_cursor_in_view(doc, scrolloff);
|
||||||
} else {
|
} else {
|
||||||
@ -3365,7 +3365,7 @@ fn later(cx: &mut Context) {
|
|||||||
|
|
||||||
fn commit_undo_checkpoint(cx: &mut Context) {
|
fn commit_undo_checkpoint(cx: &mut Context) {
|
||||||
let (view, doc) = current!(cx.editor);
|
let (view, doc) = current!(cx.editor);
|
||||||
doc.append_changes_to_history(view.id);
|
doc.append_changes_to_history(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Yank / Paste
|
// Yank / Paste
|
||||||
@ -3677,7 +3677,7 @@ fn replace_selections_with_clipboard_impl(
|
|||||||
});
|
});
|
||||||
|
|
||||||
apply_transaction(&transaction, doc, view);
|
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")),
|
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())
|
let transaction = Transaction::change(doc.text(), changes.into_iter())
|
||||||
.with_selection(Selection::new(ranges, selection.primary_index()));
|
.with_selection(Selection::new(ranges, selection.primary_index()));
|
||||||
apply_transaction(&transaction, doc, view);
|
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
|
// after replace cursor may be out of bounds, do this to
|
||||||
|
@ -760,8 +760,9 @@ pub fn apply_workspace_edit(
|
|||||||
text_edits,
|
text_edits,
|
||||||
offset_encoding,
|
offset_encoding,
|
||||||
);
|
);
|
||||||
apply_transaction(&transaction, doc, view_mut!(editor, view_id));
|
let view = view_mut!(editor, view_id);
|
||||||
doc.append_changes_to_history(view_id);
|
apply_transaction(&transaction, doc, view);
|
||||||
|
doc.append_changes_to_history(view);
|
||||||
};
|
};
|
||||||
|
|
||||||
if let Some(ref changes) = workspace_edit.changes {
|
if let Some(ref changes) = workspace_edit.changes {
|
||||||
|
@ -464,7 +464,7 @@ fn set_line_ending(
|
|||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
apply_transaction(&transaction, doc, view);
|
apply_transaction(&transaction, doc, view);
|
||||||
doc.append_changes_to_history(view.id);
|
doc.append_changes_to_history(view);
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@ -909,7 +909,7 @@ fn replace_selections_with_clipboard_impl(
|
|||||||
});
|
});
|
||||||
|
|
||||||
apply_transaction(&transaction, doc, view);
|
apply_transaction(&transaction, doc, view);
|
||||||
doc.append_changes_to_history(view.id);
|
doc.append_changes_to_history(view);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
Err(e) => Err(e.context("Couldn't get system clipboard contents")),
|
Err(e) => Err(e.context("Couldn't get system clipboard contents")),
|
||||||
@ -1573,7 +1573,7 @@ fn sort_impl(
|
|||||||
);
|
);
|
||||||
|
|
||||||
apply_transaction(&transaction, doc, view);
|
apply_transaction(&transaction, doc, view);
|
||||||
doc.append_changes_to_history(view.id);
|
doc.append_changes_to_history(view);
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@ -1617,7 +1617,7 @@ fn reflow(
|
|||||||
});
|
});
|
||||||
|
|
||||||
apply_transaction(&transaction, doc, view);
|
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);
|
view.ensure_cursor_in_view(doc, scrolloff);
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -1319,7 +1319,7 @@ fn handle_event(
|
|||||||
// Store a history state if not in insert mode. Otherwise wait till we exit insert
|
// 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.
|
// to include any edits to the paste in the history state.
|
||||||
if mode != Mode::Insert {
|
if mode != Mode::Insert {
|
||||||
doc.append_changes_to_history(view.id);
|
doc.append_changes_to_history(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
EventResult::Consumed(None)
|
EventResult::Consumed(None)
|
||||||
@ -1418,7 +1418,7 @@ fn handle_event(
|
|||||||
// Store a history state if not in insert mode. This also takes care of
|
// Store a history state if not in insert mode. This also takes care of
|
||||||
// committing changes when leaving insert mode.
|
// committing changes when leaving insert mode.
|
||||||
if mode != Mode::Insert {
|
if mode != Mode::Insert {
|
||||||
doc.append_changes_to_history(view.id);
|
doc.append_changes_to_history(view);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -641,7 +641,7 @@ pub fn reload(&mut self, view: &mut View) -> Result<(), Error> {
|
|||||||
// of the encoding.
|
// of the encoding.
|
||||||
let transaction = helix_core::diff::compare_ropes(self.text(), &rope);
|
let transaction = helix_core::diff::compare_ropes(self.text(), &rope);
|
||||||
apply_transaction(&transaction, self, view);
|
apply_transaction(&transaction, self, view);
|
||||||
self.append_changes_to_history(view.id);
|
self.append_changes_to_history(view);
|
||||||
self.reset_modified();
|
self.reset_modified();
|
||||||
|
|
||||||
self.detect_indent_and_line_ending();
|
self.detect_indent_and_line_ending();
|
||||||
@ -928,7 +928,7 @@ pub fn later(&mut self, view: &mut View, uk: UndoKind) -> bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Commit pending changes to history
|
/// 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() {
|
if self.changes.is_empty() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -938,7 +938,7 @@ pub fn append_changes_to_history(&mut self, view_id: ViewId) {
|
|||||||
// Instead of doing this messy merge we could always commit, and based on transaction
|
// 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.
|
// annotations either add a new layer or compose into the previous one.
|
||||||
let transaction =
|
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..
|
// 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");
|
let old_state = self.old_state.take().expect("no old_state available");
|
||||||
@ -946,6 +946,9 @@ pub fn append_changes_to_history(&mut self, view_id: ViewId) {
|
|||||||
let mut history = self.history.take();
|
let mut history = self.history.take();
|
||||||
history.commit_revision(&transaction, &old_state);
|
history.commit_revision(&transaction, &old_state);
|
||||||
self.history.set(history);
|
self.history.set(history);
|
||||||
|
|
||||||
|
// Update jumplist entries in the view.
|
||||||
|
view.apply(&transaction, self);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn id(&self) -> DocumentId {
|
pub fn id(&self) -> DocumentId {
|
||||||
|
Loading…
Reference in New Issue
Block a user