commit 67bfcd39cb5ad0f6f040509c02206b556446c440
parent c0e7213544d7e4d72e16020f9fa43e4ad58c12bd
Author: Anthony Martin <ality@pbrane.org>
Date: Wed, 22 Mar 2006 13:54:23 -0800
cleaned up code formatting in wmiimenu.c
Diffstat:
| cmd/wmiimenu.c | | | 551 | ++++++++++++++++++++++++++++++++++++++++--------------------------------------- |
1 file changed, 276 insertions(+), 275 deletions(-)
diff --git a/cmd/wmiimenu.c b/cmd/wmiimenu.c
@@ -41,7 +41,7 @@ static unsigned int prevoff = 0;
static unsigned int curroff = 0;
static unsigned int cmdw = 0;
static Draw draw = { 0 };
-static const int seek = 30; /* 30px */
+static const int seek = 30; /* 30px */
static void draw_menu(void);
static void handle_kpress(XKeyEvent * e);
@@ -51,40 +51,40 @@ static char version[] = "wmiimenu - " VERSION ", (C)opyright MMIV-MMVI Anselm R.
static void
usage()
{
- fprintf(stderr, "%s", "usage: wmiimenu [-v]\n");
- exit(1);
+ fprintf(stderr, "%s", "usage: wmiimenu [-v]\n");
+ exit(1);
}
static void
update_offsets()
{
unsigned int i;
- unsigned int w = cmdw + 2 * seek;
+ unsigned int w = cmdw + 2 * seek;
- if(!nitem)
- return;
+ if(!nitem)
+ return;
- for(i = curroff; i < nitem; i++) {
- w += XTextWidth(draw.font, item[i], strlen(item[i])) + mrect.height;
- if(w > mrect.width)
- break;
- }
+ for(i = curroff; i < nitem; i++) {
+ w += XTextWidth(draw.font, item[i], strlen(item[i])) + mrect.height;
+ if(w > mrect.width)
+ break;
+ }
nextoff = i;
- w = cmdw + 2 * seek;
- for(i = curroff; i > 0; i--) {
- w += XTextWidth(draw.font, item[i], strlen(item[i])) + mrect.height;
- if(w > mrect.width)
- break;
- }
+ w = cmdw + 2 * seek;
+ for(i = curroff; i > 0; i--) {
+ w += XTextWidth(draw.font, item[i], strlen(item[i])) + mrect.height;
+ if(w > mrect.width)
+ break;
+ }
prevoff = i;
}
static unsigned int
update_items(char *pattern)
{
- unsigned int plen = strlen(pattern);
- int i;
+ unsigned int plen = strlen(pattern);
+ int i;
curroff = prevoff = nextoff = 0;
sel = -1;
@@ -93,27 +93,26 @@ update_items(char *pattern)
item[i] = nil; /* faster than cext_array_detach */
nitem = 0;
- for(i = 0; i < nallitem; i++) {
- if(!plen || !strncmp(pattern, allitem[i], plen))
- {
+ for(i = 0; i < nallitem; i++) {
+ if(!plen || !strncmp(pattern, allitem[i], plen)) {
item = (char **)cext_array_attach((void **)item, allitem[i],
- sizeof(char *), &itemsz);
- nitem++;
+ sizeof(char *), &itemsz);
+ nitem++;
}
- }
- for(i = 0; i < nallitem; i++) {
- if(plen && strncmp(pattern, allitem[i], plen)
- && strstr(allitem[i], pattern))
+ }
+ for(i = 0; i < nallitem; i++) {
+ if(plen && strncmp(pattern, allitem[i], plen)
+ && strstr(allitem[i], pattern))
{
item = (char **)cext_array_attach((void **)item, allitem[i],
- sizeof(char *), &itemsz);
- nitem++;
+ sizeof(char *), &itemsz);
+ nitem++;
}
- }
+ }
if(nitem)
sel = 0;
-
- update_offsets();
+
+ update_offsets();
return nitem;
}
@@ -121,180 +120,182 @@ update_items(char *pattern)
static void
draw_menu()
{
- unsigned int i, offx = 0;
+ unsigned int i, offx = 0;
- draw.rect = mrect;
- draw.rect.x = 0;
- draw.rect.y = 0;
+ draw.rect = mrect;
+ draw.rect.x = 0;
+ draw.rect.y = 0;
draw.color = normcolor;
- draw.data = nil;
- blitz_drawlabel(dpy, &draw);
-
- /* print command */
- draw.align = WEST;
- draw.data = text;
- if(cmdw && nitem)
- draw.rect.width = cmdw;
- offx += draw.rect.width;
- blitz_drawlabel(dpy, &draw);
-
- draw.align = CENTER;
- if(nitem) {
- draw.color = normcolor;
- draw.data = prevoff < curroff ? "<" : nil;
- draw.rect.x = offx;
- draw.rect.width = seek;
- offx += draw.rect.width;
- blitz_drawlabel(dpy, &draw);
-
- /* determine maximum items */
- for(i = curroff; i < nextoff; i++) {
- draw.data = item[i];
- draw.rect.x = offx;
- draw.rect.width =
- XTextWidth(draw.font, draw.data, strlen(draw.data)) + mrect.height;
- offx += draw.rect.width;
- if(sel == i) {
+ draw.data = nil;
+ blitz_drawlabel(dpy, &draw);
+
+ /* print command */
+ draw.align = WEST;
+ draw.data = text;
+ if(cmdw && nitem)
+ draw.rect.width = cmdw;
+ offx += draw.rect.width;
+ blitz_drawlabel(dpy, &draw);
+
+ draw.align = CENTER;
+ if(nitem) {
+ draw.color = normcolor;
+ draw.data = prevoff < curroff ? "<" : nil;
+ draw.rect.x = offx;
+ draw.rect.width = seek;
+ offx += draw.rect.width;
+ blitz_drawlabel(dpy, &draw);
+
+ /* determine maximum items */
+ for(i = curroff; i < nextoff; i++) {
+ draw.data = item[i];
+ draw.rect.x = offx;
+ draw.rect.width = XTextWidth(draw.font, draw.data,
+ strlen(draw.data)) + mrect.height;
+ offx += draw.rect.width;
+ if(sel == i) {
draw.color = selcolor;
- blitz_drawlabel(dpy, &draw);
+ blitz_drawlabel(dpy, &draw);
blitz_drawborder(dpy, &draw);
- } else {
+ } else {
draw.color = normcolor;
- blitz_drawlabel(dpy, &draw);
- }
- }
-
- draw.color = normcolor;
- draw.data = nitem > nextoff ? ">" : nil;
- draw.rect.x = mrect.width - seek;
- draw.rect.width = seek;
- blitz_drawlabel(dpy, &draw);
- }
- XCopyArea(dpy, draw.drawable, win, draw.gc, 0, 0, mrect.width, mrect.height, 0, 0);
- XSync(dpy, False);
+ blitz_drawlabel(dpy, &draw);
+ }
+ }
+
+ draw.color = normcolor;
+ draw.data = nitem > nextoff ? ">" : nil;
+ draw.rect.x = mrect.width - seek;
+ draw.rect.width = seek;
+ blitz_drawlabel(dpy, &draw);
+ }
+ XCopyArea(dpy, draw.drawable, win, draw.gc, 0, 0, mrect.width,
+ mrect.height, 0, 0);
+ XSync(dpy, False);
}
static void
handle_kpress(XKeyEvent * e)
{
- KeySym ksym;
- char buf[32];
- int num;
- unsigned int len = strlen(text);
-
- buf[0] = 0;
- num = XLookupString(e, buf, sizeof(buf), &ksym, 0);
-
- if(IsFunctionKey(ksym) || IsKeypadKey(ksym)
- || IsMiscFunctionKey(ksym) || IsPFKey(ksym)
- || IsPrivateKeypadKey(ksym))
- return;
-
- /* first check if a control mask is omitted */
- if(e->state & ControlMask) {
- switch (ksym) {
- case XK_H:
- case XK_h:
- ksym = XK_BackSpace;
- break;
- case XK_I:
- case XK_i:
- ksym = XK_Tab;
- break;
- case XK_J:
- case XK_j:
- ksym = XK_Return;
- break;
- case XK_N:
- case XK_n:
- ksym = XK_Right;
- break;
- case XK_P:
- case XK_p:
- ksym = XK_Left;
- break;
- case XK_U:
- case XK_u:
- text[0] = 0;
- update_items(text);
- draw_menu();
- return;
- break;
- case XK_bracketleft:
- ksym = XK_Escape;
- break;
- default: /* ignore other control sequences */
- return;
- break;
- }
- }
- switch (ksym) {
- case XK_Left:
- if(sel <= 0)
- return;
+ KeySym ksym;
+ char buf[32];
+ int num;
+ unsigned int len = strlen(text);
+
+ buf[0] = 0;
+ num = XLookupString(e, buf, sizeof(buf), &ksym, 0);
+
+ if(IsFunctionKey(ksym) || IsKeypadKey(ksym)
+ || IsMiscFunctionKey(ksym) || IsPFKey(ksym)
+ || IsPrivateKeypadKey(ksym))
+ return;
+
+ /* first check if a control mask is omitted */
+ if(e->state & ControlMask) {
+ switch (ksym) {
+ case XK_H:
+ case XK_h:
+ ksym = XK_BackSpace;
+ break;
+ case XK_I:
+ case XK_i:
+ ksym = XK_Tab;
+ break;
+ case XK_J:
+ case XK_j:
+ ksym = XK_Return;
+ break;
+ case XK_N:
+ case XK_n:
+ ksym = XK_Right;
+ break;
+ case XK_P:
+ case XK_p:
+ ksym = XK_Left;
+ break;
+ case XK_U:
+ case XK_u:
+ text[0] = 0;
+ update_items(text);
+ draw_menu();
+ return;
+ break;
+ case XK_bracketleft:
+ ksym = XK_Escape;
+ break;
+ default: /* ignore other control sequences */
+ return;
+ break;
+ }
+ }
+ switch (ksym) {
+ case XK_Left:
+ if(sel <= 0)
+ return;
sel--;
- break;
- case XK_Tab:
- if(!nitem)
- return;
- cext_strlcpy(text, item[sel], sizeof(text));
- update_items(text);
- break;
- case XK_Right:
- if(sel < 0 || (sel + 1 == nitem))
- return;
+ break;
+ case XK_Tab:
+ if(!nitem)
+ return;
+ cext_strlcpy(text, item[sel], sizeof(text));
+ update_items(text);
+ break;
+ case XK_Right:
+ if(sel < 0 || (sel + 1 == nitem))
+ return;
sel++;
- break;
- case XK_Return:
- if(sel >= 0)
+ break;
+ case XK_Return:
+ if(sel >= 0)
fprintf(stdout, "%s", item[sel]);
- else if(text)
+ else if(text)
fprintf(stdout, "%s", text);
fflush(stdout);
done = True;
break;
- case XK_Escape:
+ case XK_Escape:
ret = 1;
done = True;
- break;
- case XK_BackSpace:
- if(len) {
- unsigned int i = len;
- if(i) {
- int prev_nitem;
- do
- text[--i] = 0;
- while((prev_nitem = nitem) && i && prev_nitem == update_items(text));
- }
- update_items(text);
- }
- break;
- default:
- if((num == 1) && !iscntrl((int) buf[0])) {
- buf[num] = 0;
- if(len > 0)
- cext_strlcat(text, buf, sizeof(text));
- else
- cext_strlcpy(text, buf, sizeof(text));
- update_items(text);
- }
- }
- if(sel >= 0) {
- if(sel == curroff - 1) {
+ break;
+ case XK_BackSpace:
+ if(len) {
+ unsigned int i = len;
+ if(i) {
+ int prev_nitem;
+ do
+ text[--i] = 0;
+ while((prev_nitem = nitem) && i &&
+ prev_nitem == update_items(text));
+ }
+ update_items(text);
+ }
+ break;
+ default:
+ if((num == 1) && !iscntrl((int) buf[0])) {
+ buf[num] = 0;
+ if(len > 0)
+ cext_strlcat(text, buf, sizeof(text));
+ else
+ cext_strlcpy(text, buf, sizeof(text));
+ update_items(text);
+ }
+ }
+ if(sel >= 0) {
+ if(sel == curroff - 1) {
curroff = prevoff;
- update_offsets();
- } else if((sel == nextoff) && (nitem > nextoff)) {
+ update_offsets();
+ } else if((sel == nextoff) && (nitem > nextoff)) {
curroff = nextoff;
- update_offsets();
+ update_offsets();
}
- }
- draw_menu();
+ }
+ draw_menu();
}
void
read_allitems()
{
- char *maxname = 0, *p, buf[1024];
+ char *maxname = 0, *p, buf[1024];
unsigned int len = 0, max = 0;
while(fgets(buf, sizeof(buf), stdin)) {
@@ -302,120 +303,120 @@ read_allitems()
if (buf[len - 1] == '\n') /* there might be no \n after the last item */
buf[len - 1] = 0; /* removing \n */
p = strdup(buf);
- if(max < len) {
+ if(max < len) {
maxname = p;
- max = len;
- }
+ max = len;
+ }
allitem = (char **)cext_array_attach((void **)allitem, p,
- sizeof(char *), &allitemsz);
+ sizeof(char *), &allitemsz);
nallitem++;
}
- if(maxname)
- cmdw = XTextWidth(draw.font, maxname, max) + mrect.height;
+ if(maxname)
+ cmdw = XTextWidth(draw.font, maxname, max) + mrect.height;
}
-
+
int
main(int argc, char *argv[])
{
- int i;
- XSetWindowAttributes wa;
+ int i;
+ XSetWindowAttributes wa;
char *fontstr, *selcolstr, *normcolstr;
- XEvent ev;
-
- /* command line args */
- for(i = 1; (i < argc) && (argv[i][0] == '-'); i++) {
- switch (argv[i][1]) {
- case 'v':
- fprintf(stdout, "%s", version);
- exit(0);
- break;
- default:
- usage();
- break;
- }
- }
-
- dpy = XOpenDisplay(0);
- if(!dpy) {
- fprintf(stderr, "%s", "wmiimenu: cannot open display\n");
- exit(1);
- }
- screen = DefaultScreen(dpy);
-
- /* set font and colors */
- fontstr = getenv("WMII_FONT");
- if (!fontstr)
- fontstr = strdup(BLITZ_FONT);
- draw.font = blitz_getfont(dpy, fontstr);
- normcolstr = getenv("WMII_NORMCOLORS");
- if (!normcolstr || strlen(normcolstr) != 23)
- normcolstr = strdup(BLITZ_NORMCOLORS);
+ XEvent ev;
+
+ /* command line args */
+ for(i = 1; (i < argc) && (argv[i][0] == '-'); i++) {
+ switch (argv[i][1]) {
+ case 'v':
+ fprintf(stdout, "%s", version);
+ exit(0);
+ break;
+ default:
+ usage();
+ break;
+ }
+ }
+
+ dpy = XOpenDisplay(0);
+ if(!dpy) {
+ fprintf(stderr, "%s", "wmiimenu: cannot open display\n");
+ exit(1);
+ }
+ screen = DefaultScreen(dpy);
+
+ /* set font and colors */
+ fontstr = getenv("WMII_FONT");
+ if (!fontstr)
+ fontstr = strdup(BLITZ_FONT);
+ draw.font = blitz_getfont(dpy, fontstr);
+ normcolstr = getenv("WMII_NORMCOLORS");
+ if (!normcolstr || strlen(normcolstr) != 23)
+ normcolstr = strdup(BLITZ_NORMCOLORS);
blitz_loadcolor(dpy, screen, normcolstr, &normcolor);
- selcolstr = getenv("WMII_SELCOLORS");
- if (!selcolstr || strlen(selcolstr) != 23)
- selcolstr = strdup(BLITZ_SELCOLORS);
+ selcolstr = getenv("WMII_SELCOLORS");
+ if (!selcolstr || strlen(selcolstr) != 23)
+ selcolstr = strdup(BLITZ_SELCOLORS);
blitz_loadcolor(dpy, screen, selcolstr, &selcolor);
- wa.override_redirect = 1;
- wa.background_pixmap = ParentRelative;
- wa.event_mask = ExposureMask | ButtonPressMask | KeyPressMask
- | SubstructureRedirectMask | SubstructureNotifyMask;
+ wa.override_redirect = 1;
+ wa.background_pixmap = ParentRelative;
+ wa.event_mask = ExposureMask | ButtonPressMask | KeyPressMask
+ | SubstructureRedirectMask | SubstructureNotifyMask;
- mrect.width = DisplayWidth(dpy, screen);
- mrect.height = draw.font->ascent + draw.font->descent + 4;
- mrect.y = DisplayHeight(dpy, screen) - mrect.height;
+ mrect.width = DisplayWidth(dpy, screen);
+ mrect.height = draw.font->ascent + draw.font->descent + 4;
+ mrect.y = DisplayHeight(dpy, screen) - mrect.height;
mrect.x = 0;
- win = XCreateWindow(dpy, RootWindow(dpy, screen), mrect.x, mrect.y,
- mrect.width, mrect.height, 0, DefaultDepth(dpy, screen),
- CopyFromParent, DefaultVisual(dpy, screen),
- CWOverrideRedirect | CWBackPixmap | CWEventMask,
- &wa);
- XDefineCursor(dpy, win, XCreateFontCursor(dpy, XC_xterm));
- XSync(dpy, False);
-
- /* pixmap */
- draw.gc = XCreateGC(dpy, win, 0, 0);
- draw.drawable = XCreatePixmap(dpy, win, mrect.width, mrect.height,
- DefaultDepth(dpy, screen));
-
- XSync(dpy, False);
- read_allitems();
-
- text[0] = 0;
- update_items(text);
- XMapRaised(dpy, win);
- draw_menu();
- XSync(dpy, False);
-
- while(XGrabKeyboard
- (dpy, RootWindow(dpy, screen), True, GrabModeAsync,
- GrabModeAsync, CurrentTime) != GrabSuccess)
- usleep(1000);
-
- /* main event loop */
-
- while(!XNextEvent(dpy, &ev)) {
- switch (ev.type) {
- case KeyPress:
- handle_kpress(&ev.xkey);
- break;
- case Expose:
- if(ev.xexpose.count == 0) {
- draw_menu();
- }
- break;
- default: break;
- }
+ win = XCreateWindow(dpy, RootWindow(dpy, screen), mrect.x, mrect.y,
+ mrect.width, mrect.height, 0, DefaultDepth(dpy, screen),
+ CopyFromParent, DefaultVisual(dpy, screen),
+ CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
+ XDefineCursor(dpy, win, XCreateFontCursor(dpy, XC_xterm));
+ XSync(dpy, False);
+
+ /* pixmap */
+ draw.gc = XCreateGC(dpy, win, 0, 0);
+ draw.drawable = XCreatePixmap(dpy, win, mrect.width, mrect.height,
+ DefaultDepth(dpy, screen));
+
+ XSync(dpy, False);
+ read_allitems();
+
+ text[0] = 0;
+ update_items(text);
+ XMapRaised(dpy, win);
+ draw_menu();
+ XSync(dpy, False);
+
+ while(XGrabKeyboard
+ (dpy, RootWindow(dpy, screen), True, GrabModeAsync,
+ GrabModeAsync, CurrentTime) != GrabSuccess)
+ usleep(1000);
+
+ /* main event loop */
+
+ while(!XNextEvent(dpy, &ev)) {
+ switch (ev.type) {
+ case KeyPress:
+ handle_kpress(&ev.xkey);
+ break;
+ case Expose:
+ if(ev.xexpose.count == 0) {
+ draw_menu();
+ }
+ break;
+ default:
+ break;
+ }
if(done)
break;
- }
+ }
- XFreePixmap(dpy, draw.drawable);
- XFreeGC(dpy, draw.gc);
+ XFreePixmap(dpy, draw.drawable);
+ XFreeGC(dpy, draw.gc);
XDestroyWindow(dpy, win);
- XCloseDisplay(dpy);
+ XCloseDisplay(dpy);
- return ret;
+ return ret;
}