Skip to content

Instantly share code, notes, and snippets.

@daimatz
Created February 27, 2012 20:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save daimatz/1926791 to your computer and use it in GitHub Desktop.
Save daimatz/1926791 to your computer and use it in GitHub Desktop.
zsh menuselect-isearch-case-insensitive
*** Src/Zle/complist.c.orig 2012-02-28 05:00:59.000000000 +0900
--- Src/Zle/complist.c 2012-02-28 05:00:42.000000000 +0900
***************
*** 267,272 ****
--- 267,301 ----
static int lr_caplen, max_caplen;
+ /* This is case-insensitive strstr.
+ * If pattern exists in string, the function return 1.
+ * If not so, it return 0. */
+
+ int strstri(const char *string, const char *pattern)
+ {
+ if ('\0' == pattern[0])
+ return 0;
+
+ const size_t slength = strlen(string);
+ const size_t plength = strlen(pattern);
+
+ char lstring[slength+1], lpattern[plength+1];
+ size_t i;
+ for (i = 0; i < slength; i++) {
+ lstring[i] = tolower(string[i]);
+ }
+ lstring[i] = '\0';
+ for (i = 0; i < plength; i++) {
+ lpattern[i] = tolower(pattern[i]);
+ }
+ lpattern[i] = '\0';
+
+ if (strstr(lstring, lpattern))
+ return 1;
+ else
+ return 0;
+ }
+
/* This parses the value of a definition (the part after the `=').
* The return value is a pointer to the character after it. */
***************
*** 2304,2310 ****
l = *p;
m = *mtunmark(*p);
! if (strstr((m->disp ? m->disp : m->str), msearchstr)) {
mcol = x;
mline = y;
--- 2333,2339 ----
l = *p;
m = *mtunmark(*p);
! if (strstri((m->disp ? m->disp : m->str), msearchstr)) {
mcol = x;
mline = y;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment