summaryrefslogtreecommitdiff
path: root/cmd/il.ha
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/il.ha')
-rw-r--r--cmd/il.ha60
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);
+ };
+};