From 358ea6a37ccc3ee98f3680c9b4ee0dd0aa0781d2 Mon Sep 17 00:00:00 2001 From: Nathan Vegdahl Date: Sun, 13 Jun 2021 18:09:22 -0700 Subject: [PATCH] Implement command to change the indent-style setting of a document. --- helix-term/src/commands.rs | 31 ++++++++++++++++++++++++++++++- helix-term/src/ui/editor.rs | 2 +- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs index b5f375631..94003c2e1 100644 --- a/helix-term/src/commands.rs +++ b/helix-term/src/commands.rs @@ -9,7 +9,7 @@ use helix_core::{ }; use helix_view::{ - document::Mode, + document::{IndentStyle, Mode}, view::{View, PADDING}, Document, DocumentId, Editor, ViewId, }; @@ -979,6 +979,28 @@ mod cmd { doc.format(view.id) } + fn set_indent_style(editor: &mut Editor, args: &[&str], event: PromptEvent) { + use IndentStyle::*; + + let style = match args.get(0) { + Some(arg) if "tabs".starts_with(&arg.to_lowercase()) => Some(Tabs), + Some(arg) if arg.len() == 1 => { + let ch = arg.chars().next().unwrap(); + if ('1'..='8').contains(&ch) { + Some(Spaces(ch.to_digit(10).unwrap() as u8)) + } else { + None + } + } + _ => None, + }; + + if let Some(s) = style { + let (_, doc) = editor.current(); + doc.indent_style = s; + } + } + fn earlier(editor: &mut Editor, args: &[&str], event: PromptEvent) { let uk = match args.join(" ").parse::() { Ok(uk) => uk, @@ -1143,6 +1165,13 @@ mod cmd { fun: format, completer: None, }, + Command { + name: "indent_style", + alias: None, + doc: "Set the indentation style for editing. ('t' for tabs or 1-8 for number of spaces.)", + fun: set_indent_style, + completer: None, + }, Command { name: "earlier", alias: Some("ear"), diff --git a/helix-term/src/ui/editor.rs b/helix-term/src/ui/editor.rs index 65b114a64..5db68751c 100644 --- a/helix-term/src/ui/editor.rs +++ b/helix-term/src/ui/editor.rs @@ -501,7 +501,7 @@ impl EditorView { // Compute the individual info strings. let diag_count = format!("{}", doc.diagnostics().len()); let indent_info = match doc.indent_style { - IndentStyle::Tabs => "tab", + IndentStyle::Tabs => "tabs", IndentStyle::Spaces(1) => "spaces:1", IndentStyle::Spaces(2) => "spaces:2", IndentStyle::Spaces(3) => "spaces:3",