diff --git a/src/lib.rs b/src/lib.rs index cd08408..d252a84 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -221,14 +221,39 @@ pub mod shell { stdout.flush(); } + fn transform_alias(conf: &SqishConf, full_command: String) -> String { + let binding = full_command.clone(); + let mut pieces = binding.split_whitespace() + .collect::>(); + let command_temp = match pieces.first() { + Some(c) => c, + None => { + return full_command; + }, + }; + let command = String::from(*command_temp); + + pieces.remove(0); + let arg = match pieces.len() { + 0 => String::from(""), + _ => format!(" {}", pieces.join(" ")), + }; + + if conf.aliases.contains_key(&command) && command.chars().count() > 0 { + let ret_string = format!("{}{}", conf.aliases[&command], arg); + return ret_string; + } else { + return full_command; + } + + } + + + fn run_cmd(mycommand: &mut String, current_number: &mut i32, conf: &mut SqishConf, stdout: &mut RawTerminal) { - //Handling aliases - if conf.aliases.contains_key(mycommand) { - *mycommand = conf.aliases[mycommand].clone(); - } if (mycommand != &String::from("")) && (mycommand != &String::from("exit")) { let comm = replace_signs(&mycommand); RawTerminal::suspend_raw_mode(&stdout); @@ -303,6 +328,7 @@ pub mod shell { let mut current_pos: usize = 0; let mut max_pos: usize = 0; + //Handle Ctrl+C ctrlc::set_handler(|| { (); @@ -325,7 +351,6 @@ pub mod shell { }; &conf.update_prompt(get_curr_history_number()); - //Initialize write!(stdout, "\r\n SquiShell (sqish)--- \r\n{}", conf.promptline); stdout.flush(); @@ -353,6 +378,7 @@ pub mod shell { current_number = get_curr_history_number(); current_pos = 0; max_pos = 0; + mycommand = transform_alias(&conf, mycommand); run_cmd(&mut mycommand, &mut current_number, &mut conf,