aboutsummaryrefslogtreecommitdiffstats
path: root/src/run
diff options
context:
space:
mode:
Diffstat (limited to 'src/run')
-rw-r--r--src/run/builtin.rs49
1 files changed, 38 insertions, 11 deletions
diff --git a/src/run/builtin.rs b/src/run/builtin.rs
index 2255997..dfafcbe 100644
--- a/src/run/builtin.rs
+++ b/src/run/builtin.rs
@@ -982,28 +982,55 @@ impl Builtin for pish_theme {
_stdin: &mut dyn Read,
stdout: &mut dyn Write,
) -> Result {
- if args.len() != 2 {
- stdout.write_all(b"usage: pish_theme <kind> <color>\nwhere color is an ansi escape code,\nand where kind is one of the following: ")?;
+ let mut usage = || {
+ stdout.write_all(b"usage:\n")?;
+ stdout.write_all(b"pish_theme disable\n")?;
+ stdout.write_all(b"pish_theme enable\n")?;
+ stdout.write_all(b"pish_theme set <kind> <color>\nwhere color is an ansi escape code,\nand where kind is one of the following: ")?;
for ident in crate::parse::HighlightKind::all_identifiers() {
stdout.write_all(&ident)?;
stdout.write_all(b" ")?;
}
stdout.write_all(b"\n")?;
return Err(Error::Exit(-1));
+ };
+
+ if args.is_empty() {
+ return usage();
}
let mut se = session.lock().unwrap();
- match se.highlighter.set_color(&args[0], &args[1]) {
- Ok(_) => Ok(()),
- Err(e) => match e {
- syntax_highlighting::SetColorError::NoSuchKeyword => {
- stdout.write_all(b"no such kind: ")?;
- stdout.write_all(&args[0])?;
- stdout.write_all(b"\n")?;
- Err(Error::Exit(-1))
+
+ match &args[0][..] {
+ b"disable" => {
+ se.highlighter.enabled = false;
+ }
+ b"enable" => {
+ se.highlighter.enabled = true;
+ }
+ b"set" => {
+ if args.len() != 3 {
+ return usage();
}
- },
+
+ let kind = &args[1][..];
+ let color = &args[2][..];
+
+ if let Err(e) = se.highlighter.set_color(kind, color) {
+ match e {
+ syntax_highlighting::SetColorError::NoSuchKeyword => {
+ stdout.write_all(b"no such kind: ")?;
+ stdout.write_all(&args[0])?;
+ stdout.write_all(b"\n")?;
+ return Err(Error::Exit(-1));
+ }
+ }
+ }
+ }
+ _ => return usage(),
}
+
+ Ok(())
}
}