From 2439f63a1c0859fd454d4a67dc36b61ad6ab5eb8 Mon Sep 17 00:00:00 2001 From: Rory Dudley Date: Sat, 30 Mar 2024 20:15:12 -0600 Subject: 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, instead of a Vec. 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. --- src/poem/anthology.rs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'src/poem/anthology.rs') 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 { 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!(), } } -- cgit v1.2.3