diff options
| -rw-r--r-- | src/vtcol.rs | 53 | 
1 files changed, 41 insertions, 12 deletions
diff --git a/src/vtcol.rs b/src/vtcol.rs index 9f0779e..0e80682 100644 --- a/src/vtcol.rs +++ b/src/vtcol.rs @@ -95,7 +95,7 @@ enum Scheme {      Default,      SolarizedDark,      SolarizedLight, -    Custom (String) +    Custom (Option<String>)  }  impl<'a> std::fmt::Display for Scheme { @@ -108,7 +108,13 @@ impl<'a> std::fmt::Display for Scheme {              Scheme::Default           => "default",              Scheme::SolarizedDark     => "solarized_dark",              Scheme::SolarizedLight    => "solarized_light", -            Scheme::Custom(ref fname) => fname.as_str() +            Scheme::Custom(ref kind) => { +                let tmp : &str = match *kind { +                    Some(ref fname) => fname.as_str(), +                    None            => "<read stdin>" +                }; +                tmp +            }          };          write!(f, "{}", id)      } @@ -178,16 +184,13 @@ impl<'a> Job {                          Job::usage(&this, opts);                          panic!("no file name specified, aborting")                      }, -                    Some (fname) => Scheme::Custom(fname.clone()) +                    Some (fname) => Scheme::Custom(Some(fname.clone()))                  }              } else {                  match matches.opt_str("s")                  { -                    None => { -                        Job::usage(&this, opts); -                        panic!("no color scheme given, aborting") -                    }, -                    Some (name) => Job::pick_scheme(&name) +                    Some (name) => Job::pick_scheme(&name), +                    None        => Job::scheme_from_stdin()                  }              }; /* [let scheme] */ @@ -208,11 +211,18 @@ impl<'a> Job {                  => Scheme::SolarizedLight,              "default" | "normal"                  => Scheme::Default, -            _any => Scheme::Custom (name.clone()) +            _any => Scheme::Custom (Some(name.clone()))          }      }      fn +    scheme_from_stdin () +        -> Scheme +    { +        Scheme::Custom(None) +    } + +    fn      usage (this : &String, opts: &[getopts::OptGroup])      {          let brief = format!("usage: {} [options]", this); @@ -236,7 +246,11 @@ impl<'a> Job {              Scheme::Default        => Job::dump_scheme(&DEFAULT_COLORS),              Scheme::SolarizedDark  => Job::dump_scheme(&SOLARIZED_COLORS_DARK),              Scheme::SolarizedLight => Job::dump_scheme(&SOLARIZED_COLORS_LIGHT), -            Scheme::Custom(fname)  => Job::dump_palette(Palette::from_file(&fname)) +            Scheme::Custom(kind)  => +                match kind { +                    Some(fname) => Job::dump_palette(Palette::from_file(&fname)), +                    None        => Job::dump_palette(Palette::from_stdin()) +                }          }      } @@ -397,7 +411,7 @@ impl Palette {      pub fn      from_buffered_reader -    (reader : &mut std::io::BufReader<std::fs::File>) +    (reader : &mut std::io::BufRead)          -> Palette      {          let mut pal_idx : usize = 0_usize; @@ -455,6 +469,17 @@ impl Palette {          Palette::from_buffered_reader (&mut reader)      } /* [Palette::from_file] */ +    pub fn +    from_stdin () +        -> Palette +    { +        let mut reader = std::io::BufReader::new(std::io::stdin()); + +        /* Parse scheme file +         */ +        Palette::from_buffered_reader (&mut reader) +    } /* [Palette::from_stdin] */ +  } /* [impl Palette] */  impl std::fmt::Display for Palette { @@ -596,7 +621,11 @@ main ()              Scheme::Default            => Palette::new(&DEFAULT_COLORS),              Scheme::SolarizedDark      => Palette::new(&SOLARIZED_COLORS_DARK),              Scheme::SolarizedLight     => Palette::new(&SOLARIZED_COLORS_LIGHT), -            Scheme::Custom (ref fname) => Palette::from_file(fname) +            Scheme::Custom(ref kind) => +                match *kind { +                    Some(ref fname) => Palette::from_file(fname), +                    None            => Palette::from_stdin() +                }          }      };      println!("{}", pal);  | 
