summaryrefslogtreecommitdiff
path: root/cmd/il.ha
blob: ce4b89ba2deebae2bf46b51872c001f2fb18e557 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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);
	};
};