diff options
author | PeepNSheep | 2022-10-03 14:45:32 +0000 |
---|---|---|
committer | GitHub | 2022-10-03 14:45:32 +0000 |
commit | 77f33e7b20bb84c6506d745ce05ec6835eee6756 (patch) | |
tree | 198c0063a53ff7c919d12d2662438d9573dd4a15 | |
parent | 589d17c7583716b339875b72972aaffe0ae5efc1 (diff) |
Add configureable statusline mode names (#3311)
* Added 'long-mode' statusline element
* Added customizable statusline mode names
* Removed a string clone
* Added documentation
* Updated documentation, moved modenames to a seperate section
* Update configuration.md
* Documentation update
* Documentation update
* Documentation update
* Update configuration.md
* Update configuration.md
* Fixed merge error
* Update configuration.md
* Update configuration.md
-rw-r--r-- | book/src/configuration.md | 18 | ||||
-rw-r--r-- | helix-term/src/ui/statusline.rs | 8 | ||||
-rw-r--r-- | helix-view/src/editor.rs | 20 |
3 files changed, 40 insertions, 6 deletions
diff --git a/book/src/configuration.md b/book/src/configuration.md index fdabe768..d44855c7 100644 --- a/book/src/configuration.md +++ b/book/src/configuration.md @@ -68,13 +68,27 @@ left = ["mode", "spinner"] center = ["file-name"] right = ["diagnostics", "selections", "position", "file-encoding", "file-line-ending", "file-type"] separator = "│" +mode.normal = "NORMAL" +mode.insert = "INSERT" +mode.select = "SELECT" ``` +The `[editor.statusline]` key takes the following sub-keys: -The following elements can be configured: +| Key | Description | Default | +| --- | --- | --- | +| `left` | A list of elements aligned to the left of the statusline | `["mode", "spinner", "file-name"]` | +| `center` | A list of elements aligned to the middle of the statusline | `[]` | +| `right` | A list of elements aligned to the right of the statusline | `["diagnostics", "selections", "position", "file-encoding"]` | +| `separator` | The character used to separate elements in the statusline | `"│"` | +| `mode.normal` | The text shown in the `mode` element for normal mode | `"NOR"` | +| `mode.insert` | The text shown in the `mode` element for insert mode | `"INS"` | +| `mode.select` | The text shown in the `mode` element for select mode | `"SEL"` | + +The following statusline elements can be configured: | Key | Description | | ------ | ----------- | -| `mode` | The current editor mode (`NOR`/`INS`/`SEL`) | +| `mode` | The current editor mode (`mode.normal`/`mode.insert`/`mode.select`) | | `spinner` | A progress spinner indicating LSP activity | | `file-name` | The path/name of the opened file | | `file-encoding` | The encoding of the opened file if it differs from UTF-8 | diff --git a/helix-term/src/ui/statusline.rs b/helix-term/src/ui/statusline.rs index 365e1ca9..9bbb268f 100644 --- a/helix-term/src/ui/statusline.rs +++ b/helix-term/src/ui/statusline.rs @@ -154,16 +154,16 @@ where F: Fn(&mut RenderContext, String, Option<Style>) + Copy, { let visible = context.focused; - + let modenames = &context.editor.config().statusline.mode; write( context, format!( " {} ", if visible { match context.editor.mode() { - Mode::Insert => "INS", - Mode::Select => "SEL", - Mode::Normal => "NOR", + Mode::Insert => &modenames.insert, + Mode::Select => &modenames.select, + Mode::Normal => &modenames.normal, } } else { // If not focused, explicitly leave an empty space instead of returning None. diff --git a/helix-view/src/editor.rs b/helix-view/src/editor.rs index e804a864..70c49872 100644 --- a/helix-view/src/editor.rs +++ b/helix-view/src/editor.rs @@ -260,6 +260,7 @@ pub struct StatusLineConfig { pub center: Vec<StatusLineElement>, pub right: Vec<StatusLineElement>, pub separator: String, + pub mode: ModeConfig, } impl Default for StatusLineConfig { @@ -271,6 +272,25 @@ impl Default for StatusLineConfig { center: vec![], right: vec![E::Diagnostics, E::Selections, E::Position, E::FileEncoding], separator: String::from("│"), + mode: ModeConfig::default(), + } + } +} + +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +#[serde(rename_all = "kebab-case", default, deny_unknown_fields)] +pub struct ModeConfig { + pub normal: String, + pub insert: String, + pub select: String, +} + +impl Default for ModeConfig { + fn default() -> Self { + Self { + normal: String::from("NOR"), + insert: String::from("INS"), + select: String::from("SEL"), } } } |