summaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
authorkatalx2026-01-28 22:58:22 -0500
committerkatalx2026-01-28 22:58:22 -0500
commitbcfbbb71288963ac4b7ead2483e91fda92af5fc8 (patch)
tree17224afd337f4c0c97fb957ba448811df3b73763 /main.c
parent4bfa87c212c3f52ac3b987aaad2dd5757e82144a (diff)
fuzzy search!
Diffstat (limited to 'main.c')
-rw-r--r--main.c36
1 files changed, 21 insertions, 15 deletions
diff --git a/main.c b/main.c
index c2b9946..f5bfb51 100644
--- a/main.c
+++ b/main.c
@@ -13,6 +13,7 @@
#include "dynarr.h"
#include "str.h"
#include "ui.h"
+#include "fuzzy.h"
typedef DYNARR(char) DynStr;
@@ -64,23 +65,30 @@ read_all(FILE *f, DynStr *out, Arena *a)
int
main(int argc, char **argv)
{
- Arena a = { 0 };
+ Arena perm = { 0 };
+ Arena scratch = { 0 };
DynStr input = { 0 };
int inpi = 0;
int seli = 0;
- UiOpts opt = { 0 };
+ UiOpts opt_src = { 0 };
DynStr buf = { 0 };
- if (read_all(stdin, &buf, &a)) err(1, "stdin");
+ if (read_all(stdin, &buf, &perm)) err(1, "stdin");
for (Str src = { buf.v, buf.n }; src.n > 0; ) {
Cut c = str_cut(src, '\n');
- DA_APUSH(&opt, &a, c.head);
+ DA_APUSH(&opt_src, &perm, c.head);
src = c.tail;
}
- if (!opt.n) return 0;
+ if (!opt_src.n) return 0;
- ui_init(argc, argv, opt);
+ UiOpts opt = {
+ .v = new_arr(&perm, Str, opt_src.n),
+ .n = opt_src.n,
+ };
+
+ ui_init(argc, argv, opt_src);
+ DA_FIT(&input, 32);
for (UiEvent ev; ui_wait_event(&ev); ) {
switch (ev.type) {
@@ -121,14 +129,11 @@ main(int argc, char **argv)
}
break;
case UI_REDRAW:
- draw:
- ui_draw(
- (Str) { input.v, input.n },
- inpi,
- seli,
- opt
- );
- break;
+ draw: {
+ Str s = { input.v, input.n };
+ opt.n = fz_sort(opt.v, opt_src.v, opt_src.n, s, &scratch);
+ ui_draw(s, inpi, seli, opt);
+ } break;
case UI_QUIT:
goto done;
default:
@@ -138,6 +143,7 @@ main(int argc, char **argv)
done:
ui_fini();
- arena_free(&a);
+ arena_free(&perm);
+ arena_free(&scratch);
return 0;
}