aboutsummaryrefslogtreecommitdiff
path: root/helix-term/src/ui
diff options
context:
space:
mode:
authorwojciechkepka2021-06-20 20:02:41 +0000
committerBlaž Hrastnik2021-06-23 12:55:02 +0000
commitd70be55f708fdae8c6e89cae1ad48a35d716bf10 (patch)
tree27ebdd32bf2866cdc31caa589d3a58d4d2727f9f /helix-term/src/ui
parentac1e98d088dcb05bfb72d39bc33394163b8303ba (diff)
Add ability to theme primary selecition
Diffstat (limited to 'helix-term/src/ui')
-rw-r--r--helix-term/src/ui/editor.rs25
1 files changed, 18 insertions, 7 deletions
diff --git a/helix-term/src/ui/editor.rs b/helix-term/src/ui/editor.rs
index 43f1069d..06f7e644 100644
--- a/helix-term/src/ui/editor.rs
+++ b/helix-term/src/ui/editor.rs
@@ -294,16 +294,27 @@ impl EditorView {
});
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
- .selection(view.id)
+ for (i, selection) in selection
.iter()
- .filter(|range| range.overlaps(&screen))
+ .enumerate()
+ .filter(|(_, range)| range.overlaps(&screen))
{
// 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 end = view.screen_coords_at_pos(doc, text, selection.head);
+ let style = if i != primary_idx {
+ selection_style
+ } else {
+ primary_style
+ };
+
let head = end;
if selection.head < selection.anchor {
@@ -331,7 +342,7 @@ impl EditorView {
),
1,
),
- selection_style,
+ style,
);
} else {
surface.set_style(
@@ -342,7 +353,7 @@ impl EditorView {
viewport.width.saturating_sub(start.col as u16),
1,
),
- selection_style,
+ style,
);
for i in start.row + 1..end.row {
surface.set_style(
@@ -353,7 +364,7 @@ impl EditorView {
viewport.width,
1,
),
- selection_style,
+ style,
);
}
surface.set_style(
@@ -363,7 +374,7 @@ impl EditorView {
(end.col as u16).min(viewport.width),
1,
),
- selection_style,
+ style,
);
}