From 07c69c1e742caa8139ee115f9027ab3ef13b15df Mon Sep 17 00:00:00 2001 From: Nik Revenco <154856872+NikitaRevenco@users.noreply.github.com> Date: Mon, 24 Mar 2025 04:00:02 +0000 Subject: [PATCH] fix: update blame when editing config --- helix-term/src/application.rs | 6 ++++++ helix-term/src/events.rs | 3 ++- helix-term/src/handlers/blame.rs | 24 +++++++++++++++++++++++- helix-view/src/events.rs | 7 ++++++- 4 files changed, 37 insertions(+), 3 deletions(-) diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs index 3bc324395..b97cb29e4 100644 --- a/helix-term/src/application.rs +++ b/helix-term/src/application.rs @@ -11,6 +11,7 @@ use helix_view::{ align_view, document::{DocumentOpenError, DocumentSavedEventResult}, editor::{ConfigEvent, EditorEvent}, + events::EditorConfigDidChange, graphics::Rect, theme, tree::Layout, @@ -364,6 +365,11 @@ impl Application { // the Application can apply it. ConfigEvent::Update(editor_config) => { let mut app_config = (*self.config.load().clone()).clone(); + helix_event::dispatch(EditorConfigDidChange { + old_config: &app_config.editor, + new_config: &editor_config, + editor: &mut self.editor, + }); app_config.editor = *editor_config; if let Err(err) = self.terminal.reconfigure(app_config.editor.clone().into()) { self.editor.set_error(err.to_string()); diff --git a/helix-term/src/events.rs b/helix-term/src/events.rs index 80f045cd7..4e1161d14 100644 --- a/helix-term/src/events.rs +++ b/helix-term/src/events.rs @@ -2,7 +2,7 @@ use helix_event::{events, register_event}; use helix_view::document::Mode; use helix_view::events::{ DiagnosticsDidChange, DocumentDidChange, DocumentDidClose, DocumentDidOpen, DocumentFocusLost, - LanguageServerExited, LanguageServerInitialized, SelectionDidChange, + EditorConfigDidChange, LanguageServerExited, LanguageServerInitialized, SelectionDidChange, }; use crate::commands; @@ -20,6 +20,7 @@ pub fn register() { register_event::(); register_event::(); register_event::(); + register_event::(); register_event::(); register_event::(); register_event::(); diff --git a/helix-term/src/handlers/blame.rs b/helix-term/src/handlers/blame.rs index 6a35859f8..93fdf4e3d 100644 --- a/helix-term/src/handlers/blame.rs +++ b/helix-term/src/handlers/blame.rs @@ -4,7 +4,7 @@ use helix_event::register_hook; use helix_vcs::FileBlame; use helix_view::{ editor::InlineBlameBehaviour, - events::DocumentDidOpen, + events::{DocumentDidOpen, EditorConfigDidChange}, handlers::{BlameEvent, Handlers}, DocumentId, }; @@ -91,4 +91,26 @@ pub(super) fn register_hooks(handlers: &Handlers) { } Ok(()) }); + let tx = handlers.blame.clone(); + register_hook!(move |event: &mut EditorConfigDidChange<'_>| { + if event.old_config.inline_blame.behaviour == InlineBlameBehaviour::Disabled + && event.new_config.inline_blame.behaviour != InlineBlameBehaviour::Disabled + { + // request blame for all documents, since any of them could have + // outdated blame + for doc in event.editor.documents() { + if let Some(path) = doc.path() { + helix_event::send_blocking( + &tx, + BlameEvent { + path: path.to_path_buf(), + doc_id: doc.id(), + line: None, + }, + ); + } + } + } + Ok(()) + }); } diff --git a/helix-view/src/events.rs b/helix-view/src/events.rs index 89969642b..58881d9ef 100644 --- a/helix-view/src/events.rs +++ b/helix-view/src/events.rs @@ -2,7 +2,7 @@ use helix_core::{ChangeSet, Rope}; use helix_event::events; use helix_lsp::LanguageServerId; -use crate::{Document, DocumentId, Editor, ViewId}; +use crate::{editor::Config, Document, DocumentId, Editor, ViewId}; events! { DocumentDidOpen<'a> { @@ -17,6 +17,11 @@ events! { changes: &'a ChangeSet, ghost_transaction: bool } + EditorConfigDidChange<'a> { + old_config: &'a Config, + new_config: &'a Config, + editor: &'a mut Editor + } DocumentDidClose<'a> { editor: &'a mut Editor, doc: Document