aboutsummaryrefslogtreecommitdiff
path: root/main.ha
diff options
context:
space:
mode:
Diffstat (limited to 'main.ha')
-rw-r--r--main.ha65
1 files changed, 55 insertions, 10 deletions
diff --git a/main.ha b/main.ha
index f1bd20e..4809a18 100644
--- a/main.ha
+++ b/main.ha
@@ -7,10 +7,13 @@ use os;
use strings;
use unix::tty;
use unix::signal;
+use bufio;
-//let l: list::listwidget = list::listwidget {...};
let u: mainUI = mainUI {...};
+let searchterm: str = "";
+let searchforward: bool = true;
+
type mainUI = struct {
list: *list::listwidget,
};
@@ -24,8 +27,6 @@ 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' =>
@@ -38,17 +39,60 @@ fn runehandler(l: *list::listwidget, r: rune) bool = {
return true;
case 'g' =>
list::top(l);
- //l.cursor = 0;
case 'G' =>
list::bottom(l);
- //l.cursor = len(l.items) - 1;
- case '/' =>
- // TODO add commandline support
- fmt::fprintln(os::stderr, "searching")!;
+ case 'n' =>
+ if (searchforward) {
+ list::search(l, searchterm);
+ } else {
+ list::rsearch(l, searchterm);
+ };
+ case 'N' =>
+ if (searchforward) {
+ list::rsearch(l, searchterm);
+ } else {
+ list::search(l, searchterm);
+ };
+ case '?' =>
+ // TODO add commandline support maybe
+ libui::suspend(&l.ui);
+ fmt::fprint(l.ui.f, '?')!;
+ let line = match (bufio::scanline(l.ui.f)) {
+ case let s: []u8 =>
+ yield s;
+ case io::EOF =>
+ fmt::fprintln(os::stderr, "EOF")!;
+ return true;
+ case let e: io::error =>
+ fmt::fprintln(os::stderr, io::strerror(e))!;
+ return true;
+ };
+ //defer free(line);
+ searchterm = strings::fromutf8(line);
+ searchforward = false;
let c = l.cursor;
- if (list::search(l, "workspace") != c) {
- fmt::fprintln(os::stderr, "changed")!;
+ list::rsearch(l, searchterm);
+ libui::resume(&l.ui);
+ case '/' =>
+ // TODO add commandline support maybe
+ libui::suspend(&l.ui);
+ fmt::fprint(l.ui.f, '/')!;
+ let line = match (bufio::scanline(l.ui.f)) {
+ case let s: []u8 =>
+ yield s;
+ case io::EOF =>
+ fmt::fprintln(os::stderr, "EOF")!;
+ return true;
+ case let e: io::error =>
+ fmt::fprintln(os::stderr, io::strerror(e))!;
+ return true;
};
+ //defer free(line);
+ searchterm = strings::fromutf8(line);
+ searchforward = true;
+ let c = l.cursor;
+ list::search(l, searchterm);
+ libui::resume(&l.ui);
case '\n' =>
// For some reason enter doesn't send r == '\n'
fmt::fprintln(os::stderr, "This is not detected")!;
@@ -107,6 +151,7 @@ export fn main() void = {
let l = list::newlist(ui, items...);
libui::addlistener(&ui, &globalrunehandler);
list::addlistener(&l, &runehandler);
+ defer free(searchterm);
libui::clear(l.ui);
match (list::print(&l)) {
case void =>