diff options
| -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); + }; +}; |
