mirror of https://github.com/helix-editor/helix
parent
a26943de4e
commit
8dc86beabd
|
@ -37,6 +37,7 @@ hidden = false
|
||||||
| `scroll-lines` | Number of lines to scroll per scroll wheel step. | `3` |
|
| `scroll-lines` | Number of lines to scroll per scroll wheel step. | `3` |
|
||||||
| `shell` | Shell to use when running external commands. | Unix: `["sh", "-c"]`<br/>Windows: `["cmd", "/C"]` |
|
| `shell` | Shell to use when running external commands. | Unix: `["sh", "-c"]`<br/>Windows: `["cmd", "/C"]` |
|
||||||
| `line-number` | Line number display: `absolute` simply shows each line's number, while `relative` shows the distance from the current line. When unfocused or in insert mode, `relative` will still show absolute line numbers. | `absolute` |
|
| `line-number` | Line number display: `absolute` simply shows each line's number, while `relative` shows the distance from the current line. When unfocused or in insert mode, `relative` will still show absolute line numbers. | `absolute` |
|
||||||
|
| `cursorline` | Highlight all lines with a cursor. | `false` |
|
||||||
| `gutters` | Gutters to display: Available are `diagnostics` and `line-numbers`, note that `diagnostics` also includes other features like breakpoints | `["diagnostics", "line-numbers"]` |
|
| `gutters` | Gutters to display: Available are `diagnostics` and `line-numbers`, note that `diagnostics` also includes other features like breakpoints | `["diagnostics", "line-numbers"]` |
|
||||||
| `auto-completion` | Enable automatic pop up of auto-completion. | `true` |
|
| `auto-completion` | Enable automatic pop up of auto-completion. | `true` |
|
||||||
| `auto-format` | Enable automatic formatting on save. | `true` |
|
| `auto-format` | Enable automatic formatting on save. | `true` |
|
||||||
|
|
|
@ -112,6 +112,10 @@ impl EditorView {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if editor.config().cursorline {
|
||||||
|
Self::highlight_cursorline(doc, view, surface, theme);
|
||||||
|
}
|
||||||
|
|
||||||
let highlights = Self::doc_syntax_highlights(doc, view.offset, inner.height, theme);
|
let highlights = Self::doc_syntax_highlights(doc, view.offset, inner.height, theme);
|
||||||
let highlights = syntax::merge(highlights, Self::doc_diagnostics_highlights(doc, theme));
|
let highlights = syntax::merge(highlights, Self::doc_diagnostics_highlights(doc, theme));
|
||||||
let highlights: Box<dyn Iterator<Item = HighlightEvent>> = if is_focused {
|
let highlights: Box<dyn Iterator<Item = HighlightEvent>> = if is_focused {
|
||||||
|
@ -686,6 +690,43 @@ impl EditorView {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Apply the highlighting on the lines where a cursor is active
|
||||||
|
pub fn highlight_cursorline(doc: &Document, view: &View, surface: &mut Surface, theme: &Theme) {
|
||||||
|
let text = doc.text().slice(..);
|
||||||
|
let last_line = view.last_line(doc);
|
||||||
|
|
||||||
|
let primary_line = doc.selection(view.id).primary().cursor_line(text);
|
||||||
|
|
||||||
|
// The secondary_lines do contain the primary_line, it doesn't matter
|
||||||
|
// as the else-if clause in the loop later won't test for the
|
||||||
|
// secondary_lines if primary_line == line.
|
||||||
|
// It's used inside a loop so the collect isn't needless:
|
||||||
|
// https://github.com/rust-lang/rust-clippy/issues/6164
|
||||||
|
#[allow(clippy::needless_collect)]
|
||||||
|
let secondary_lines: Vec<_> = doc
|
||||||
|
.selection(view.id)
|
||||||
|
.iter()
|
||||||
|
.map(|range| range.cursor_line(text))
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
let primary_style = theme.get("ui.cursorline.primary");
|
||||||
|
let secondary_style = theme.get("ui.cursorline.secondary");
|
||||||
|
|
||||||
|
for line in view.offset.row..(last_line + 1) {
|
||||||
|
let area = Rect::new(
|
||||||
|
view.area.x,
|
||||||
|
view.area.y + (line - view.offset.row) as u16,
|
||||||
|
view.area.width,
|
||||||
|
1,
|
||||||
|
);
|
||||||
|
if primary_line == line {
|
||||||
|
surface.set_style(area, primary_style);
|
||||||
|
} else if secondary_lines.binary_search(&line).is_ok() {
|
||||||
|
surface.set_style(area, secondary_style);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn render_statusline(
|
pub fn render_statusline(
|
||||||
&self,
|
&self,
|
||||||
doc: &Document,
|
doc: &Document,
|
||||||
|
|
|
@ -121,6 +121,8 @@ pub struct Config {
|
||||||
pub shell: Vec<String>,
|
pub shell: Vec<String>,
|
||||||
/// Line number mode.
|
/// Line number mode.
|
||||||
pub line_number: LineNumber,
|
pub line_number: LineNumber,
|
||||||
|
/// Highlight the lines cursors are currently on. Defaults to false.
|
||||||
|
pub cursorline: bool,
|
||||||
/// Gutters. Default ["diagnostics", "line-numbers"]
|
/// Gutters. Default ["diagnostics", "line-numbers"]
|
||||||
pub gutters: Vec<GutterType>,
|
pub gutters: Vec<GutterType>,
|
||||||
/// Middle click paste support. Defaults to true.
|
/// Middle click paste support. Defaults to true.
|
||||||
|
@ -394,6 +396,7 @@ impl Default for Config {
|
||||||
vec!["sh".to_owned(), "-c".to_owned()]
|
vec!["sh".to_owned(), "-c".to_owned()]
|
||||||
},
|
},
|
||||||
line_number: LineNumber::Absolute,
|
line_number: LineNumber::Absolute,
|
||||||
|
cursorline: false,
|
||||||
gutters: vec![GutterType::Diagnostics, GutterType::LineNumbers],
|
gutters: vec![GutterType::Diagnostics, GutterType::LineNumbers],
|
||||||
middle_click_paste: true,
|
middle_click_paste: true,
|
||||||
auto_pairs: AutoPairConfig::default(),
|
auto_pairs: AutoPairConfig::default(),
|
||||||
|
|
Loading…
Reference in New Issue