mirror of https://github.com/helix-editor/helix
Add theme key for selected line number
Adds `ui.linenr.selected` which controls highlight of linu numbes which have cursors on. - Fallback to linenr if linenr.selected is missing - Update docs and themes - Add TODOs for themes with temporary linenr.selectedpull/281/head
parent
33a35b7589
commit
d1c8a74771
|
@ -70,6 +70,7 @@ Possible keys:
|
||||||
| `module` | |
|
| `module` | |
|
||||||
| `ui.background` | |
|
| `ui.background` | |
|
||||||
| `ui.linenr` | |
|
| `ui.linenr` | |
|
||||||
|
| `ui.linenr.selected` | For lines with cursors |
|
||||||
| `ui.statusline` | |
|
| `ui.statusline` | |
|
||||||
| `ui.popup` | |
|
| `ui.popup` | |
|
||||||
| `ui.window` | |
|
| `ui.window` | |
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
|
|
||||||
"ui.background" = { bg = "#161c23" }
|
"ui.background" = { bg = "#161c23" }
|
||||||
"ui.linenr" = { fg = "#415367" }
|
"ui.linenr" = { fg = "#415367" }
|
||||||
|
"ui.linenr.selected" = { fg = "#e5ded6" } # TODO
|
||||||
"ui.statusline" = { bg = "#232d38" }
|
"ui.statusline" = { bg = "#232d38" }
|
||||||
"ui.popup" = { bg = "#232d38" }
|
"ui.popup" = { bg = "#232d38" }
|
||||||
"ui.window" = { bg = "#232d38" }
|
"ui.window" = { bg = "#232d38" }
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
|
|
||||||
"ui.background" = { bg = "#FFFCFD" }
|
"ui.background" = { bg = "#FFFCFD" }
|
||||||
"ui.linenr" = { fg = "#bbbbbb" }
|
"ui.linenr" = { fg = "#bbbbbb" }
|
||||||
|
"ui.linenr.selected" = { fg = "#F3EAE9" } # TODO
|
||||||
"ui.statusline" = { bg = "#F3EAE9" }
|
"ui.statusline" = { bg = "#F3EAE9" }
|
||||||
"ui.popup" = { bg = "#F3EAE9" }
|
"ui.popup" = { bg = "#F3EAE9" }
|
||||||
"ui.window" = { bg = "#D8B8B3" }
|
"ui.window" = { bg = "#D8B8B3" }
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
"ui.background" = { fg = "#ABB2BF", bg = "#282C34" }
|
"ui.background" = { fg = "#ABB2BF", bg = "#282C34" }
|
||||||
"ui.help" = { bg = "#3E4452" }
|
"ui.help" = { bg = "#3E4452" }
|
||||||
"ui.linenr" = { fg = "#4B5263", modifiers = ['dim'] }
|
"ui.linenr" = { fg = "#4B5263", modifiers = ['dim'] }
|
||||||
|
"ui.linenr.selected" = { fg = "#ABB2BF" }
|
||||||
"ui.popup" = { bg = "#3E4452" }
|
"ui.popup" = { bg = "#3E4452" }
|
||||||
"ui.statusline" = { fg = "#ABB2BF", bg = "#2C323C" }
|
"ui.statusline" = { fg = "#ABB2BF", bg = "#2C323C" }
|
||||||
"ui.selection" = { bg = "#3E4452" }
|
"ui.selection" = { bg = "#3E4452" }
|
||||||
|
|
|
@ -232,7 +232,45 @@ impl EditorView {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// render selections
|
// render gutters
|
||||||
|
|
||||||
|
let linenr: Style = theme.get("ui.linenr");
|
||||||
|
let warning: Style = theme.get("warning");
|
||||||
|
let error: Style = theme.get("error");
|
||||||
|
let info: Style = theme.get("info");
|
||||||
|
let hint: Style = theme.get("hint");
|
||||||
|
|
||||||
|
for (i, line) in (view.first_line..last_line).enumerate() {
|
||||||
|
use helix_core::diagnostic::Severity;
|
||||||
|
if let Some(diagnostic) = doc.diagnostics().iter().find(|d| d.line == line) {
|
||||||
|
surface.set_stringn(
|
||||||
|
viewport.x - OFFSET,
|
||||||
|
viewport.y + i as u16,
|
||||||
|
"●",
|
||||||
|
1,
|
||||||
|
match diagnostic.severity {
|
||||||
|
Some(Severity::Error) => error,
|
||||||
|
Some(Severity::Warning) | None => warning,
|
||||||
|
Some(Severity::Info) => info,
|
||||||
|
Some(Severity::Hint) => hint,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// line numbers having selections are rendered differently
|
||||||
|
surface.set_stringn(
|
||||||
|
viewport.x + 1 - OFFSET,
|
||||||
|
viewport.y + i as u16,
|
||||||
|
format!("{:>5}", line + 1),
|
||||||
|
5,
|
||||||
|
linenr,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// render selections and selected linenr(s)
|
||||||
|
let linenr_select: Style = theme
|
||||||
|
.try_get("ui.linenr.selected")
|
||||||
|
.unwrap_or_else(|| theme.get("ui.linenr"));
|
||||||
|
|
||||||
if is_focused {
|
if is_focused {
|
||||||
let screen = {
|
let screen = {
|
||||||
|
@ -329,6 +367,13 @@ impl EditorView {
|
||||||
),
|
),
|
||||||
cursor_style,
|
cursor_style,
|
||||||
);
|
);
|
||||||
|
surface.set_stringn(
|
||||||
|
viewport.x + 1 - OFFSET,
|
||||||
|
viewport.y + head.row as u16,
|
||||||
|
format!("{:>5}", view.first_line + head.row + 1),
|
||||||
|
5,
|
||||||
|
linenr_select,
|
||||||
|
);
|
||||||
// TODO: set cursor position for IME
|
// TODO: set cursor position for IME
|
||||||
if let Some(syntax) = doc.syntax() {
|
if let Some(syntax) = doc.syntax() {
|
||||||
use helix_core::match_brackets;
|
use helix_core::match_brackets;
|
||||||
|
@ -357,40 +402,6 @@ impl EditorView {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// render gutters
|
|
||||||
|
|
||||||
let style: Style = theme.get("ui.linenr");
|
|
||||||
let warning: Style = theme.get("warning");
|
|
||||||
let error: Style = theme.get("error");
|
|
||||||
let info: Style = theme.get("info");
|
|
||||||
let hint: Style = theme.get("hint");
|
|
||||||
|
|
||||||
for (i, line) in (view.first_line..last_line).enumerate() {
|
|
||||||
use helix_core::diagnostic::Severity;
|
|
||||||
if let Some(diagnostic) = doc.diagnostics().iter().find(|d| d.line == line) {
|
|
||||||
surface.set_stringn(
|
|
||||||
viewport.x - OFFSET,
|
|
||||||
viewport.y + i as u16,
|
|
||||||
"●",
|
|
||||||
1,
|
|
||||||
match diagnostic.severity {
|
|
||||||
Some(Severity::Error) => error,
|
|
||||||
Some(Severity::Warning) | None => warning,
|
|
||||||
Some(Severity::Info) => info,
|
|
||||||
Some(Severity::Hint) => hint,
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
surface.set_stringn(
|
|
||||||
viewport.x + 1 - OFFSET,
|
|
||||||
viewport.y + i as u16,
|
|
||||||
format!("{:>5}", line + 1),
|
|
||||||
5,
|
|
||||||
style,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn render_diagnostics(
|
pub fn render_diagnostics(
|
||||||
|
|
|
@ -200,12 +200,14 @@ fn parse_modifier(value: &Value) -> Option<Modifier> {
|
||||||
|
|
||||||
impl Theme {
|
impl Theme {
|
||||||
pub fn get(&self, scope: &str) -> Style {
|
pub fn get(&self, scope: &str) -> Style {
|
||||||
self.styles
|
self.try_get(scope)
|
||||||
.get(scope)
|
|
||||||
.copied()
|
|
||||||
.unwrap_or_else(|| Style::default().fg(Color::Rgb(0, 0, 255)))
|
.unwrap_or_else(|| Style::default().fg(Color::Rgb(0, 0, 255)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn try_get(&self, scope: &str) -> Option<Style> {
|
||||||
|
self.styles.get(scope).copied()
|
||||||
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn scopes(&self) -> &[String] {
|
pub fn scopes(&self) -> &[String] {
|
||||||
&self.scopes
|
&self.scopes
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
|
|
||||||
"ui.background" = { bg = "#3b224c" } # midnight
|
"ui.background" = { bg = "#3b224c" } # midnight
|
||||||
"ui.linenr" = { fg = "#5a5977" } # comet
|
"ui.linenr" = { fg = "#5a5977" } # comet
|
||||||
|
"ui.linenr.selected" = { fg = "#dbbfef" } # lilac
|
||||||
"ui.statusline" = { bg = "#281733" } # revolver
|
"ui.statusline" = { bg = "#281733" } # revolver
|
||||||
"ui.popup" = { bg = "#281733" } # revolver
|
"ui.popup" = { bg = "#281733" } # revolver
|
||||||
"ui.window" = { bg = "#452859" } # bossa nova
|
"ui.window" = { bg = "#452859" } # bossa nova
|
||||||
|
|
Loading…
Reference in New Issue