From f40b8cac21d6627cb36c067a80d607abae7713f5 Mon Sep 17 00:00:00 2001 From: Oleksandr Kozachuk Date: Sun, 12 Apr 2026 17:28:06 +0200 Subject: [PATCH] REPL: inline output on same line as input (traditional Forth style) Move cursor back to end of input line so output appears inline: > 2 2 + . 4 ok instead of on a separate line. --- crates/cli/src/main.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/crates/cli/src/main.rs b/crates/cli/src/main.rs index 37cd150..3080692 100644 --- a/crates/cli/src/main.rs +++ b/crates/cli/src/main.rs @@ -311,11 +311,15 @@ fn cmd_eval_or_repl(file: Option<&str>) -> anyhow::Result<()> { match vm.evaluate(&line) { Ok(()) => { let output = vm.take_output(); - if !output.is_empty() { - print!("{output}"); - } if !vm.is_compiling() { - println!(" ok"); + // Move cursor back up to end of input line so + // output appears inline, like traditional Forth: + // > 2 2 + . 4 ok + let col = prompt.len() + line.len() + 1; + print!("\x1b[A\x1b[{col}G {output} ok"); + println!(); + } else if !output.is_empty() { + print!("{output}"); } } Err(e) => {