From bcfbbb71288963ac4b7ead2483e91fda92af5fc8 Mon Sep 17 00:00:00 2001 From: katalx Date: Wed, 28 Jan 2026 22:58:22 -0500 Subject: fuzzy search! --- main.c | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) (limited to 'main.c') 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; } -- cgit v1.2.3