diff options
| author | katalx | 2026-01-28 22:58:22 -0500 |
|---|---|---|
| committer | katalx | 2026-01-28 22:58:22 -0500 |
| commit | bcfbbb71288963ac4b7ead2483e91fda92af5fc8 (patch) | |
| tree | 17224afd337f4c0c97fb957ba448811df3b73763 /main.c | |
| parent | 4bfa87c212c3f52ac3b987aaad2dd5757e82144a (diff) | |
fuzzy search!
Diffstat (limited to 'main.c')
| -rw-r--r-- | main.c | 36 |
1 files changed, 21 insertions, 15 deletions
@@ -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; } |
