From 66858971495dc05634cd1cb2ad58bd59c8924d38 Mon Sep 17 00:00:00 2001 From: kirawi <67773714+kirawi@users.noreply.github.com> Date: Thu, 15 Feb 2024 21:05:34 -0500 Subject: [PATCH] yank diagnostic command --- helix-term/src/commands.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs index d44f477b7376..e8bb7e107ead 100644 --- a/helix-term/src/commands.rs +++ b/helix-term/src/commands.rs @@ -388,6 +388,7 @@ impl MappableCommand { yank_main_selection_to_clipboard, "Yank main selection to clipboard", yank_joined_to_primary_clipboard, "Join and yank selections to primary clipboard", yank_main_selection_to_primary_clipboard, "Yank main selection to primary clipboard", + yank_diagnostic, "Yank diagnostic(s) under primary cursor to register, or clipboard by default", replace_with_yanked, "Replace with yanked text", replace_selections_with_clipboard, "Replace selections by clipboard content", replace_selections_with_primary_clipboard, "Replace selections by primary clipboard", @@ -5519,6 +5520,24 @@ fn increment_impl(cx: &mut Context, increment_direction: IncrementDirection) { } } +fn yank_diagnostic(cx: &mut Context) { + let (view, doc) = current_ref!(cx.editor); + let primary = doc.selection(view.id).primary(); + + let diag = doc + .diagnostics() + .iter() + .filter(|d| primary.overlaps(&helix_core::Range::new(d.range.start, d.range.end))) + .map(|d| d.message.clone()); + let reg = cx.register.unwrap_or('+'); + match cx.editor.registers.write(reg, diag.collect()) { + Ok(_) => cx + .editor + .set_status(format!("Yanked diagnostic(s) to register {reg}")), + Err(err) => cx.editor.set_error(err.to_string()), + } +} + fn record_macro(cx: &mut Context) { if let Some((reg, mut keys)) = cx.editor.macro_recording.take() { // Remove the keypress which ends the recording