use rustyline::error::ReadlineError; use rustyline::Editor; mod builtins; mod parser; mod prompt; fn main() { match std::fs::read_to_string("/etc/motd") { Ok(motd) => print!("{}", motd), Err(_) => {} } let prompt = prompt::Prompt::new().unwrap(); let mut cwd = std::env::current_dir().unwrap(); // `()` can be used when no completer is required let mut rl = Editor::<()>::new(); /*if rl.load_history("history.txt").is_err() { println!("No previous history."); }*/ 'repl: loop { let readline = rl.readline(&prompt.print(&cwd)); match readline { Ok(line) => { rl.add_history_entry(line.as_str()); let commands = parser::parse(&line); match commands[0] { "cd" => match builtins::cd(&commands[1..], &prompt.home) { Ok(p) => cwd = p, Err(e) => eprintln!("Error: {}", e), }, "exit" => { break 'repl; } _ => { builtins::run(commands[0], &commands[1..]); } } //println!("Line: {}", line); } Err(ReadlineError::Interrupted) => { println!("CTRL-C"); continue; } Err(ReadlineError::Eof) => { println!("CTRL-D"); break; } Err(err) => { println!("Error: {:?}", err); break; } } } //rl.save_history("history.txt").unwrap(); }