diff options
author | Zhenhui Xie <xiezh0831@yahoo.co.jp> | 2019-10-10 16:21:52 +0800 |
---|---|---|
committer | Matan Kushner <hello@matchai.me> | 2019-10-10 17:21:52 +0900 |
commit | 57b38f17bbc9540f57fe8fa7fa07b90848a284ad (patch) | |
tree | 8a3874b3ffa09536088204f9c0de6ba96fb955ad | |
parent | e858780eda467f2542ac2b2db42f72e729650909 (diff) |
refactor: Rewrite hostname, jobs and line_break module to use mo… (#462)
-rw-r--r-- | docs/config/README.md | 2 | ||||
-rw-r--r-- | src/config.rs | 2 | ||||
-rw-r--r-- | src/configs/hostname.rs | 25 | ||||
-rw-r--r-- | src/configs/jobs.rs | 23 | ||||
-rw-r--r-- | src/configs/mod.rs | 2 | ||||
-rw-r--r-- | src/modules/hostname.rs | 20 | ||||
-rw-r--r-- | src/modules/jobs.rs | 20 | ||||
-rw-r--r-- | src/modules/line_break.rs | 3 |
8 files changed, 72 insertions, 25 deletions
diff --git a/docs/config/README.md b/docs/config/README.md index 9243ca011..504c87b1a 100644 --- a/docs/config/README.md +++ b/docs/config/README.md @@ -573,7 +573,7 @@ more than the `threshold` config value, if it exists. | Variable | Default | Description | | ----------- | ------------- | ----------------------------------------------------- | -| `symbol` | `"✦ "` | The symbol used before displaying the number of jobs. | +| `symbol` | `"✦"` | The symbol used before displaying the number of jobs. | | `threshold` | `1` | Show number of jobs if exceeded. | | `style` | `"bold blue"` | The style for the module. | | `disabled` | `false` | Disables the `jobs` module. | diff --git a/src/config.rs b/src/config.rs index dafbe1beb..785cd26b6 100644 --- a/src/config.rs +++ b/src/config.rs @@ -219,7 +219,7 @@ impl<'a> ModuleConfig<'a> for SegmentConfig<'a> { } impl<'a> SegmentConfig<'a> { - pub fn new(value: &'static str) -> Self { + pub fn new(value: &'a str) -> Self { Self { value, style: None } } diff --git a/src/configs/hostname.rs b/src/configs/hostname.rs new file mode 100644 index 000000000..fc2d0c078 --- /dev/null +++ b/src/configs/hostname.rs @@ -0,0 +1,25 @@ +use crate::config::{ModuleConfig, RootModuleConfig}; + +use ansi_term::{Color, Style}; +use starship_module_config_derive::ModuleConfig; + +#[derive(Clone, ModuleConfig)] +pub struct HostnameConfig<'a> { + pub ssh_only: bool, + pub prefix: &'a str, + pub suffix: &'a str, + pub style: Style, + pub disabled: bool, +} + +impl<'a> RootModuleConfig<'a> for HostnameConfig<'a> { + fn new() -> Self { + HostnameConfig { + ssh_only: true, + prefix: "", + suffix: "", + style: Color::Green.bold().dimmed(), + disabled: false, + } + } +} diff --git a/src/configs/jobs.rs b/src/configs/jobs.rs new file mode 100644 index 000000000..a2f255ea2 --- /dev/null +++ b/src/configs/jobs.rs @@ -0,0 +1,23 @@ +use crate::config::{ModuleConfig, RootModuleConfig, SegmentConfig}; + +use ansi_term::{Color, Style}; +use starship_module_config_derive::ModuleConfig; + +#[derive(Clone, ModuleConfig)] +pub struct JobsConfig<'a> { + pub symbol: SegmentConfig<'a>, + pub threshold: i64, + pub style: Style, + pub disabled: bool, +} + +impl<'a> RootModuleConfig<'a> for JobsConfig<'a> { + fn new() -> Self { + JobsConfig { + symbol: SegmentConfig::new("✦"), + threshold: 1, + style: Color::Blue.bold(), + disabled: false, + } + } +} diff --git a/src/configs/mod.rs b/src/configs/mod.rs index a8e8302dc..c2f0ab083 100644 --- a/src/configs/mod.rs +++ b/src/configs/mod.rs @@ -3,6 +3,8 @@ pub mod battery; pub mod character; pub mod conda; pub mod dotnet; +pub mod hostname; +pub mod jobs; pub mod kubernetes; pub mod rust; pub mod time; diff --git a/src/modules/hostname.rs b/src/modules/hostname.rs index d71f733fa..acb393797 100644 --- a/src/modules/hostname.rs +++ b/src/modules/hostname.rs @@ -1,9 +1,11 @@ -use ansi_term::Color; use std::env; use super::{Context, Module}; use std::ffi::OsString; +use crate::config::RootModuleConfig; +use crate::configs::hostname::HostnameConfig; + /// Creates a module with the system hostname /// /// Will display the hostname if all of the following criteria are met: @@ -11,12 +13,10 @@ use std::ffi::OsString; /// - hostname.ssh_only is false OR the user is currently connected as an SSH session (`$SSH_CONNECTION`) pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> { let mut module = context.new_module("hostname"); - let module_style = module - .config_value_style("style") - .unwrap_or_else(|| Color::Green.bold().dimmed()); + let config: HostnameConfig = HostnameConfig::try_load(module.config); let ssh_connection = env::var("SSH_CONNECTION").ok(); - if module.config_value_bool("ssh_only").unwrap_or(true) && ssh_connection.is_none() { + if config.ssh_only && ssh_connection.is_none() { return None; } @@ -30,11 +30,11 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> { } }; - let prefix = module.config_value_str("prefix").unwrap_or("").to_owned(); - let suffix = module.config_value_str("suffix").unwrap_or("").to_owned(); - - module.set_style(module_style); - module.new_segment("hostname", &format!("{}{}{}", prefix, host, suffix)); + module.set_style(config.style); + module.new_segment( + "hostname", + &format!("{}{}{}", config.prefix, host, config.suffix), + ); module.get_prefix().set_value("on "); Some(module) diff --git a/src/modules/jobs.rs b/src/modules/jobs.rs index 8a667049e..e0f2308df 100644 --- a/src/modules/jobs.rs +++ b/src/modules/jobs.rs @@ -1,18 +1,14 @@ -use ansi_term::Color; - use super::{Context, Module}; +use crate::config::{RootModuleConfig, SegmentConfig}; +use crate::configs::jobs::JobsConfig; + /// Creates a segment to show if there are any active jobs running pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> { let mut module = context.new_module("jobs"); + let config: JobsConfig = JobsConfig::try_load(module.config); - let threshold = module.config_value_i64("threshold").unwrap_or(1); - - const JOB_CHAR: &str = "✦"; - let module_style = module - .config_value_style("style") - .unwrap_or_else(|| Color::Blue.bold()); - module.set_style(module_style); + module.set_style(config.style); let arguments = &context.arguments; let num_of_jobs = arguments @@ -24,9 +20,9 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> { if num_of_jobs == 0 { return None; } - module.new_segment("symbol", JOB_CHAR); - if num_of_jobs > threshold { - module.new_segment("number", &num_of_jobs.to_string()); + module.create_segment("symbol", &config.symbol); + if num_of_jobs > config.threshold { + module.create_segment("number", &SegmentConfig::new(&num_of_jobs.to_string())); } module.get_prefix().set_value(""); diff --git a/src/modules/line_break.rs b/src/modules/line_break.rs index 259e60877..3b9c06287 100644 --- a/src/modules/line_break.rs +++ b/src/modules/line_break.rs @@ -1,4 +1,5 @@ use super::{Context, Module}; +use crate::config::SegmentConfig; /// Creates a module for the line break pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> { @@ -9,7 +10,7 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> { module.get_prefix().set_value(""); module.get_suffix().set_value(""); - module.new_segment("character", LINE_ENDING); + module.create_segment("character", &SegmentConfig::new(LINE_ENDING)); Some(module) } |