summaryrefslogtreecommitdiffstats
path: root/src/poem/recite.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/recite.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/recite.rs')
-rw-r--r--src/poem/recite.rs26
1 files changed, 21 insertions, 5 deletions
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<String> = 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 {