use crate::alias;
use std::fs::OpenOptions;
use std::io::{self, Write};
use std::process::Command;
pub fn list_aliases(full: bool) {
let aliases = alias::read_aliases();
for (name, cmd) in aliases {
if full {
println!("alias {}='{}'", name, cmd);
} else {
println!("{}", name);
}
}
}
pub fn exec_alias(name: &str) {
let aliases = alias::read_aliases();
match aliases.get(name) {
Some(cmd) => {
println!("Executing: {}", cmd);
let status = Command::new("sh")
.arg("-c")
.arg(cmd)
.status()
.expect("Failed to execute command");
if !status.success() {
std::process::exit(status.code().unwrap_or(1));
}
}
None => {
eprintln!("Alias '{}' not found", name);
std::process::exit(1);
}
}
}
pub fn add_alias() {
print!("Name: ");
io::stdout().flush().unwrap();
let mut name = String::new();
io::stdin()
.read_line(&mut name)
.expect("Failed to read name");
let name = name.trim();
if name.is_empty() {
eprintln!("Name cannot be empty");
return;
}
print!("Command: ");
io::stdout().flush().unwrap();
let mut cmd = String::new();
io::stdin()
.read_line(&mut cmd)
.expect("Failed to read command");
let cmd = cmd.trim();
if cmd.is_empty() {
eprintln!("Command cannot be empty");
return;
}
let path = alias::get_aliases_path();
let mut file = OpenOptions::new()
.create(true)
.append(true)
.open(&path)
.expect("Cannot open .bash_aliases");
writeln!(file, "alias {}='{}'", name, cmd).expect("Cannot write to file");
println!("✓ Added alias: {}", name);
println!();
println!("To use immediately, run:");
println!(" source ~/.bash_aliases");
}