summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Oram <dev@mitmaro.ca>2020-12-26 21:47:06 -0330
committerTim Oram <dev@mitmaro.ca>2020-12-27 11:05:39 -0330
commitad7042e725545fbf04d157f012f29140306b2f67 (patch)
treec0452d3cf1cb5ca126cf61b1b7300c34dc72d1a0
parentef303c7163a0074d9eb4c94fd5f013977bb099fa (diff)
Add theme configuration
-rw-r--r--src/lib/theme.rs67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/lib/theme.rs b/src/lib/theme.rs
new file mode 100644
index 0000000..82943bd
--- /dev/null
+++ b/src/lib/theme.rs
@@ -0,0 +1,67 @@
+use crate::config::utils::{get_color, get_string};
+use crate::display::color::Color;
+use anyhow::Result;
+use git2::Config;
+
+#[derive(Clone, Debug)]
+pub struct Theme {
+ pub(crate) character_vertical_spacing: String,
+ pub(crate) color_action_break: Color,
+ pub(crate) color_action_drop: Color,
+ pub(crate) color_action_edit: Color,
+ pub(crate) color_action_exec: Color,
+ pub(crate) color_action_fixup: Color,
+ pub(crate) color_action_pick: Color,
+ pub(crate) color_action_reword: Color,
+ pub(crate) color_action_squash: Color,
+ pub(crate) color_background: Color,
+ pub(crate) color_diff_add: Color,
+ pub(crate) color_diff_change: Color,
+ pub(crate) color_diff_context: Color,
+ pub(crate) color_diff_remove: Color,
+ pub(crate) color_diff_whitespace: Color,
+ pub(crate) color_foreground: Color,
+ pub(crate) color_indicator: Color,
+ pub(crate) color_selected_background: Color,
+}
+
+impl Theme {
+ pub(super) fn new(git_config: &Config) -> Result<Self> {
+ Ok(Self {
+ character_vertical_spacing: get_string(
+ git_config,
+ "interactive-rebase-tool.verticalSpacingCharacter",
+ "~",
+ )?,
+ color_action_break: get_color(git_config, "interactive-rebase-tool.breakColor", Color::LightWhite)?,
+ color_action_drop: get_color(git_config, "interactive-rebase-tool.dropColor", Color::LightRed)?,
+ color_action_edit: get_color(git_config, "interactive-rebase-tool.editColor", Color::LightBlue)?,
+ color_action_exec: get_color(git_config, "interactive-rebase-tool.execColor", Color::LightWhite)?,
+ color_action_fixup: get_color(git_config, "interactive-rebase-tool.fixupColor", Color::LightMagenta)?,
+ color_action_pick: get_color(git_config, "interactive-rebase-tool.pickColor", Color::LightGreen)?,
+ color_action_reword: get_color(git_config, "interactive-rebase-tool.rewordColor", Color::LightYellow)?,
+ color_action_squash: get_color(git_config, "interactive-rebase-tool.squashColor", Color::LightCyan)?,
+ color_background: get_color(git_config, "interactive-rebase-tool.backgroundColor", Color::Default)?,
+ color_diff_add: get_color(git_config, "interactive-rebase-tool.diffAddColor", Color::LightGreen)?,
+ color_diff_change: get_color(
+ git_config,
+ "interactive-rebase-tool.diffChangeColor",
+ Color::LightYellow,
+ )?,
+ color_diff_context: get_color(
+ git_config,
+ "interactive-rebase-tool.diffContextColor",
+ Color::LightWhite,
+ )?,
+ color_diff_remove: get_color(git_config, "interactive-rebase-tool.diffRemoveColor", Color::LightRed)?,
+ color_diff_whitespace: get_color(git_config, "interactive-rebase-tool.diffWhitespace", Color::LightBlack)?,
+ color_foreground: get_color(git_config, "interactive-rebase-tool.foregroundColor", Color::Default)?,
+ color_indicator: get_color(git_config, "interactive-rebase-tool.indicatorColor", Color::LightCyan)?,
+ color_selected_background: get_color(
+ git_config,
+ "interactive-rebase-tool.selectedBackgroundColor",
+ Color::Index(237),
+ )?,
+ })
+ }
+}