aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Hurst <ark@mansus.space>2022-09-11 00:46:42 +0200
committerJulian Hurst <ark@mansus.space>2022-09-11 00:46:42 +0200
commit44081b5593f18bc5b29865e26f9b6fd89cb6c340 (patch)
tree017ecd8bb17f1fe44fa200293b85616df5fc1c20
parent84e398e20bb6d81ef23d14ee58b28a680d228501 (diff)
downloadilhare-44081b5593f18bc5b29865e26f9b6fd89cb6c340.tar.gz
Add filter feature
-rw-r--r--handlers.ha26
-rw-r--r--main.ha1
2 files changed, 27 insertions, 0 deletions
diff --git a/handlers.ha b/handlers.ha
index 2e7609f..e5140bb 100644
--- a/handlers.ha
+++ b/handlers.ha
@@ -114,6 +114,32 @@ fn runehandler(l: *widget::widget, r: libtui::key) bool = {
let c = l.cursor;
list::search(l, searchterm);
libtui::resume(&l.widget.ui);
+ case 'f' =>
+ //filter
+ libtui::suspend(&l.widget.ui);
+ fmt::fprint(l.widget.ui.f, "f: ")!;
+ let line = match (bufio::scanline(l.widget.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);
+ strings::freeall(itemscopy);
+ itemscopy = strings::dupall(l.items);
+ let newitems: []str = [];
+ defer strings::freeall(newitems);
+ for (let i = 0z; i < len(l.items); i += 1) {
+ if (strings::contains(l.items[i], strings::fromutf8(line))) {
+ append(newitems, l.items[i]);
+ };
+ };
+ list::setitems(l, newitems...);
+ libtui::resume(&l.widget.ui);
case 'o' =>
// order
sort::strings(l.items);
diff --git a/main.ha b/main.ha
index 3ef6b3c..c6403e2 100644
--- a/main.ha
+++ b/main.ha
@@ -158,4 +158,5 @@ export fn main() void = {
@fini fn finish() void = {
free(searchterm);
+ strings::freeall(itemscopy);
};