aboutsummaryrefslogtreecommitdiff
path: root/main.ha
diff options
context:
space:
mode:
authorJulian Hurst <julian.hurst92@gmail.com>2022-05-16 00:35:21 +0200
committerJulian Hurst <julian.hurst92@gmail.com>2022-05-16 00:35:21 +0200
commit9740eee555cac43cc27e08a39a38e09a96ecb002 (patch)
tree555c0fd89906364a8f527c8f1c72ab81b8303adf /main.ha
parent35639332a5dc8e9b26e8299c999940a9b6ca2ddb (diff)
downloadilhare-9740eee555cac43cc27e08a39a38e09a96ecb002.tar.gz
Add layout and a common widget type
Diffstat (limited to 'main.ha')
-rw-r--r--main.ha34
1 files changed, 27 insertions, 7 deletions
diff --git a/main.ha b/main.ha
index 2f96e56..0aeda39 100644
--- a/main.ha
+++ b/main.ha
@@ -1,5 +1,7 @@
use libui;
-use libui::list;
+use libui::widget;
+use libui::widget::list;
+use libui::layout;
use encoding::utf8;
use io;
use fmt;
@@ -26,7 +28,8 @@ fn globalrunehandler(ui: *libui::ttyui, r: rune) bool = {
return false;
};
-fn runehandler(l: *list::listwidget, r: rune) bool = {
+fn runehandler(l: *widget::widget, r: rune) bool = {
+ const l = l: *list::listwidget;
switch (r) {
case 'j' =>
list::down(l);
@@ -40,6 +43,7 @@ fn runehandler(l: *list::listwidget, r: rune) bool = {
case let s: str =>
fmt::println(s)!;
case let s: []str =>
+ defer free(s);
const out = strings::join("\n", s...);
defer free(out);
fmt::println(out)!;
@@ -192,7 +196,6 @@ fn runehandler(l: *list::listwidget, r: rune) bool = {
fn sighandler(sig: int, info: *signal::siginfo, ucontext: *void) void = {
switch (sig) {
case signal::SIGWINCH =>
- fmt::fprintln(os::stderr, "winch")!;
let sz = libui::getwinsize(u.list.ui)!;
let rows: (u16 | size) = if (sz.rows - 2 < len(u.list.items)) {
yield sz.rows - 2;
@@ -215,16 +218,21 @@ export fn main() void = {
let sin = strings::fromutf8(in);
sin = strings::trim(sin, '\n');
let items = strings::split(sin, "\n");
- defer free(items);
let ui = libui::init();
defer libui::finish(&ui);
let l = list::newlist(ui, items...);
libui::addlistener(&ui, &globalrunehandler);
- list::addlistener(&l, &runehandler);
+ widget::addlistener(&l, &runehandler);
+
+ let layout = layout::newlayout(&l);
+
+ defer layout::finishall(&layout);
+
//defer free(searchterm);
libui::clear(l.ui);
- match (list::print(&l)) {
+
+ match (layout::print(layout)) {
case void =>
yield;
case let e: io::error =>
@@ -234,10 +242,22 @@ export fn main() void = {
fmt::fprintln(os::stderr, tty::strerror(e))!;
return;
};
+
+ //match (list::print(&l)) {
+ //case void =>
+ //yield;
+ //case let e: io::error =>
+ //fmt::fprintln(os::stderr, io::strerror(e))!;
+ //return;
+ //case let e: tty::error =>
+ //fmt::fprintln(os::stderr, tty::strerror(e))!;
+ //return;
+ //};
u = mainUI {
list = &l,
};
- signal::handle(signal::SIGWINCH, &sighandler, signal::flag::RESTART);
+ const sigs = signal::handle(signal::SIGWINCH, &sighandler, signal::flag::RESTART);
+ defer signal::restore(signal::SIGWINCH, &sigs);
for (true) {
let r = match (libui::scan(ui)) {
case let r: rune =>