From d70be55f708fdae8c6e89cae1ad48a35d716bf10 Mon Sep 17 00:00:00 2001 From: wojciechkepka Date: Sun, 20 Jun 2021 22:02:41 +0200 Subject: [PATCH] Add ability to theme primary selecition --- book/src/themes.md | 1 + helix-term/src/ui/editor.rs | 25 ++++++++++++++++++------- theme.toml | 3 ++- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/book/src/themes.md b/book/src/themes.md index d552f41af..01fda34a6 100644 --- a/book/src/themes.md +++ b/book/src/themes.md @@ -89,6 +89,7 @@ Possible keys: | `ui.text.focus` | | | `ui.menu.selected` | | | `ui.selection` | For selections in the editing area | +| `ui.selection.primary` | | | `warning` | LSP warning | | `error` | LSP error | | `info` | LSP info | diff --git a/helix-term/src/ui/editor.rs b/helix-term/src/ui/editor.rs index 43f1069d7..06f7e644c 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, ); } diff --git a/theme.toml b/theme.toml index a4f402675..6c357ef47 100644 --- a/theme.toml +++ b/theme.toml @@ -52,7 +52,8 @@ "ui.text" = { fg = "#a4a0e8" } # lavender "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 "warning" = "#ffcd1c"