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); }; };