diff options
| author | Julian Hurst <ark@mansus.space> | 2025-03-20 01:34:10 +0100 |
|---|---|---|
| committer | Julian Hurst <ark@mansus.space> | 2025-03-20 01:34:10 +0100 |
| commit | b0d602f1e0761857ab818c775cd403d5014f0f60 (patch) | |
| tree | 1539304411ed37b568004578ce9fd32030cb3b5d /cmd | |
| parent | 8b41e03bfd1ace4670b0c220bf3eb37dc0368053 (diff) | |
| download | hare-tui-b0d602f1e0761857ab818c775cd403d5014f0f60.tar.gz | |
Add il.ha
Diffstat (limited to 'cmd')
| -rw-r--r-- | cmd/il.ha | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/cmd/il.ha b/cmd/il.ha new file mode 100644 index 0000000..ce4b89b --- /dev/null +++ b/cmd/il.ha @@ -0,0 +1,60 @@ +use tui; +use tui::widget::list; +use tui::layout; +use bufio; +use os; +use strings; +use fmt; + +export fn main() void = { + const scanner = bufio::newscanner(os::stdin); + defer bufio::finish(&scanner); + let items: []str = []; + for (let line: const str => bufio::scan_line(&scanner)!) { + append(items, strings::dup(line)); + }; + defer strings::freeall(items); + const state = tui::init()!; + defer tui::finish(&state); + let li = list::newscrolllist( + &state, + (1, 1), + void, + void, + items... + )!; + let vl = layout::newvlayout(&li); + defer layout::finishvlayout(&vl); + + vl.layout.print(&vl); + + for (true) { + const r = tui::read(&state)!; + if (r == 'j') { + list::down(&li); + }; + if (r == 'k') { + list::up(&li); + }; + if (r == 'J') { + list::framedown(&li); + }; + if (r == 'K') { + list::frameup(&li); + }; + if (r == 'g') { + list::top(&li); + }; + if (r == 'G') { + list::bottom(&li); + }; + if (r == 'q') { + break; + }; + if (r == 'l') { + fmt::println(li.items[li.cursor])!; + break; + }; + vl.layout.print(&vl); + }; +}; |
