aboutsummaryrefslogtreecommitdiffstats
path: root/src/run/builtin.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/run/builtin.rs')
-rw-r--r--src/run/builtin.rs28
1 files changed, 19 insertions, 9 deletions
diff --git a/src/run/builtin.rs b/src/run/builtin.rs
index d00c140..335d07d 100644
--- a/src/run/builtin.rs
+++ b/src/run/builtin.rs
@@ -7,7 +7,7 @@ use pish_derive::FromArgs;
use super::{Builtin, BuiltinError as Error, BuiltinResult as Result};
use crate::parse::CmdDisplay;
-use crate::run::AliasAge;
+use crate::run::{AliasAge, AliasBody};
use crate::*;
#[allow(unused)]
@@ -187,9 +187,11 @@ impl Builtin for _type {
) -> Result {
let session = session.lock().unwrap();
for arg in args {
- if session.aliases.get(arg, AliasAge::MAX).is_some() {
- // TODO: tell what it is aliased to
- writeln!(stdout, "{} is an alias", String::from_utf8_lossy(arg))?;
+ if let Some((_, a)) = session.aliases.get(arg, AliasAge::MAX) {
+ stdout.write_all(&arg)?;
+ stdout.write_all(b" is aliased to ")?;
+ stdout.write_all(&a.unparsed)?;
+ stdout.write_all(b"\n")?;
continue;
}
@@ -496,11 +498,19 @@ impl Builtin for alias {
return Err(Error::Exit(-1));
}
- session
- .lock()
- .unwrap()
- .aliases
- .insert(alias_name.clone(), alias_args);
+ session.lock().unwrap().aliases.insert(
+ alias_name.clone(),
+ AliasBody {
+ unparsed: args.iter().fold(BString::new(), |mut a, b| {
+ if !a.is_empty() {
+ a.push(b' ');
+ }
+ a.push_all(&b);
+ a
+ }),
+ parsed: alias_args,
+ },
+ );
Ok(())
}