diff options
| author | Julian Hurst <ark@mansus.space> | 2025-03-17 23:13:06 +0100 |
|---|---|---|
| committer | Julian Hurst <ark@mansus.space> | 2025-03-17 23:13:06 +0100 |
| commit | a574b7a367956efca0e0a13123bc60c98b9908c9 (patch) | |
| tree | 56399fb7c4fada35b5990ce94950827aef484980 /tui/tui.ha | |
| parent | 0d0186d63712472a037cf510812e68774c73c12f (diff) | |
| download | hare-tui-a574b7a367956efca0e0a13123bc60c98b9908c9.tar.gz | |
Initial scrolllist and input support
Diffstat (limited to 'tui/tui.ha')
| -rw-r--r-- | tui/tui.ha | 26 |
1 files changed, 25 insertions, 1 deletions
@@ -1,18 +1,41 @@ use fmt; use io; use unix::tty; +use errors; +use encoding::utf8; +use bufio; export type tui = struct { out: io::file, clear: bool, + tq: tty::termios, }; -export fn init() (tui | tty::error) = { +export type skey = enum { + BS, +}; + +export type key = (skey | rune); + +export fn init() (tui | tty::error | errors::error) = { const f = tty::open()?; + const tq = tty::termios_query(f)?; + tty::noncanonical(&tq)?; doclear(f); return tui { out = f, clear = false, + tq = tq, + }; + +}; + +export fn read(state: *tui) (key | utf8::invalid | io::error | io::EOF) = { + match (bufio::read_rune(state.out)?) { + case let r: rune => + return r; + case io::EOF => + return io::EOF; }; }; @@ -27,5 +50,6 @@ export fn clear(state: *tui) void = { }; export fn finish(state: *tui) void = { + tty::termios_restore(&state.tq); io::close(state.out)!; }; |
