aboutsummaryrefslogtreecommitdiffstats
path: root/src/main.rs
diff options
context:
space:
mode:
authorJonas Maier <jonas@x77.dev>2026-03-18 13:34:21 +0100
committerJonas Maier <jonas@x77.dev>2026-03-18 13:34:21 +0100
commite4914c1d1eb703b7c3c5a27a777f42e211663298 (patch)
treed129c350ee7088ae66688d31866fd02135cfed3e /src/main.rs
parentd8cceb822b8e2f2de189a1d4461c89311b82e752 (diff)
downloadpish-e4914c1d1eb703b7c3c5a27a777f42e211663298.tar.gz
multiline input
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs18
1 files changed, 16 insertions, 2 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);
}
}