Xinqi Bao's Git
projects
/
dmenu.git
/ blobdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
inline
| side by side
revert using strcasestr and use a more optimized portable version
[dmenu.git]
/
dmenu.c
diff --git
a/dmenu.c
b/dmenu.c
index
65f25ce
..
88d2f12
100644
(file)
--- a/
dmenu.c
+++ b/
dmenu.c
@@
-103,13
+103,21
@@
cleanup(void)
}
static char *
}
static char *
-cistrstr(const char *s, const char *sub)
+cistrstr(const char *h, const char *n)
+
{
{
- size_t
len
;
+ size_t
i
;
- for (len = strlen(sub); *s; s++)
- if (!strncasecmp(s, sub, len))
- return (char *)s;
+ if (!n[0])
+ return (char *)h;
+
+ for (; *h; ++h) {
+ for (i = 0; n[i] && tolower((unsigned char)n[i]) ==
+ tolower((unsigned char)h[i]); ++i)
+ ;
+ if (n[i] == '\0')
+ return (char *)h;
+ }
return NULL;
}
return NULL;
}
@@
-360,9
+368,11
@@
keypress(XKeyEvent *ev)
utf8, utf8, win, CurrentTime);
return;
case XK_Left:
utf8, utf8, win, CurrentTime);
return;
case XK_Left:
+ case XK_KP_Left:
movewordedge(-1);
goto draw;
case XK_Right:
movewordedge(-1);
goto draw;
case XK_Right:
+ case XK_KP_Right:
movewordedge(+1);
goto draw;
case XK_Return:
movewordedge(+1);
goto draw;
case XK_Return:
@@
-400,6
+410,7
@@
insert:
insert(buf, len);
break;
case XK_Delete:
insert(buf, len);
break;
case XK_Delete:
+ case XK_KP_Delete:
if (text[cursor] == '\0')
return;
cursor = nextrune(+1);
if (text[cursor] == '\0')
return;
cursor = nextrune(+1);
@@
-410,6
+421,7
@@
insert:
insert(NULL, nextrune(-1) - cursor);
break;
case XK_End:
insert(NULL, nextrune(-1) - cursor);
break;
case XK_End:
+ case XK_KP_End:
if (text[cursor] != '\0') {
cursor = strlen(text);
break;
if (text[cursor] != '\0') {
cursor = strlen(text);
break;
@@
-429,6
+441,7
@@
insert:
cleanup();
exit(1);
case XK_Home:
cleanup();
exit(1);
case XK_Home:
+ case XK_KP_Home:
if (sel == matches) {
cursor = 0;
break;
if (sel == matches) {
cursor = 0;
break;
@@
-437,6
+450,7
@@
insert:
calcoffsets();
break;
case XK_Left:
calcoffsets();
break;
case XK_Left:
+ case XK_KP_Left:
if (cursor > 0 && (!sel || !sel->left || lines > 0)) {
cursor = nextrune(-1);
break;
if (cursor > 0 && (!sel || !sel->left || lines > 0)) {
cursor = nextrune(-1);
break;
@@
-445,18
+459,21
@@
insert:
return;
/* fallthrough */
case XK_Up:
return;
/* fallthrough */
case XK_Up:
+ case XK_KP_Up:
if (sel && sel->left && (sel = sel->left)->right == curr) {
curr = prev;
calcoffsets();
}
break;
case XK_Next:
if (sel && sel->left && (sel = sel->left)->right == curr) {
curr = prev;
calcoffsets();
}
break;
case XK_Next:
+ case XK_KP_Next:
if (!next)
return;
sel = curr = next;
calcoffsets();
break;
case XK_Prior:
if (!next)
return;
sel = curr = next;
calcoffsets();
break;
case XK_Prior:
+ case XK_KP_Prior:
if (!prev)
return;
sel = curr = prev;
if (!prev)
return;
sel = curr = prev;
@@
-473,6
+490,7
@@
insert:
sel->out = 1;
break;
case XK_Right:
sel->out = 1;
break;
case XK_Right:
+ case XK_KP_Right:
if (text[cursor] != '\0') {
cursor = nextrune(+1);
break;
if (text[cursor] != '\0') {
cursor = nextrune(+1);
break;
@@
-481,6
+499,7
@@
insert:
return;
/* fallthrough */
case XK_Down:
return;
/* fallthrough */
case XK_Down:
+ case XK_KP_Down:
if (sel && sel->right && (sel = sel->right) == next) {
curr = next;
calcoffsets();
if (sel && sel->right && (sel = sel->right) == next) {
curr = next;
calcoffsets();