diff --git a/src/args.rs b/src/args.rs index bde169a..bbd0b22 100644 --- a/src/args.rs +++ b/src/args.rs @@ -1,76 +1,11 @@ -use std::io::prelude::*; +use crate::shell::print_command_with_env; pub fn handle_args() { let args = std::env::args().collect::>(); if args.len() > 1 { let shell = &args[1]; let binary_path = &args[0]; - let last_command; - let alias; - match shell.as_str() { - "bash" => { - last_command = "$(history 2)"; - alias = "$(alias)" - } - "zsh" => { - last_command = "$(fc -ln -1)"; - alias = "$(alias)" - } - "fish" => { - last_command = "$(history | head -n 1)"; - alias = "$(alias)"; - } - "nu" | "nush" | "nushell" => { - last_command = "(history | last).command"; - alias = "\"\""; - let command = format!( - "with-env {{ _PR_LAST_COMMAND : {},\ - _PR_ALIAS : {},\ - _PR_SHELL : nu }} \ - {{ {} }}", - last_command, alias, binary_path - ); - println!("{}\n", command); - println!("Add following to your config file? (Y/n)"); - let alias = format!("alias f = {}", command); - println!("{}", alias); - let mut input = String::new(); - std::io::stdin().read_line(&mut input).unwrap(); - match input.trim() { - "Y" | "y" | "" => { - let output = std::process::Command::new("nu") - .arg("-c") - .arg("echo $nu.config-path") - .output() - .expect("Failed to execute process"); - let config_path = String::from_utf8_lossy(&output.stdout); - let mut file = std::fs::OpenOptions::new() - .write(true) - .append(true) - .open(config_path.trim()) - .expect("Failed to open config file"); - - writeln!(file, "{}", alias).expect("Failed to write to config file"); - } - _ => std::process::exit(0), - }; - std::process::exit(0); - } - _ => { - println!("Unknown shell: {}", shell); - std::process::exit(1); - } - } - - println!( - "\ - _PR_LAST_COMMAND=\"{}\" \ - _PR_ALIAS=\"{}\" \ - _PR_SHELL=\"{}\" \ - \"{}\"", - last_command, alias, shell, binary_path - ); - std::process::exit(0); + print_command_with_env(shell, binary_path); } } diff --git a/src/shell.rs b/src/shell.rs index 03c8231..7239a33 100644 --- a/src/shell.rs +++ b/src/shell.rs @@ -1,4 +1,5 @@ use std::process::exit; +use std::io::prelude::*; pub const PRIVILEGE_LIST: [&str; 2] = ["sudo", "doas"]; @@ -92,3 +93,73 @@ pub fn last_command_expanded_alias(shell: &str) -> String { last_command.replacen(command, &expanded_command, 1) } + +pub fn print_command_with_env(shell: &str, binary_path: &str) { + let last_command; + let alias; + + match shell { + "bash" => { + last_command = "$(history 2)"; + alias = "$(alias)" + } + "zsh" => { + last_command = "$(fc -ln -1)"; + alias = "$(alias)" + } + "fish" => { + last_command = "$(history | head -n 1)"; + alias = "$(alias)"; + } + "nu" | "nush" | "nushell" => { + last_command = "(history | last).command"; + alias = "\"\""; + let command = format!( + "with-env {{ _PR_LAST_COMMAND : {},\ + _PR_ALIAS : {},\ + _PR_SHELL : nu }} \ + {{ {} }}", + last_command, alias, binary_path + ); + println!("{}\n", command); + println!("Add following to your config file? (Y/n)"); + let alias = format!("alias f = {}", command); + println!("{}", alias); + let mut input = String::new(); + std::io::stdin().read_line(&mut input).unwrap(); + match input.trim() { + "Y" | "y" | "" => { + let output = std::process::Command::new("nu") + .arg("-c") + .arg("echo $nu.config-path") + .output() + .expect("Failed to execute process"); + let config_path = String::from_utf8_lossy(&output.stdout); + let mut file = std::fs::OpenOptions::new() + .write(true) + .append(true) + .open(config_path.trim()) + .expect("Failed to open config file"); + + writeln!(file, "{}", alias).expect("Failed to write to config file"); + } + _ => std::process::exit(0), + }; + std::process::exit(0); + } + _ => { + println!("Unknown shell: {}", shell); + std::process::exit(1); + } + } + + println!( + "\ + _PR_LAST_COMMAND=\"{}\" \ + _PR_ALIAS=\"{}\" \ + _PR_SHELL=\"{}\" \ + \"{}\"", + last_command, alias, shell, binary_path + ); + std::process::exit(0); +}