aboutsummaryrefslogtreecommitdiff
path: root/main.ha
diff options
context:
space:
mode:
Diffstat (limited to 'main.ha')
-rw-r--r--main.ha36
1 files changed, 34 insertions, 2 deletions
diff --git a/main.ha b/main.ha
index 9d2dfde..f1bd20e 100644
--- a/main.ha
+++ b/main.ha
@@ -6,9 +6,13 @@ use fmt;
use os;
use strings;
use unix::tty;
+use unix::signal;
+
+//let l: list::listwidget = list::listwidget {...};
+let u: mainUI = mainUI {...};
type mainUI = struct {
- list: list::listwidget,
+ list: *list::listwidget,
};
fn globalrunehandler(ui: *libui::ttyui, r: rune) bool = {
@@ -20,6 +24,8 @@ fn globalrunehandler(ui: *libui::ttyui, r: rune) bool = {
fn runehandler(l: *list::listwidget, r: rune) bool = {
switch (r) {
+ case 'f' =>
+ fmt::fprintln(os::stderr, "f in chat")!;
case 'j' =>
list::down(l);
case 'k' =>
@@ -44,7 +50,14 @@ fn runehandler(l: *list::listwidget, r: rune) bool = {
fmt::fprintln(os::stderr, "changed")!;
};
case '\n' =>
- // Enter seems to crash for now (compiler bug)
+ // For some reason enter doesn't send r == '\n'
+ fmt::fprintln(os::stderr, "This is not detected")!;
+ yield;
+ case =>
+ let us = utf8::encoderune(r);
+ if (len(us) > 0 && us[0] == 13u8) {
+ fmt::fprintln(os::stderr, "newline")!;
+ };
yield;
};
libui::clear(l.ui);
@@ -61,6 +74,21 @@ fn runehandler(l: *list::listwidget, r: rune) bool = {
return false;
};
+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;
+ } else {
+ yield len(u.list.items);
+ };
+ u.list.sz.rows = rows: u16;
+ u.list.sz.cols = sz.columns;
+ };
+};
+
export fn main() void = {
let in = match (io::drain(os::stdin)) {
case let in: []u8 =>
@@ -90,6 +118,10 @@ export fn main() void = {
fmt::fprintln(os::stderr, tty::strerror(e))!;
return;
};
+ u = mainUI {
+ list = &l,
+ };
+ signal::handle(signal::SIGWINCH, &sighandler, signal::flag::RESTART);
for (true) {
let r = match (libui::scan(ui)) {
case let r: rune =>