Add terminal control builtins: term_clear, cursor_to/up/down/col, term_size, term_save/restore_cursor, term_clear_line, print_inline, http_sse_post

Enables full TUI rendering from Engram programs — cursor positioning, screen
clearing, inline (no-newline) printing, terminal size detection via TIOCGWINSZ,
and SSE streaming with inline token output.
This commit is contained in:
Will Anderson
2026-04-28 14:08:32 -05:00
parent f546ed47df
commit 07cfde2402
2 changed files with 375 additions and 2 deletions
+12
View File
@@ -250,6 +250,18 @@ impl TypeEnv {
env.functions.insert(name.to_string(), str_fn(vec![s.clone()], s.clone()));
}
// Terminal control builtins
for name in &["term_clear", "term_save_cursor", "term_restore_cursor", "term_clear_line"] {
env.functions.insert(name.to_string(), str_fn(vec![], Type::Void));
}
env.functions.insert("print_inline".into(), str_fn(vec![u.clone()], Type::Void));
env.functions.insert("term_size".into(), str_fn(vec![], Type::Unknown));
env.functions.insert("cursor_to".into(), str_fn(vec![i.clone(), i.clone()], Type::Void));
env.functions.insert("cursor_up".into(), str_fn(vec![i.clone()], Type::Void));
env.functions.insert("cursor_down".into(), str_fn(vec![i.clone()], Type::Void));
env.functions.insert("cursor_col".into(), str_fn(vec![i.clone()], Type::Void));
env.functions.insert("http_sse_post".into(), str_fn(vec![s.clone(), s.clone(), s.clone()], s.clone()));
// Math
for name in &["math_abs","math_floor","math_ceil","math_round","math_sqrt"] {
env.functions.insert(name.to_string(), str_fn(vec![u.clone()], u.clone()));