mirror of
https://github.com/starship/starship.git
synced 2026-06-22 02:02:12 +07:00
Add segment structure and logic
This commit is contained in:
-20
@@ -1,20 +0,0 @@
|
||||
use std::env;
|
||||
use ansi_term::Color;
|
||||
|
||||
pub fn display() {
|
||||
let PROMPT_CHAR = "➜ ";
|
||||
let COLOR_SUCCESS = Color::Green;
|
||||
let COLOR_FAILURE = Color::Red;
|
||||
|
||||
let color = match env::var_os("status") {
|
||||
None | "0" => COLOR_SUCCESS,
|
||||
_ => COLOR_FAILURE
|
||||
};
|
||||
|
||||
// let color = match env::var("status") {
|
||||
// Ok("0") | _ => COLOR_SUCCESS,
|
||||
// Ok("1") => COLOR_FAILURE
|
||||
// };
|
||||
|
||||
print!("{}", color.paint(PROMPT_CHAR));
|
||||
}
|
||||
+15
-6
@@ -1,9 +1,19 @@
|
||||
#[macro_use]
|
||||
extern crate clap;
|
||||
use clap::App;
|
||||
use std::io;
|
||||
extern crate ansi_term;
|
||||
|
||||
mod char;
|
||||
mod modules;
|
||||
mod print;
|
||||
|
||||
use ansi_term::Style;
|
||||
use clap::App;
|
||||
|
||||
pub struct Segment {
|
||||
style: Style,
|
||||
value: String,
|
||||
prefix: Option<Box<Segment>>,
|
||||
suffix: Option<Box<Segment>>,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
App::new("Starship")
|
||||
@@ -12,9 +22,8 @@ fn main() {
|
||||
.version(crate_version!())
|
||||
// pull the authors from Cargo.toml
|
||||
.author(crate_authors!())
|
||||
.after_help("https://github.com/matchai/starship")
|
||||
.get_matches();
|
||||
|
||||
prompt::char();
|
||||
// let stdout = io::stdout();
|
||||
// let mut handle = io::BufWriter::new(stdout);
|
||||
print::prompt();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
use crate::Segment;
|
||||
use ansi_term::{Color, Style};
|
||||
use std::env;
|
||||
|
||||
pub fn segment() -> Segment {
|
||||
const PROMPT_CHAR: &str = "➜ ";
|
||||
const COLOR_SUCCESS: Color = Color::Green;
|
||||
const COLOR_FAILURE: Color = Color::Red;
|
||||
|
||||
let default_prefix = Segment {
|
||||
value: String::from("testPrefix"),
|
||||
style: Style::default(),
|
||||
prefix: None,
|
||||
suffix: None,
|
||||
};
|
||||
|
||||
let color;
|
||||
if let Ok(status) = env::var("status") {
|
||||
if status == "0" {
|
||||
color = COLOR_SUCCESS;
|
||||
} else {
|
||||
color = COLOR_FAILURE;
|
||||
}
|
||||
} else {
|
||||
panic!("No status environment variable provided");
|
||||
}
|
||||
|
||||
Segment {
|
||||
prefix: Some(Box::new(default_prefix)),
|
||||
value: String::from(PROMPT_CHAR),
|
||||
style: Style::new().fg(color),
|
||||
suffix: None,
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
mod char;
|
||||
|
||||
use crate::Segment;
|
||||
|
||||
pub fn handle(module: &str) -> Segment {
|
||||
match module {
|
||||
"char" => char::segment(),
|
||||
|
||||
_ => panic!("Unknown module: {}", module),
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
use crate::modules;
|
||||
use crate::Segment;
|
||||
|
||||
pub fn prompt() {
|
||||
let default_prompt = vec!["char"];
|
||||
|
||||
for module in default_prompt {
|
||||
let segment = modules::handle(module);
|
||||
print_segment(segment);
|
||||
}
|
||||
}
|
||||
|
||||
fn print_segment(segment: Segment) {
|
||||
let Segment {
|
||||
prefix,
|
||||
value,
|
||||
style,
|
||||
suffix,
|
||||
} = segment;
|
||||
|
||||
if let Some(prefix) = prefix {
|
||||
print_segment(*prefix);
|
||||
}
|
||||
|
||||
print!("{}", style.paint(value));
|
||||
|
||||
if let Some(suffix) = suffix {
|
||||
print_segment(*suffix);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user