mirror of https://github.com/helix-editor/helix
Switch to `tabpad` configuration option (#3458)
Virtual whitespace tabs are created from the `tab` character padded with `tabpad` up to the tab width.pull/3497/head
parent
e61c0b461c
commit
ed74e6d5d4
|
@ -192,7 +192,7 @@ Options for rendering whitespace with visible characters. Use `:set whitespace.r
|
||||||
| Key | Description | Default |
|
| Key | Description | Default |
|
||||||
|-----|-------------|---------|
|
|-----|-------------|---------|
|
||||||
| `render` | Whether to render whitespace. May either be `"all"` or `"none"`, or a table with sub-keys `space`, `tab`, and `newline`. | `"none"` |
|
| `render` | Whether to render whitespace. May either be `"all"` or `"none"`, or a table with sub-keys `space`, `tab`, and `newline`. | `"none"` |
|
||||||
| `characters` | Literal characters to use when rendering whitespace. Sub-keys may be any of `tab`, `space`, `nbsp` or `newline` | See example below |
|
| `characters` | Literal characters to use when rendering whitespace. Sub-keys may be any of `tab`, `space`, `nbsp`, `newline` or `tabpad` | See example below |
|
||||||
|
|
||||||
Example
|
Example
|
||||||
|
|
||||||
|
@ -210,6 +210,7 @@ space = "·"
|
||||||
nbsp = "⍽"
|
nbsp = "⍽"
|
||||||
tab = "→"
|
tab = "→"
|
||||||
newline = "⏎"
|
newline = "⏎"
|
||||||
|
tabpad = "·" # Tabs will look like "→···" (depending on tab width)
|
||||||
```
|
```
|
||||||
|
|
||||||
### `[editor.indent-guides]` Section
|
### `[editor.indent-guides]` Section
|
||||||
|
|
|
@ -390,19 +390,23 @@ impl EditorView {
|
||||||
// of times than it is to always call Rope::slice/get_slice (it will internally always hit RSEnum::Light).
|
// of times than it is to always call Rope::slice/get_slice (it will internally always hit RSEnum::Light).
|
||||||
let text = doc.text().slice(..);
|
let text = doc.text().slice(..);
|
||||||
|
|
||||||
|
let characters = &whitespace.characters;
|
||||||
|
|
||||||
let mut spans = Vec::new();
|
let mut spans = Vec::new();
|
||||||
let mut visual_x = 0u16;
|
let mut visual_x = 0u16;
|
||||||
let mut line = 0u16;
|
let mut line = 0u16;
|
||||||
let tab_width = doc.tab_width();
|
let tab_width = doc.tab_width();
|
||||||
let tab = if whitespace.render.tab() == WhitespaceRenderValue::All {
|
let tab = if whitespace.render.tab() == WhitespaceRenderValue::All {
|
||||||
(1..tab_width).fold(whitespace.characters.tab.to_string(), |s, _| s + " ")
|
std::iter::once(characters.tab)
|
||||||
|
.chain(std::iter::repeat(characters.tabpad).take(tab_width - 1))
|
||||||
|
.collect()
|
||||||
} else {
|
} else {
|
||||||
" ".repeat(tab_width)
|
" ".repeat(tab_width)
|
||||||
};
|
};
|
||||||
let space = whitespace.characters.space.to_string();
|
let space = characters.space.to_string();
|
||||||
let nbsp = whitespace.characters.nbsp.to_string();
|
let nbsp = characters.nbsp.to_string();
|
||||||
let newline = if whitespace.render.newline() == WhitespaceRenderValue::All {
|
let newline = if whitespace.render.newline() == WhitespaceRenderValue::All {
|
||||||
whitespace.characters.newline.to_string()
|
characters.newline.to_string()
|
||||||
} else {
|
} else {
|
||||||
" ".to_string()
|
" ".to_string()
|
||||||
};
|
};
|
||||||
|
|
|
@ -438,6 +438,7 @@ pub struct WhitespaceCharacters {
|
||||||
pub space: char,
|
pub space: char,
|
||||||
pub nbsp: char,
|
pub nbsp: char,
|
||||||
pub tab: char,
|
pub tab: char,
|
||||||
|
pub tabpad: char,
|
||||||
pub newline: char,
|
pub newline: char,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -448,6 +449,7 @@ impl Default for WhitespaceCharacters {
|
||||||
nbsp: '⍽', // U+237D
|
nbsp: '⍽', // U+237D
|
||||||
tab: '→', // U+2192
|
tab: '→', // U+2192
|
||||||
newline: '⏎', // U+23CE
|
newline: '⏎', // U+23CE
|
||||||
|
tabpad: ' ',
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue