aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--book/src/configuration.md17
-rw-r--r--helix-term/src/ui/editor.rs20
-rw-r--r--helix-term/src/ui/picker.rs2
-rw-r--r--helix-view/src/editor.rs19
4 files changed, 49 insertions, 9 deletions
diff --git a/book/src/configuration.md b/book/src/configuration.md
index 4d7e440a..3fa9b307 100644
--- a/book/src/configuration.md
+++ b/book/src/configuration.md
@@ -167,3 +167,20 @@ nbsp = "⍽"
tab = "→"
newline = "⏎"
```
+
+### `[editor.indent-guides]` Section
+
+Options for rendering vertical indent guides.
+
+| Key | Description | Default |
+| --- | --- | --- |
+| `render` | Whether to render indent guides. | `false` |
+| `character` | Literal character to use for rendering the indent guide | `│` |
+
+Example:
+
+```toml
+[editor.indent-guides]
+render = true
+character = "╎"
+```
diff --git a/helix-term/src/ui/editor.rs b/helix-term/src/ui/editor.rs
index 7455f625..ec25ce94 100644
--- a/helix-term/src/ui/editor.rs
+++ b/helix-term/src/ui/editor.rs
@@ -131,7 +131,7 @@ impl EditorView {
surface,
theme,
highlights,
- &editor.config().whitespace,
+ &editor.config(),
);
Self::render_gutter(editor, doc, view, view.area, surface, theme, is_focused);
Self::render_rulers(editor, doc, view, inner, surface, theme);
@@ -373,8 +373,9 @@ impl EditorView {
surface: &mut Surface,
theme: &Theme,
highlights: H,
- whitespace: &helix_view::editor::WhitespaceConfig,
+ config: &helix_view::editor::Config,
) {
+ let whitespace = &config.whitespace;
use helix_view::editor::WhitespaceRenderValue;
// It's slightly more efficient to produce a full RopeSlice from the Rope, then slice that a bunch
@@ -397,22 +398,25 @@ impl EditorView {
} else {
" ".to_string()
};
+ let indent_guide_char = config.indent_guides.character.to_string();
let text_style = theme.get("ui.text");
let whitespace_style = theme.get("ui.virtual.whitespace");
let mut is_in_indent_area = true;
let mut last_line_indent_level = 0;
- let indent_style = theme
- .try_get("ui.virtual.indent-guide")
- .unwrap_or_else(|| theme.get("comment"));
+ let indent_style = theme.get("ui.virtual.indent-guide");
let draw_indent_guides = |indent_level, line, surface: &mut Surface| {
+ if !config.indent_guides.render {
+ return;
+ }
+
for i in 0..(indent_level / tab_width as u16) {
surface.set_string(
viewport.x + (i * tab_width as u16) - offset.col as u16,
viewport.y + line,
- "│",
+ &indent_guide_char,
indent_style,
);
}
@@ -491,7 +495,7 @@ impl EditorView {
let grapheme = Cow::from(grapheme);
let is_whitespace;
- let (grapheme, width) = if grapheme == "\t" {
+ let (display_grapheme, width) = if grapheme == "\t" {
is_whitespace = true;
// make sure we display tab as appropriate amount of spaces
let visual_tab_width = tab_width - (visual_x as usize % tab_width);
@@ -518,7 +522,7 @@ impl EditorView {
surface.set_string(
viewport.x + visual_x - offset.col as u16,
viewport.y + line,
- grapheme,
+ display_grapheme,
if is_whitespace {
style.patch(whitespace_style)
} else {
diff --git a/helix-term/src/ui/picker.rs b/helix-term/src/ui/picker.rs
index 9ffe45c1..95ec8405 100644
--- a/helix-term/src/ui/picker.rs
+++ b/helix-term/src/ui/picker.rs
@@ -240,7 +240,7 @@ impl<T: 'static> Component for FilePicker<T> {
surface,
&cx.editor.theme,
highlights,
- &cx.editor.config().whitespace,
+ &cx.editor.config(),
);
// highlight the line
diff --git a/helix-view/src/editor.rs b/helix-view/src/editor.rs
index ac19def1..b9de57e1 100644
--- a/helix-view/src/editor.rs
+++ b/helix-view/src/editor.rs
@@ -156,6 +156,8 @@ pub struct Config {
pub rulers: Vec<u16>,
#[serde(default)]
pub whitespace: WhitespaceConfig,
+ /// Vertical indent width guides.
+ pub indent_guides: IndentGuidesConfig,
}
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
@@ -364,6 +366,22 @@ impl Default for WhitespaceCharacters {
}
}
+#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(default)]
+pub struct IndentGuidesConfig {
+ pub render: bool,
+ pub character: char,
+}
+
+impl Default for IndentGuidesConfig {
+ fn default() -> Self {
+ Self {
+ render: false,
+ character: '│',
+ }
+ }
+}
+
impl Default for Config {
fn default() -> Self {
Self {
@@ -391,6 +409,7 @@ impl Default for Config {
lsp: LspConfig::default(),
rulers: Vec::new(),
whitespace: WhitespaceConfig::default(),
+ indent_guides: IndentGuidesConfig::default(),
}
}
}