diff --git a/Cargo.lock b/Cargo.lock index 50f7213..79262b3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5,12 +5,3 @@ version = 3 [[package]] name = "jshell" version = "0.1.0" -dependencies = [ - "shell_completion", -] - -[[package]] -name = "shell_completion" -version = "0.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73937c192504363290613e241705a02dff92ae7c03f544e2a69bbef24cc1042c" diff --git a/Cargo.toml b/Cargo.toml index b2a72a2..023b8d3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,4 +4,3 @@ version = "0.1.0" edition = "2021" [dependencies] -shell_completion = "0.0.2" diff --git a/renovate.json b/renovate.json deleted file mode 100644 index c183f9d..0000000 --- a/renovate.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": [ - "local>Renovate/renovate-config" - ] -} diff --git a/src/main.rs b/src/main.rs index f18ab02..d4ce347 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,75 +1,13 @@ -use std::{env, io::{stdin, stdout, Write}, path::Path, process::{Child, Command, Stdio}}; +use std::{io::stdin, process::Command}; fn main(){ - loop { - println!(""); - println!("{}", env::current_dir().unwrap().to_str().unwrap()); - print!("> "); - let _ = stdout().flush(); + let mut input = String::new(); + stdin().read_line(&mut input).unwrap(); - let mut input = String::new(); - stdin().read_line(&mut input).unwrap(); + // read_line leaves a trailing newline, which trim removes + let command = input.trim(); - // must be peekable so we know when we are on the last command - let mut commands = input.trim().split(" | ").peekable(); - let mut previous_command = None; - - while let Some(command) = commands.next() { - - let mut parts = command.trim().split_whitespace(); - let command = parts.next().unwrap(); - let args = parts; - - match command { - "cd" => { - let new_dir = args.peekable().peek() - .map_or("/", |x| *x); - let root = Path::new(new_dir); - if let Err(e) = env::set_current_dir(&root) { - eprintln!("{}", e); - } - - previous_command = None; - }, - "exit" => return, - command => { - let stdin = previous_command - .map_or( - Stdio::inherit(), - |output: Child| Stdio::from(output.stdout.unwrap()) - ); - - let stdout = if commands.peek().is_some() { - // there is another command piped behind this one - // prepare to send output to the next command - Stdio::piped() - } else { - // there are no more commands piped behind this one - // send output to shell stdout - Stdio::inherit() - }; - - let output = Command::new(command) - .args(args) - .stdin(stdin) - .stdout(stdout) - .spawn(); - - match output { - Ok(output) => { previous_command = Some(output); }, - Err(e) => { - previous_command = None; - eprintln!("{}", e); - }, - }; - } - } - } - - if let Some(mut final_command) = previous_command { - // block until the final command has finished - let _ = final_command.wait(); - } - - } + Command::new(command) + .spawn() + .unwrap(); }