Switch to `tabpad` configuration option (#3458)

Virtual whitespace tabs are created from the `tab` character padded
with `tabpad` up to  the tab width.
imgbot
A-Walrus 2 years ago committed by GitHub
parent e61c0b461c
commit ed74e6d5d4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -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…
Cancel
Save