summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorJulian Hurst <ark@mansus.space>2025-03-20 01:34:10 +0100
committerJulian Hurst <ark@mansus.space>2025-03-20 01:34:10 +0100
commitb0d602f1e0761857ab818c775cd403d5014f0f60 (patch)
tree1539304411ed37b568004578ce9fd32030cb3b5d /cmd
parent8b41e03bfd1ace4670b0c220bf3eb37dc0368053 (diff)
downloadhare-tui-b0d602f1e0761857ab818c775cd403d5014f0f60.tar.gz
Add il.ha
Diffstat (limited to 'cmd')
-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);
+ };
+};