summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMatan Kushner <hello@matchai.me>2019-04-03 20:14:26 -0400
committerMatan Kushner <hello@matchai.me>2019-04-03 20:14:26 -0400
commite2ba7a13542c0fcefee3e6e85d8b0bf3ec6c8265 (patch)
treea3b3872846b52012ce3327557b764f9665a6ec7d /src
parent41ee54933bd2820b1ba97726514f785f1ac73824 (diff)
Add segment structure and logic
Diffstat (limited to 'src')
-rw-r--r--src/char.rs20
-rw-r--r--src/main.rs19
-rw-r--r--src/modules/char.rs34
-rw-r--r--src/modules/mod.rs11
-rw-r--r--src/print.rs30
5 files changed, 89 insertions, 25 deletions
diff --git a/src/char.rs b/src/char.rs
deleted file mode 100644
index 7d0998b4a..000000000
--- a/src/char.rs
+++ /dev/null
@@ -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));
-}
diff --git a/src/main.rs b/src/main.rs
index 8a6cd5fd7..ab7e04e56 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,9 +1,19 @@
#[macro_use]
extern crate clap;
+extern crate ansi_term;
+
+mod modules;
+mod print;
+
+use ansi_term::Style;
use clap::App;
-use std::io;
-mod char;
+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();
}
diff --git a/src/modules/char.rs b/src/modules/char.rs
new file mode 100644
index 000000000..96387c740
--- /dev/null
+++ b/src/modules/char.rs
@@ -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,
+ }
+}
diff --git a/src/modules/mod.rs b/src/modules/mod.rs
new file mode 100644
index 000000000..8fe6d63a4
--- /dev/null
+++ b/src/modules/mod.rs
@@ -0,0 +1,11 @@
+mod char;
+
+use crate::Segment;
+
+pub fn handle(module: &str) -> Segment {
+ match module {
+ "char" => char::segment(),
+
+ _ => panic!("Unknown module: {}", module),
+ }
+}
diff --git a/src/print.rs b/src/print.rs
new file mode 100644
index 000000000..2f7ca0999
--- /dev/null
+++ b/src/print.rs
@@ -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);
+ }
+}