summaryrefslogtreecommitdiffstats
path: root/src/poem/anthology.rs
diff options
context:
space:
mode:
authorRory Dudley2024-03-30 20:15:12 -0600
committerRory Dudley2024-03-30 20:15:12 -0600
commit2439f63a1c0859fd454d4a67dc36b61ad6ab5eb8 (patch)
tree51926cec235e93eb759eacb5761e398dc50fc7f2 /src/poem/anthology.rs
parentbc64d1917829623cea447871c548950460559232 (diff)
downloaddwarvish-2439f63a1c0859fd454d4a67dc36b61ad6ab5eb8.tar.gz
Add the 'alias' built-in command
The shell now has support for aliases (via alias foo=bar). The 'unalias' command is also available to remove aliases. Finally, Environment::aliases was changed to be a HashMap<String, String>, instead of a Vec<String>. Since the verse's verb might change (for instance, it is an environment variable, or an alias), add another check in Poem::recite, which simply continues, instead of running the spellchecker, if the verb is empty.
Diffstat (limited to 'src/poem/anthology.rs')
-rw-r--r--src/poem/anthology.rs13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/poem/anthology.rs b/src/poem/anthology.rs
index 7d97ab7..94b5f6b 100644
--- a/src/poem/anthology.rs
+++ b/src/poem/anthology.rs
@@ -1,12 +1,13 @@
-pub mod cd;
-pub mod exit;
-pub mod export;
-pub mod source;
+mod alias;
+mod cd;
+mod exit;
+mod export;
+mod source;
use crate::compose::Environment;
use crate::poem::Verse;
/// A static list of all the built-in commands
-static INDEX: [&str; 4] = ["cd", "exit", "export", "source"];
+static INDEX: [&str; 6] = ["alias", "cd", "exit", "export", "source", "unalias"];
/// Lookup the index of a built-in command
///
@@ -23,10 +24,12 @@ pub fn lookup(verb: &str) -> Option<usize> {
pub fn incant(verse: &Verse, index: usize, env: &mut Environment) -> i32 {
let verb = INDEX[index];
match verb {
+ "alias" => alias::incant(verse, &mut env.aliases),
"cd" => cd::incant(verse),
"exit" => exit::incant(),
"export" => export::incant(verse),
"source" => source::incant(verse, env),
+ "unalias" => alias::unincant(verse, &mut env.aliases),
_ => unreachable!(),
}
}