diff options
| author | Julian Hurst <julian.hurst92@gmail.com> | 2022-05-16 00:35:21 +0200 |
|---|---|---|
| committer | Julian Hurst <julian.hurst92@gmail.com> | 2022-05-16 00:35:21 +0200 |
| commit | 9740eee555cac43cc27e08a39a38e09a96ecb002 (patch) | |
| tree | 555c0fd89906364a8f527c8f1c72ab81b8303adf /main.ha | |
| parent | 35639332a5dc8e9b26e8299c999940a9b6ca2ddb (diff) | |
| download | ilhare-9740eee555cac43cc27e08a39a38e09a96ecb002.tar.gz | |
Add layout and a common widget type
Diffstat (limited to 'main.ha')
| -rw-r--r-- | main.ha | 34 |
1 files changed, 27 insertions, 7 deletions
@@ -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 => |
