diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.rs | 18 | ||||
| -rw-r--r-- | src/run/mod.rs | 15 |
2 files changed, 17 insertions, 16 deletions
diff --git a/src/main.rs b/src/main.rs index bcad011..92ce812 100644 --- a/src/main.rs +++ b/src/main.rs @@ -341,15 +341,29 @@ fn event_loop() { // Enter b'\r' => { - let line = se.line.dump(); + let line = se.line.into_bytes(); + if !line.is_empty() { + let parsed = match parse::do_parse(&line) { + Ok(p) => p, + Err((crate::parse::ParseError::Eof, _)) => { + se.line.add(b'\n'); + print!("\r\n> "); + continue + }, + Err(e) => { + println!("{e:?}\n{}", se.prompt()); + continue; + } + }; print!("\r\n"); let entry = HistoryEntry::new(line.clone()); history::persist(&entry); se.history.push(entry); se.history_visit = 0; + se.line.dump(); drop(se); - run::run(session.clone(), line); + run::run(session.clone(), parsed); } } diff --git a/src/run/mod.rs b/src/run/mod.rs index 2224eac..091c662 100644 --- a/src/run/mod.rs +++ b/src/run/mod.rs @@ -419,20 +419,7 @@ fn exec(se: Arc<Mutex<Session>>, ast: Ast<PreExpansion>) -> Result<(), ExecError exec.exec_loop(cmd, &mut [c1, c2]) } -pub fn run(se: Arc<Mutex<Session>>, cmd: Vec<u8>) { - let parsed = parse::do_parse(&cmd); - let parsed = match parsed { - Ok(p) => p, - Err(err) => { - se.lock().unwrap().raw.disable(); - println!("{:?}: {}", err.0, String::from_utf8_lossy(err.1)); - print!("{}", se.lock().unwrap().prompt()); - std::io::stdout().lock().flush().unwrap(); - se.lock().unwrap().raw.enable(); - return; - } - }; - +pub fn run(se: Arc<Mutex<Session>>, parsed: Ast<PreExpansion>) { se.lock().unwrap().raw.disable(); let result = exec(se.clone(), parsed); se.lock().unwrap().raw.enable(); |
