From a888c09bd54de77fb2004754a0e14ce14a906232 Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Fri, 23 Feb 2024 11:32:47 -0500 Subject: more changes --- matrix-bin/src/repl.rs | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) (limited to 'matrix-bin/src/repl.rs') diff --git a/matrix-bin/src/repl.rs b/matrix-bin/src/repl.rs index 81fd289..1b5addc 100644 --- a/matrix-bin/src/repl.rs +++ b/matrix-bin/src/repl.rs @@ -1,3 +1,8 @@ +use std::{io::Write, sync::atomic::Ordering}; + +use matrix::{value::Value, vm::Interupt}; +use rustyline::Config; + use crate::State; pub struct Repl<'a> { @@ -11,14 +16,29 @@ impl<'a> Repl<'a> { } pub fn run(&mut self) { - let mut rl = rustyline::DefaultEditor::new().unwrap(); + + let interupt = self.state.vm.interupt(); + ctrlc::set_handler(move || { + interupt.store(Interupt::KeyboardInterupt as usize, Ordering::SeqCst); + }).unwrap(); + + let config = Config::builder() + .check_cursor_position(true) + .build(); + let mut rl = rustyline::DefaultEditor::with_config(config).unwrap(); loop { let Ok(line) = rl.readline(">> ") else { break; }; - if let Err(err) = self.state.execute(line) { - crate::error(err); + match self.state.execute(line) { + Err(err) => crate::error(err), + Ok(val) => { + if val != Value::Nil { + println!("{val}"); + } + } } + let _ = std::io::stdout().flush(); } } -- cgit v1.2.3-freya