summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZhenhui Xie <xiezh0831@yahoo.co.jp>2019-10-10 16:21:52 +0800
committerMatan Kushner <hello@matchai.me>2019-10-10 17:21:52 +0900
commit57b38f17bbc9540f57fe8fa7fa07b90848a284ad (patch)
tree8a3874b3ffa09536088204f9c0de6ba96fb955ad
parente858780eda467f2542ac2b2db42f72e729650909 (diff)
refactor: Rewrite hostname, jobs and line_break module to use mo… (#462)
-rw-r--r--docs/config/README.md2
-rw-r--r--src/config.rs2
-rw-r--r--src/configs/hostname.rs25
-rw-r--r--src/configs/jobs.rs23
-rw-r--r--src/configs/mod.rs2
-rw-r--r--src/modules/hostname.rs20
-rw-r--r--src/modules/jobs.rs20
-rw-r--r--src/modules/line_break.rs3
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)
}