add configurable / theme-able statusline separator string (#3175)

* add configurable separator element to statusline

* themable separator

* clippy fixes

* changed default separator to │

* doc updates
pull/3212/head
Seth Bromberger 2 years ago committed by GitHub
parent 61856f1d64
commit 846a6b65c3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -63,6 +63,7 @@ Statusline elements can be defined as follows:
left = ["mode", "spinner"] left = ["mode", "spinner"]
center = ["file-name"] center = ["file-name"]
right = ["diagnostics", "selections", "position", "file-encoding", "file-line-ending", "file-type"] right = ["diagnostics", "selections", "position", "file-encoding", "file-line-ending", "file-type"]
separator = "│"
``` ```
The following elements can be configured: The following elements can be configured:
@ -79,6 +80,7 @@ The following elements can be configured:
| `selections` | The number of active selections | | `selections` | The number of active selections |
| `position` | The cursor position | | `position` | The cursor position |
| `position-percentage` | The cursor position as a percentage of the total number of lines | | `position-percentage` | The cursor position as a percentage of the total number of lines |
| `separator` | The string defined in `editor.statusline.separator` (defaults to `"│"`) |
| `spacer` | Inserts a space between elements (multiple/contiguous spacers may be specified) | | `spacer` | Inserts a space between elements (multiple/contiguous spacers may be specified) |
### `[editor.lsp]` Section ### `[editor.lsp]` Section

@ -224,6 +224,7 @@ These scopes are used for theming the editor interface.
| `ui.statusline.normal` | Statusline mode during normal mode ([only if `editor.color-modes` is enabled][editor-section]) | | `ui.statusline.normal` | Statusline mode during normal mode ([only if `editor.color-modes` is enabled][editor-section]) |
| `ui.statusline.insert` | Statusline mode during insert mode ([only if `editor.color-modes` is enabled][editor-section]) | | `ui.statusline.insert` | Statusline mode during insert mode ([only if `editor.color-modes` is enabled][editor-section]) |
| `ui.statusline.select` | Statusline mode during select mode ([only if `editor.color-modes` is enabled][editor-section]) | | `ui.statusline.select` | Statusline mode during select mode ([only if `editor.color-modes` is enabled][editor-section]) |
| `ui.statusline.separator` | Separator character in statusline |
| `ui.popup` | Documentation popups (e.g space-k) | | `ui.popup` | Documentation popups (e.g space-k) |
| `ui.popup.info` | Prompt for multiple key options | | `ui.popup.info` | Prompt for multiple key options |
| `ui.window` | Border lines separating splits | | `ui.window` | Border lines separating splits |

@ -144,6 +144,7 @@ where
helix_view::editor::StatusLineElement::Selections => render_selections, helix_view::editor::StatusLineElement::Selections => render_selections,
helix_view::editor::StatusLineElement::Position => render_position, helix_view::editor::StatusLineElement::Position => render_position,
helix_view::editor::StatusLineElement::PositionPercentage => render_position_percentage, helix_view::editor::StatusLineElement::PositionPercentage => render_position_percentage,
helix_view::editor::StatusLineElement::Separator => render_separator,
helix_view::editor::StatusLineElement::Spacer => render_spacer, helix_view::editor::StatusLineElement::Spacer => render_spacer,
} }
} }
@ -353,6 +354,19 @@ where
write(context, title, None); write(context, title, None);
} }
fn render_separator<F>(context: &mut RenderContext, write: F)
where
F: Fn(&mut RenderContext, String, Option<Style>) + Copy,
{
let sep = &context.editor.config().statusline.separator;
write(
context,
sep.to_string(),
Some(context.editor.theme.get("ui.statusline.separator")),
);
}
fn render_spacer<F>(context: &mut RenderContext, write: F) fn render_spacer<F>(context: &mut RenderContext, write: F)
where where
F: Fn(&mut RenderContext, String, Option<Style>) + Copy, F: Fn(&mut RenderContext, String, Option<Style>) + Copy,

@ -203,6 +203,7 @@ pub struct StatusLineConfig {
pub left: Vec<StatusLineElement>, pub left: Vec<StatusLineElement>,
pub center: Vec<StatusLineElement>, pub center: Vec<StatusLineElement>,
pub right: Vec<StatusLineElement>, pub right: Vec<StatusLineElement>,
pub separator: String,
} }
impl Default for StatusLineConfig { impl Default for StatusLineConfig {
@ -213,6 +214,7 @@ impl Default for StatusLineConfig {
left: vec![E::Mode, E::Spinner, E::FileName], left: vec![E::Mode, E::Spinner, E::FileName],
center: vec![], center: vec![],
right: vec![E::Diagnostics, E::Selections, E::Position, E::FileEncoding], right: vec![E::Diagnostics, E::Selections, E::Position, E::FileEncoding],
separator: String::from("│"),
} }
} }
} }
@ -247,8 +249,12 @@ pub enum StatusLineElement {
/// The cursor position /// The cursor position
Position, Position,
/// The separator string
Separator,
/// The cursor position as a percent of the total file /// The cursor position as a percent of the total file
PositionPercentage, PositionPercentage,
/// A single space /// A single space
Spacer, Spacer,
} }

Loading…
Cancel
Save