aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Hurst <ark@mansus.space>2022-05-17 17:25:25 +0200
committerJulian Hurst <ark@mansus.space>2022-05-17 17:25:25 +0200
commit952ab4404ffcbb43b6a95e640c6de4fb08de5c0a (patch)
tree276cb10d071e4dcb7c7be51377d0ca325d69ea38
parent5e1a84d707b0ef7f8a80868870a7f2fc12f75a31 (diff)
downloadilhare-952ab4404ffcbb43b6a95e640c6de4fb08de5c0a.tar.gz
Move ttyui to widget
-rw-r--r--handlers.ha46
-rw-r--r--libui/layout/layout.ha2
-rw-r--r--libui/widget/list/list.ha5
-rw-r--r--libui/widget/widget.ha2
-rw-r--r--main.ha4
5 files changed, 31 insertions, 28 deletions
diff --git a/handlers.ha b/handlers.ha
index ef374ef..41f895f 100644
--- a/handlers.ha
+++ b/handlers.ha
@@ -34,7 +34,7 @@ fn runehandler(l: *widget::widget, r: rune) bool = {
list::pageup(l);
case 'l' =>
// to print properly suspend the ui, print, then resume
- libui::suspend(&l.ui);
+ libui::suspend(&l.widget.ui);
//fmt::println(l.items[l.cursor])!;
match (list::selected(*l)) {
case let s: str =>
@@ -45,7 +45,7 @@ fn runehandler(l: *widget::widget, r: rune) bool = {
defer free(out);
fmt::println(out)!;
};
- libui::resume(&l.ui);
+ libui::resume(&l.widget.ui);
return true;
case 'g' =>
list::top(l);
@@ -65,9 +65,9 @@ fn runehandler(l: *widget::widget, r: rune) bool = {
};
case '?' =>
// TODO add commandline support maybe
- libui::suspend(&l.ui);
- fmt::fprint(l.ui.f, '?')!;
- let line = match (bufio::scanline(l.ui.f)) {
+ libui::suspend(&l.widget.ui);
+ fmt::fprint(l.widget.ui.f, '?')!;
+ let line = match (bufio::scanline(l.widget.ui.f)) {
case let s: []u8 =>
yield s;
case io::EOF =>
@@ -82,12 +82,12 @@ fn runehandler(l: *widget::widget, r: rune) bool = {
searchforward = false;
let c = l.cursor;
list::rsearch(l, searchterm);
- libui::resume(&l.ui);
+ libui::resume(&l.widget.ui);
case '/' =>
// TODO add commandline support maybe
- libui::suspend(&l.ui);
- fmt::fprint(l.ui.f, '/')!;
- let line = match (bufio::scanline(l.ui.f)) {
+ libui::suspend(&l.widget.ui);
+ fmt::fprint(l.widget.ui.f, '/')!;
+ let line = match (bufio::scanline(l.widget.ui.f)) {
case let s: []u8 =>
yield s;
case io::EOF =>
@@ -102,7 +102,7 @@ fn runehandler(l: *widget::widget, r: rune) bool = {
searchforward = true;
let c = l.cursor;
list::search(l, searchterm);
- libui::resume(&l.ui);
+ libui::resume(&l.widget.ui);
case 'o' =>
// order
sort::strings(l.items);
@@ -114,9 +114,9 @@ fn runehandler(l: *widget::widget, r: rune) bool = {
list::setitems(l, itemscopy...);
case 's' =>
// TODO add commandline support maybe
- libui::suspend(&l.ui);
- fmt::fprint(l.ui.f, "s: ")!;
- let line = match (bufio::scanline(l.ui.f)) {
+ libui::suspend(&l.widget.ui);
+ fmt::fprint(l.widget.ui.f, "s: ")!;
+ let line = match (bufio::scanline(l.widget.ui.f)) {
case let s: []u8 =>
yield s;
case io::EOF =>
@@ -128,12 +128,12 @@ fn runehandler(l: *widget::widget, r: rune) bool = {
};
defer free(line);
list::containsmark(l, strings::fromutf8(line));
- libui::resume(&l.ui);
+ libui::resume(&l.widget.ui);
case 'S' =>
// TODO add commandline support maybe
- libui::suspend(&l.ui);
- fmt::fprint(l.ui.f, "S: ")!;
- let line = match (bufio::scanline(l.ui.f)) {
+ libui::suspend(&l.widget.ui);
+ fmt::fprint(l.widget.ui.f, "S: ")!;
+ let line = match (bufio::scanline(l.widget.ui.f)) {
case let s: []u8 =>
yield s;
case io::EOF =>
@@ -145,12 +145,12 @@ fn runehandler(l: *widget::widget, r: rune) bool = {
};
defer free(line);
list::fnmatchmark(l, strings::fromutf8(line));
- libui::resume(&l.ui);
+ libui::resume(&l.widget.ui);
case 'r' =>
// TODO add commandline support maybe
- libui::suspend(&l.ui);
- fmt::fprint(l.ui.f, "r: ")!;
- let line = match (bufio::scanline(l.ui.f)) {
+ libui::suspend(&l.widget.ui);
+ fmt::fprint(l.widget.ui.f, "r: ")!;
+ let line = match (bufio::scanline(l.widget.ui.f)) {
case let s: []u8 =>
yield s;
case io::EOF =>
@@ -168,7 +168,7 @@ fn runehandler(l: *widget::widget, r: rune) bool = {
case let e: regex::error =>
fmt::fprintln(os::stderr, regex::strerror(e))!;
};
- libui::resume(&l.ui);
+ libui::resume(&l.widget.ui);
case ' ' =>
list::tmark(l);
list::down(l);
@@ -185,7 +185,7 @@ fn runehandler(l: *widget::widget, r: rune) bool = {
};
yield;
};
- libui::clear(l.ui);
+ libui::clear(l.widget.ui);
match (list::print(l)) {
case void =>
yield;
diff --git a/libui/layout/layout.ha b/libui/layout/layout.ha
index ef6bf71..c15626f 100644
--- a/libui/layout/layout.ha
+++ b/libui/layout/layout.ha
@@ -1,3 +1,4 @@
+use libui;
use libui::widget;
use io;
use unix::tty;
@@ -18,6 +19,7 @@ export fn newlayout(widgets: *widget::widget...) layout = {
// Display all the widgets contained in the given layout.
export fn print(layout: layout) (void | widget::error) = {
+ libui::clear(layout.widgets[0].ui);
for (let i = 0z; i < len(layout.widgets); i += 1) {
match (layout.widgets[i].print) {
case null =>
diff --git a/libui/widget/list/list.ha b/libui/widget/list/list.ha
index 6506ce1..e4b3209 100644
--- a/libui/widget/list/list.ha
+++ b/libui/widget/list/list.ha
@@ -13,7 +13,6 @@ use set;
export type listwidget = struct {
widget: widget::widget,
- ui: libui::ttyui,
items: []str,
marked: set::set,
cursor: size,
@@ -51,9 +50,9 @@ export fn newlist(ui: libui::ttyui, items: str...) listwidget = {
widget = widget::widget {
print = &print,
finish = &finish,
+ ui = ui,
...
},
- ui = ui,
items = items,
marked = set::set {...},
cursor = 0z,
@@ -134,7 +133,7 @@ export fn print(list: *widget::widget) (void | widget::error) = {
// unsupported?
//io::copy(list.ui.f, &st)?;
let s = strio::string(&st);
- libui::print(list.ui, s);
+ libui::print(list.widget.ui, s);
io::close(&st)?;
};
diff --git a/libui/widget/widget.ha b/libui/widget/widget.ha
index 1f23aac..3bccd2f 100644
--- a/libui/widget/widget.ha
+++ b/libui/widget/widget.ha
@@ -1,3 +1,4 @@
+use libui;
use io;
use unix::tty;
@@ -50,6 +51,7 @@ export type widget = struct {
print: nullable *print,
finish: nullable *finish,
listeners: []listener,
+ ui: libui::ttyui,
};
// Add a listener to the given widget.
diff --git a/main.ha b/main.ha
index 298087d..bff260e 100644
--- a/main.ha
+++ b/main.ha
@@ -22,7 +22,7 @@ type mainUI = struct {
fn sighandler(sig: int, info: *signal::siginfo, ucontext: *void) void = {
switch (sig) {
case signal::SIGWINCH =>
- let sz = libui::getwinsize(u.list.ui)!;
+ let sz = libui::getwinsize(u.list.widget.ui)!;
let rows: (u16 | size) = if (sz.rows - 2 < len(u.list.items)) {
yield sz.rows - 2;
} else {
@@ -57,7 +57,7 @@ export fn main() void = {
defer layout::finishall(&layout);
//defer free(searchterm);
- libui::clear(l.ui);
+ libui::clear(l.widget.ui);
match (layout::print(layout)) {
case void =>