Add readline history

This commit is contained in:
Kiyomichi Kosaka
2022-12-03 11:32:34 +00:00
parent d294fab2e5
commit 0818d93f9a
2 changed files with 12 additions and 1 deletions
+1
View File
@@ -15,3 +15,4 @@ regex = "1.6.0"
rustyline = "10.0.0"
thiserror = "1.0.37"
anyerror = "0.1.7"
home = "0.5.4"
+10
View File
@@ -1,5 +1,6 @@
use rustyline::Editor;
use std::{cell::RefCell, rc::Rc};
use home::home_dir;
use crate::structs::{LKErr, Command, LK};
use crate::parser::command_parser;
@@ -31,10 +32,19 @@ impl LKRead {
}
pub fn read(&mut self) -> LKEval {
let history_file_path = home_dir().unwrap().join(".lesskey_history");
let history_file = history_file_path.as_path().to_str().unwrap();
self.rl.clear_history();
match self.rl.load_history(&history_file) {
Ok(_) => (),
Err(_) => { self.rl.add_history_entry("ls"); () }
}
self.cmd = match self.rl.readline(&*self.prompt) {
Ok(str) => str,
Err(err) => return LKEval::new(Command::Error(LKErr::ReadError(err.to_string())), self.state.clone()),
};
self.rl.add_history_entry(self.cmd.as_str());
match self.rl.save_history(&history_file) { Ok(_) => (), Err(_) => () }
match command_parser::cmd(self.cmd.as_str()) {
Ok(cmd) => LKEval::new(cmd, self.state.clone()),
Err(err) => LKEval::new(Command::Error(LKErr::ParseError(err)), self.state.clone()),