Xinqi Bao's Git
projects
/
dmenu.git
/ diff
summary
|
log
|
commit
|
diff
|
tree
raw
|
patch
|
inline
| side by side (parent:
8e3e611
)
applied Connor's next nice patch, thanks a lot!
author
Anselm R Garbe <
[email protected]
>
Wed, 31 Mar 2010 21:37:41 +0000
(22:37 +0100)
committer
Anselm R Garbe <
[email protected]
>
Wed, 31 Mar 2010 21:37:41 +0000
(22:37 +0100)
dmenu.c
diff
|
blob
|
history
diff --git
a/dmenu.c
b/dmenu.c
index
5f16894
..
6177906
100644
(file)
--- a/
dmenu.c
+++ b/
dmenu.c
@@
-52,6
+52,7
@@
static void calcoffsetsh(void);
static void calcoffsetsv(void);
static char *cistrstr(const char *s, const char *sub);
static void cleanup(void);
static void calcoffsetsv(void);
static char *cistrstr(const char *s, const char *sub);
static void cleanup(void);
+static void drawcursor(void);
static void drawmenu(void);
static void drawmenuh(void);
static void drawmenuv(void);
static void drawmenu(void);
static void drawmenuh(void);
static void drawmenuv(void);
@@
-247,9
+248,7
@@
drawmenuh(void) {
dc.x += dc.w;
/* determine maximum items */
for(i = curr; i != next; i=i->right) {
dc.x += dc.w;
/* determine maximum items */
for(i = curr; i != next; i=i->right) {
- dc.w = textw(i->text);
- if(dc.w > mw / 3)
- dc.w = mw / 3;
+ dc.w = MIN(textw(i->text), mw / 3);
drawtext(i->text, (sel == i) ? dc.sel : dc.norm);
dc.x += dc.w;
}
drawtext(i->text, (sel == i) ? dc.sel : dc.norm);
dc.x += dc.w;
}
@@
-395,7
+394,8
@@
kpress(XKeyEvent * e) {
switch (ksym) {
default: /* ignore other control sequences */
return;
switch (ksym) {
default: /* ignore other control sequences */
return;
- case XK_bracketleft:
+ case XK_c:
+ case XK_C:
ksym = XK_Escape;
break;
case XK_h:
ksym = XK_Escape;
break;
case XK_h:
@@
-414,18
+414,16
@@
kpress(XKeyEvent * e) {
case XK_U:
text[0] = 0;
match(text);
case XK_U:
text[0] = 0;
match(text);
- drawmenu();
break;
case XK_w:
case XK_W:
break;
case XK_w:
case XK_W:
- if(
len
) {
- i =
len - 1
;
- while(i
>= 0 && text[i] == ' ')
-
text[i--] = 0
;
- while(i >= 0 && text[i] != ' ')
-
text[i--] = 0
;
+ if(
cursor > 0
) {
+ i =
cursor
;
+ while(i
-- > 0 && text[i] == ' ');
+
while(i-- > 0 && text[i] != ' ')
;
+ memmove(text + i + 1, text + cursor, sizeof text - cursor);
+
cursor = i + 1
;
match(text);
match(text);
- drawmenu();
}
break;
}
}
break;
}
@@
-473,14
+471,14
@@
kpress(XKeyEvent * e) {
num = MIN(num, sizeof text - cursor);
if(num && !iscntrl((int) buf[0])) {
memmove(text + cursor + num, text + cursor, sizeof text - cursor - num);
num = MIN(num, sizeof text - cursor);
if(num && !iscntrl((int) buf[0])) {
memmove(text + cursor + num, text + cursor, sizeof text - cursor - num);
- mem
move
(text + cursor, buf, num);
+ mem
cpy
(text + cursor, buf, num);
cursor+=num;
match(text);
}
break;
case XK_BackSpace:
if(cursor > 0) {
cursor+=num;
match(text);
}
break;
case XK_BackSpace:
if(cursor > 0) {
- memmove(text + cursor
+ -1, text + cursor, sizeof text - cursor
);
+ memmove(text + cursor
- 1, text + cursor, sizeof text - cursor + 1
);
cursor--;
match(text);
}
cursor--;
match(text);
}
@@
-490,8
+488,10
@@
kpress(XKeyEvent * e) {
match(text);
break;
case XK_End:
match(text);
break;
case XK_End:
- if(!item)
- return;
+ if(cursor < len) {
+ cursor = len;
+ break;
+ }
while(next) {
sel = curr = next;
calcoffsets();
while(next) {
sel = curr = next;
calcoffsets();
@@
-504,8
+504,10
@@
kpress(XKeyEvent * e) {
running = False;
break;
case XK_Home:
running = False;
break;
case XK_Home:
- if(!item)
- return;
+ if(sel == item) {
+ cursor = 0;
+ break;
+ }
sel = curr = item;
calcoffsets();
break;
sel = curr = item;
calcoffsets();
break;
@@
-536,12
+538,10
@@
kpress(XKeyEvent * e) {
calcoffsets();
break;
case XK_Return:
calcoffsets();
break;
case XK_Return:
- if((e->state & ShiftMask)
&& *text
)
+ if((e->state & ShiftMask)
|| !sel
)
fprintf(stdout, "%s", text);
fprintf(stdout, "%s", text);
- else
if(sel)
+ else
fprintf(stdout, "%s", sel->text);
fprintf(stdout, "%s", sel->text);
- else if(*text)
- fprintf(stdout, "%s", text);
fflush(stdout);
running = False;
break;
fflush(stdout);
running = False;
break;
@@
-567,9
+567,6
@@
kpress(XKeyEvent * e) {
match(text);
break;
}
match(text);
break;
}
- len = strlen(text);
- cursor = MIN(cursor, len);
- cursor = MAX(cursor, 0);
drawmenu();
}
drawmenu();
}
@@
-620,13
+617,13
@@
readstdin(void) {
unsigned int len = 0, max = 0;
Item *i, *new;
unsigned int len = 0, max = 0;
Item *i, *new;
- i =
0
;
+ i =
NULL
;
while(fgets(buf, sizeof buf, stdin)) {
len = strlen(buf);
while(fgets(buf, sizeof buf, stdin)) {
len = strlen(buf);
- if
(buf[len -
1] == '\n')
- buf[
len - 1] = 0
;
+ if
(buf[len-
1] == '\n')
+ buf[
--len] = '\0'
;
if(!(p = strdup(buf)))
if(!(p = strdup(buf)))
- eprint("fatal: could not strdup() %u bytes\n",
strlen(buf)
);
+ eprint("fatal: could not strdup() %u bytes\n",
len
);
if(max < len) {
maxname = p;
max = len;
if(max < len) {
maxname = p;
max = len;
@@
-734,13
+731,9
@@
setup(Bool topbar) {
if(!dc.font.set)
XSetFont(dpy, dc.gc, dc.font.xfont->fid);
if(maxname)
if(!dc.font.set)
XSetFont(dpy, dc.gc, dc.font.xfont->fid);
if(maxname)
- cmdw = textw(maxname);
- if(cmdw > mw / 3)
- cmdw = mw / 3;
+ cmdw = MIN(textw(maxname), mw / 3);
if(prompt)
if(prompt)
- promptw = textw(prompt);
- if(promptw > mw / 5)
- promptw = mw / 5;
+ promptw = MIN(textw(prompt), mw / 5);
text[0] = 0;
match(text);
XMapRaised(dpy, win);
text[0] = 0;
match(text);
XMapRaised(dpy, win);
@@
-799,7
+792,7
@@
main(int argc, char *argv[]) {
if(++i < argc) selfgcolor = argv[i];
}
else if(!strcmp(argv[i], "-v"))
if(++i < argc) selfgcolor = argv[i];
}
else if(!strcmp(argv[i], "-v"))
- eprint("dmenu-"VERSION", © 2006-20
09
dmenu engineers, see LICENSE for details\n");
+ eprint("dmenu-"VERSION", © 2006-20
10
dmenu engineers, see LICENSE for details\n");
else
eprint("usage: dmenu [-i] [-b] [-l <lines>] [-fn <font>] [-nb <color>] [-nf <color>]\n"
" [-p <prompt>] [-sb <color>] [-sf <color>] [-v]\n");
else
eprint("usage: dmenu [-i] [-b] [-l <lines>] [-fn <font>] [-nb <color>] [-nf <color>]\n"
" [-p <prompt>] [-sb <color>] [-sf <color>] [-v]\n");