mirror of
https://github.com/helix-editor/helix.git
synced 2024-11-22 17:36:19 +04:00
Add ability to theme primary selecition
This commit is contained in:
parent
ac1e98d088
commit
d70be55f70
@ -89,6 +89,7 @@ ## Creating a theme
|
|||||||
| `ui.text.focus` | |
|
| `ui.text.focus` | |
|
||||||
| `ui.menu.selected` | |
|
| `ui.menu.selected` | |
|
||||||
| `ui.selection` | For selections in the editing area |
|
| `ui.selection` | For selections in the editing area |
|
||||||
|
| `ui.selection.primary` | |
|
||||||
| `warning` | LSP warning |
|
| `warning` | LSP warning |
|
||||||
| `error` | LSP error |
|
| `error` | LSP error |
|
||||||
| `info` | LSP info |
|
| `info` | LSP info |
|
||||||
|
@ -294,16 +294,27 @@ pub fn render_buffer(
|
|||||||
});
|
});
|
||||||
|
|
||||||
let selection_style = theme.get("ui.selection");
|
let selection_style = theme.get("ui.selection");
|
||||||
|
let primary_style = theme
|
||||||
|
.try_get("ui.selection.primary")
|
||||||
|
.unwrap_or(selection_style);
|
||||||
|
let selection = doc.selection(view.id);
|
||||||
|
let primary_idx = selection.primary_index();
|
||||||
|
|
||||||
for selection in doc
|
for (i, selection) in selection
|
||||||
.selection(view.id)
|
|
||||||
.iter()
|
.iter()
|
||||||
.filter(|range| range.overlaps(&screen))
|
.enumerate()
|
||||||
|
.filter(|(_, range)| range.overlaps(&screen))
|
||||||
{
|
{
|
||||||
// TODO: render also if only one of the ranges is in viewport
|
// TODO: render also if only one of the ranges is in viewport
|
||||||
let mut start = view.screen_coords_at_pos(doc, text, selection.anchor);
|
let mut start = view.screen_coords_at_pos(doc, text, selection.anchor);
|
||||||
let mut end = view.screen_coords_at_pos(doc, text, selection.head);
|
let mut end = view.screen_coords_at_pos(doc, text, selection.head);
|
||||||
|
|
||||||
|
let style = if i != primary_idx {
|
||||||
|
selection_style
|
||||||
|
} else {
|
||||||
|
primary_style
|
||||||
|
};
|
||||||
|
|
||||||
let head = end;
|
let head = end;
|
||||||
|
|
||||||
if selection.head < selection.anchor {
|
if selection.head < selection.anchor {
|
||||||
@ -331,7 +342,7 @@ pub fn render_buffer(
|
|||||||
),
|
),
|
||||||
1,
|
1,
|
||||||
),
|
),
|
||||||
selection_style,
|
style,
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
surface.set_style(
|
surface.set_style(
|
||||||
@ -342,7 +353,7 @@ pub fn render_buffer(
|
|||||||
viewport.width.saturating_sub(start.col as u16),
|
viewport.width.saturating_sub(start.col as u16),
|
||||||
1,
|
1,
|
||||||
),
|
),
|
||||||
selection_style,
|
style,
|
||||||
);
|
);
|
||||||
for i in start.row + 1..end.row {
|
for i in start.row + 1..end.row {
|
||||||
surface.set_style(
|
surface.set_style(
|
||||||
@ -353,7 +364,7 @@ pub fn render_buffer(
|
|||||||
viewport.width,
|
viewport.width,
|
||||||
1,
|
1,
|
||||||
),
|
),
|
||||||
selection_style,
|
style,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
surface.set_style(
|
surface.set_style(
|
||||||
@ -363,7 +374,7 @@ pub fn render_buffer(
|
|||||||
(end.col as u16).min(viewport.width),
|
(end.col as u16).min(viewport.width),
|
||||||
1,
|
1,
|
||||||
),
|
),
|
||||||
selection_style,
|
style,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,7 +52,8 @@
|
|||||||
"ui.text" = { fg = "#a4a0e8" } # lavender
|
"ui.text" = { fg = "#a4a0e8" } # lavender
|
||||||
"ui.text.focus" = { fg = "#dbbfef"} # lilac
|
"ui.text.focus" = { fg = "#dbbfef"} # lilac
|
||||||
|
|
||||||
"ui.selection" = { bg = "#540099" }
|
"ui.selection" = { bg = "#44258b" }
|
||||||
|
"ui.selection.primary" = { bg = "#540099" }
|
||||||
"ui.menu.selected" = { fg = "#281733", bg = "#ffffff" } # revolver
|
"ui.menu.selected" = { fg = "#281733", bg = "#ffffff" } # revolver
|
||||||
|
|
||||||
"warning" = "#ffcd1c"
|
"warning" = "#ffcd1c"
|
||||||
|
Loading…
Reference in New Issue
Block a user