From 9e27e7568271b6febc3dc169f052056d564666dd Mon Sep 17 00:00:00 2001 From: krolyxon Date: Fri, 10 Nov 2023 01:06:55 +0530 Subject: [PATCH] patch: fuzzymatch --- .gitignore | 0 Makefile | 0 README.md | 0 arg.h | 0 config.h | 3 +- config.mk | 2 +- dmenu | Bin 48464 -> 43632 bytes dmenu.1 | 0 dmenu.c | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++ drw.c | 0 drw.h | 0 stest | Bin 21536 -> 16408 bytes stest.1 | 0 stest.c | 0 util.c | 0 util.h | 0 16 files changed, 93 insertions(+), 2 deletions(-) mode change 100644 => 100755 .gitignore mode change 100644 => 100755 Makefile mode change 100644 => 100755 README.md mode change 100644 => 100755 arg.h mode change 100644 => 100755 config.h mode change 100644 => 100755 config.mk mode change 100644 => 100755 dmenu.1 mode change 100644 => 100755 dmenu.c mode change 100644 => 100755 drw.c mode change 100644 => 100755 drw.h mode change 100644 => 100755 stest.1 mode change 100644 => 100755 stest.c mode change 100644 => 100755 util.c mode change 100644 => 100755 util.h diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/Makefile b/Makefile old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/arg.h b/arg.h old mode 100644 new mode 100755 diff --git a/config.h b/config.h old mode 100644 new mode 100755 index 32aae14..a32e834 --- a/config.h +++ b/config.h @@ -2,12 +2,13 @@ /* Default settings; can be overriden by command line. */ static int topbar = 1; /* -b option; if 0, dmenu appears at bottom */ +static int fuzzy = 1; /* -fn option overrides fonts[0]; default X11 font or font set */ static const char *fonts[] = { "JetBrainsMono Nerd Font:size=10", "JetBrainsMono Nerd Font:pixelsize=10:antialias=true:autohint=true", - "emoji:size=10" // For rendering emojis + "emoji:size=10" // For rendering emojis }; static const unsigned int bgalpha = 0xe0; static const unsigned int fgalpha = OPAQUE; diff --git a/config.mk b/config.mk old mode 100644 new mode 100755 index 8531fb9..1641c06 --- a/config.mk +++ b/config.mk @@ -20,7 +20,7 @@ FREETYPEINC = /usr/include/freetype2 # includes and libs INCS = -I$(X11INC) -I$(FREETYPEINC) -LIBS = -L$(X11LIB) -lX11 $(XINERAMALIBS) $(FREETYPELIBS) -lXrender +LIBS = -L$(X11LIB) -lX11 $(XINERAMALIBS) $(FREETYPELIBS) -lXrender -lm # flags CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700 -D_POSIX_C_SOURCE=200809L -DVERSION=\"$(VERSION)\" $(XINERAMAFLAGS) diff --git a/dmenu b/dmenu index b5e52df1628824509240467cd1247cc0d3e80140..229e8443215f8acee361102e7e90e966fd5b0818 100755 GIT binary patch literal 43632 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 WSHo~;aM<*lf3HeROiGZ%3jYW1nT6f} literal 48464 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 #include +#include #include #include #include @@ -36,6 +37,7 @@ struct item { char *text; struct item *left, *right; int out; + double distance; }; static char text[BUFSIZ] = ""; @@ -68,6 +70,7 @@ static int (*fstrncmp)(const char *, const char *, size_t) = strncmp; static char *(*fstrstr)(const char *, const char *) = strstr; + static void xinitvisual() { @@ -265,9 +268,94 @@ grabkeyboard(void) die("cannot grab keyboard"); } +int +compare_distance(const void *a, const void *b) +{ + struct item *da = *(struct item **) a; + struct item *db = *(struct item **) b; + + if (!db) + return 1; + if (!da) + return -1; + + return da->distance == db->distance ? 0 : da->distance < db->distance ? -1 : 1; +} + +void +fuzzymatch(void) +{ + /* bang - we have so much memory */ + struct item *it; + struct item **fuzzymatches = NULL; + char c; + int number_of_matches = 0, i, pidx, sidx, eidx; + int text_len = strlen(text), itext_len; + + matches = matchend = NULL; + + /* walk through all items */ + for (it = items; it && it->text; it++) { + if (text_len) { + itext_len = strlen(it->text); + pidx = 0; /* pointer */ + sidx = eidx = -1; /* start of match, end of match */ + /* walk through item text */ + for (i = 0; i < itext_len && (c = it->text[i]); i++) { + /* fuzzy match pattern */ + if (!fstrncmp(&text[pidx], &c, 1)) { + if(sidx == -1) + sidx = i; + pidx++; + if (pidx == text_len) { + eidx = i; + break; + } + } + } + /* build list of matches */ + if (eidx != -1) { + /* compute distance */ + /* add penalty if match starts late (log(sidx+2)) + * add penalty for long a match without many matching characters */ + it->distance = log(sidx + 2) + (double)(eidx - sidx - text_len); + /* fprintf(stderr, "distance %s %f\n", it->text, it->distance); */ + appenditem(it, &matches, &matchend); + number_of_matches++; + } + } else { + appenditem(it, &matches, &matchend); + } + } + + if (number_of_matches) { + /* initialize array with matches */ + if (!(fuzzymatches = realloc(fuzzymatches, number_of_matches * sizeof(struct item*)))) + die("cannot realloc %u bytes:", number_of_matches * sizeof(struct item*)); + for (i = 0, it = matches; it && i < number_of_matches; i++, it = it->right) { + fuzzymatches[i] = it; + } + /* sort matches according to distance */ + qsort(fuzzymatches, number_of_matches, sizeof(struct item*), compare_distance); + /* rebuild list of matches */ + matches = matchend = NULL; + for (i = 0, it = fuzzymatches[i]; i < number_of_matches && it && \ + it->text; i++, it = fuzzymatches[i]) { + appenditem(it, &matches, &matchend); + } + free(fuzzymatches); + } + curr = sel = matches; + calcoffsets(); +} + static void match(void) { + if(fuzzy) { + fuzzymatch(); + return; + } static char **tokv = NULL; static int tokn = 0; @@ -927,6 +1015,8 @@ main(int argc, char *argv[]) topbar = 0; else if (!strcmp(argv[i], "-f")) /* grabs keyboard before reading stdin */ fast = 1; + else if (!strcmp(argv[i], "-F")) /* grabs keyboard before reading stdin */ + fuzzy = 0; else if (!strcmp(argv[i], "-i")) { /* case-insensitive item matching */ fstrncmp = strncasecmp; fstrstr = cistrstr; diff --git a/drw.c b/drw.c old mode 100644 new mode 100755 diff --git a/drw.h b/drw.h old mode 100644 new mode 100755 diff --git a/stest b/stest index 90339af45b39fd06e57d1208173b0ac918fadf24..f1936985114eb58effdf77e3a704b8100e797877 100755 GIT binary patch delta 3127 zcmZ`*eQZ;J9?w#x z$4CF{78aJMV1e0aM|oehiu%0&ZHqEg>|+DeQ6AO2qMDa(eFn{I@(gv;{~K&Xa~oko zMkN20$fk!k&x-4wdgSJ_J@Y4*PCu7--{kR(-()P=<$CrR*IL$;xidnEkxJ|^bag!VyNt=fAdwX*U$smtuIJ~S^AjCj=0AtbTXI3HU%U3J?+KhBwRQY8j z>QfzbLB|Q^H#>?iHLEJ-(xg`TcZTgTJ90l+qzbIv>|nn$Hx(0~>X->e8x<$aj0%oi z>mt?2u0oq8AtzT{#F|;I;9x%mwq_BV&Ah-K2iCWU&1JiQy#j1-5o=+u0sA$u-HTWo zn+A4uRu1i(Y|MJsbi|q+Iproq8cKu=%8VqxZ$3w`D0P>CRw}N**HY$#8sZpBWjoj_(ur1neAmMCDK4(^@Qy&8>DT&tDRVkL?Nwg1#i9ARB zhYO*}FQ*1CSq8_!qqXs>W$1ON1T1I&?vDqYN90>{?+$yE-$+hR8*OJL3~U+-z(F`NAN9Yq;RSbmYPyq#!? z8Q%VM2tk zK6^=U0GyP92UipF|GDMQZNEkatCyN!4zV?{A#gTjc_2F z5KjU!*a0}X^J_(U7mrJFg2nS!MFN0f2$`Nl>H)wpz^5~F^i1>XSe001=ww} z_Zauhg9O{4rb_Woxg>Kbf6;7UEiFS+T-=Q!cGko) za4&Dvz#CP_-de2iqY$b-3z_8Yw%opZSRfqcoe!MTq06aSh|y^J0%j0eDSQ6}mcUXd z$yXN?<)SGCSdDZexo<%!ge^bltODjqX_c{}3Y|^KsmUvaPT`2yZ*%@jQQCkk{Zdh0 z1RG#6v69ZPQ(`lXu`fhBJZ$lU?QZ96|q+64{CB9|_nSmU>2AWwz^u zDk@eD>0=&O8SQ7Ct`543op8Ag$!7ME%au2W*CQ0XHF+_!JokD!!8+Y#^dQ^gewjuY zt@-uJs87{5wzRAht2SssUTh-+%r)YdfAc-Se!3O3;@^56|?AWO+U?O(J~ zZAsv?a(+zXTQR9n@|oZ7D8`{u0$)ET$%tx5Dcb{Txu%Xkq|&&&ys%R~M~~WrjcgM& zRx|6sQsN*x-)MKSv(oT+{sZI0vwo;+H|S zf_iVXS5c*JbDzta&xE#4dgKqdI;+J`+!OyMkC4Ua1_v#{Z?Vgu&i~%N>bOrU|7PR2 z=4tT6RS|7!Ut0lV`3drdoV$-il_u=F4_8i>ZtTuro3s3r;v-`ePQ+B3TR5nlfrD(J ztzMYW&;)C2ug@ZSCd_Pq`&vOiHFNAt`$hUkHn7Pp=xcqQo!N9#&|j2&>`X_!puZ#g z*+NIXP2Y9;yV=M5LAQ|5_Gp6b3)W}pJ2vTN?*!Kh`i6u6!Df1hHFh=&hicRrm9T-% uve5}6dvZ&D!MH~9cN6H#;g`eWTUKRR>s0qW2KL^TwZcHX3JYQGW&Z)~{uA~9 literal 21536 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 XEUllX+Y%LN*vp9l(%uq-5>fmI+!z?r diff --git a/stest.1 b/stest.1 old mode 100644 new mode 100755 diff --git a/stest.c b/stest.c old mode 100644 new mode 100755 diff --git a/util.c b/util.c old mode 100644 new mode 100755 diff --git a/util.h b/util.h old mode 100644 new mode 100755