mirror of
https://github.com/starship/starship
synced 2024-09-06 08:19:27 +00:00
refactor: Rewrite hostname, jobs and line_break module to use mo… (#462)
This commit is contained in:
parent
e858780eda
commit
57b38f17bb
|
@ -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. |
|
||||
|
|
|
@ -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 }
|
||||
}
|
||||
|
||||
|
|
25
src/configs/hostname.rs
Normal file
25
src/configs/hostname.rs
Normal file
|
@ -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,
|
||||
}
|
||||
}
|
||||
}
|
23
src/configs/jobs.rs
Normal file
23
src/configs/jobs.rs
Normal file
|
@ -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,
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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("");
|
||||
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue