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/recite.rs | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) (limited to 'src/poem/recite.rs') diff --git a/src/poem/recite.rs b/src/poem/recite.rs index e37b7c6..9a425e8 100644 --- a/src/poem/recite.rs +++ b/src/poem/recite.rs @@ -54,6 +54,18 @@ impl Reciteable for Poem { } } + // Check for aliases + match env.aliases.get(&verse.verb()) { + Some(verb) => { + let mut split: Vec = verb.split(" ").map(|s| s.to_string()).collect(); + let mut old_stanza = verse.stanza.clone(); + old_stanza.remove(0); + split.append(&mut old_stanza); + verse.stanza = split; + } + None => {} + }; + // Run interal poems let v = verse.clone(); let mut new_stanza = None; @@ -129,15 +141,19 @@ impl Reciteable for Poem { // If it doesn't exist, try refreshing the binary cache, and check // again // If it still doesn't exist, print an error - if !verse.spellcheck(&env.bins) { - env.bins = path::refresh(); + if !verse.verb().is_empty() { if !verse.spellcheck(&env.bins) { - eprintln!("dwvsh: {}: command not found", verse.verb()); + env.bins = path::refresh(); + if !verse.spellcheck(&env.bins) { + eprintln!("dwvsh: {}: command not found", verse.verb()); - if verse.meter != Rune::And { - continue; + if verse.meter != Rune::And { + continue; + } } } + } else { + continue; } if stdout { -- cgit v1.2.3