From 096ed0ced449ff0355fed6220c762c4f7f28ec25 Mon Sep 17 00:00:00 2001 From: Dimitri Sabadie Date: Tue, 25 Apr 2023 13:14:06 -0400 Subject: [PATCH] Add extend_to_first_nonwhitespace (#6837) Closes #6836 --- helix-term/src/commands.rs | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs index 95310c1fe..5a75553cd 100644 --- a/helix-term/src/commands.rs +++ b/helix-term/src/commands.rs @@ -347,6 +347,7 @@ impl MappableCommand { goto_first_nonwhitespace, "Goto first non-blank in line", trim_selections, "Trim whitespace from selections", extend_to_line_start, "Extend to line start", + extend_to_first_nonwhitespace, "Extend to first non-blank in line", extend_to_line_end, "Extend to line end", extend_to_line_end_newline, "Extend to line end", signature_help, "Show signature help", @@ -839,6 +840,24 @@ fn kill_to_line_end(cx: &mut Context) { fn goto_first_nonwhitespace(cx: &mut Context) { let (view, doc) = current!(cx.editor); + + goto_first_nonwhitespace_impl( + view, + doc, + if cx.editor.mode == Mode::Select { + Movement::Extend + } else { + Movement::Move + }, + ) +} + +fn extend_to_first_nonwhitespace(cx: &mut Context) { + let (view, doc) = current!(cx.editor); + goto_first_nonwhitespace_impl(view, doc, Movement::Extend) +} + +fn goto_first_nonwhitespace_impl(view: &mut View, doc: &mut Document, movement: Movement) { let text = doc.text().slice(..); let selection = doc.selection(view.id).clone().transform(|range| { @@ -846,7 +865,7 @@ fn goto_first_nonwhitespace(cx: &mut Context) { if let Some(pos) = find_first_non_whitespace_char(text.line(line)) { let pos = pos + text.line_to_char(line); - range.put_cursor(text, pos, cx.editor.mode == Mode::Select) + range.put_cursor(text, pos, movement == Movement::Extend) } else { range }