From 24b3e148ee203d60ab2df80a51f84469099fa4c3 Mon Sep 17 00:00:00 2001 From: zensayyy <99101223+zensayyy@users.noreply.github.com> Date: Sat, 1 Oct 2022 16:32:09 +0200 Subject: [PATCH] Ensure cursor in view after format (#4047) Co-authored-by: Michael Davis --- helix-term/src/commands.rs | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs index ce210830453bb..1c14565d174aa 100644 --- a/helix-term/src/commands.rs +++ b/helix-term/src/commands.rs @@ -2511,18 +2511,23 @@ async fn make_format_callback( ) -> anyhow::Result { let format = format.await?; let call: job::Callback = Box::new(move |editor, _compositor| { - let view_id = view!(editor).id; - if let Some(doc) = editor.document_mut(doc_id) { - if doc.version() == doc_version { - doc.apply(&format, view_id); - doc.append_changes_to_history(view_id); - doc.detect_indent_and_line_ending(); - if let Modified::SetUnmodified = modified { - doc.reset_modified(); - } - } else { - log::info!("discarded formatting changes because the document changed"); + if !editor.documents.contains_key(&doc_id) { + return; + } + + let scrolloff = editor.config().scrolloff; + let doc = doc_mut!(editor, &doc_id); + let view = view_mut!(editor); + if doc.version() == doc_version { + doc.apply(&format, view.id); + doc.append_changes_to_history(view.id); + doc.detect_indent_and_line_ending(); + view.ensure_cursor_in_view(doc, scrolloff); + if let Modified::SetUnmodified = modified { + doc.reset_modified(); } + } else { + log::info!("discarded formatting changes because the document changed"); } }); Ok(call)