blob: 515b52e2289d728b4c87fbdba69bdbb58214b02f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
use crate::compose::Environment;
use crate::poem::Verse;
pub fn incant(verse: &Verse, out: &mut Vec<u8>, env: &Environment) -> i32 {
let mut status = 0;
match verse.clause() {
Some(clause) => {
let mut output: String;
for word in clause {
// Check if it's an alias
if env.aliases.contains_key(&word) {
output = format!("{}: aliased to {}\n", word, env.aliases.get(&word).unwrap());
if verse.couplet > 0 {
out.append(&mut output.as_bytes().to_vec());
} else {
print!("{}", output);
}
continue;
}
// Check if it's a built-in
match super::lookup(&word) {
Some(_) => {
output = format!("{}: shell built-in command\n", word);
if verse.couplet > 0 {
out.append(&mut output.as_bytes().to_vec());
} else {
print!("{}", output);
}
continue;
}
None => {}
}
// Manually check the path
let mut verb = Verse::new();
verb.push(word.clone());
match verb.spellcheck(&env.bins) {
Some(i) => {
output = format!("{}\n", env.bins[i]);
if verse.couplet > 0 {
out.append(&mut output.as_bytes().to_vec());
} else {
print!("{}", output);
}
}
None => {
output = format!("{} not found\n", word);
status = 1;
eprint!("{}", output);
}
}
}
}
None => {
eprintln!("which: not enough arguments");
return 1;
}
}
status
}
|