removed config.h stuff, made dwm configurable due to command line options
[dmenu.git] / main.c
diff --git a/main.c b/main.c
index 60567b2..27b28af 100644 (file)
--- a/main.c
+++ b/main.c
@@ -42,7 +42,7 @@ static Window root;
 static Window win;
 
 static void
-calcoffsets() {
+calcoffsets(void) {
        unsigned int tw, w;
 
        if(!curr)
@@ -70,7 +70,7 @@ calcoffsets() {
 }
 
 static void
-drawmenu() {
+drawmenu(void) {
        Item *i;
 
        dc.x = 0;
@@ -208,10 +208,8 @@ kpress(XKeyEvent * e) {
                }
                break;
        case XK_Return:
-               if(e->state & ShiftMask) {
-                       if(text)
-                               fprintf(stdout, "%s", text);
-               }
+               if((e->state & ShiftMask) && text)
+                       fprintf(stdout, "%s", text);
                else if(sel)
                        fprintf(stdout, "%s", sel->text);
                else if(text)
@@ -247,7 +245,7 @@ kpress(XKeyEvent * e) {
 }
 
 static char *
-readstdin() {
+readstdin(void) {
        static char *maxname = NULL;
        char *p, buf[1024];
        unsigned int len = 0, max = 0;
@@ -285,19 +283,41 @@ DC dc = {0};
 
 int
 main(int argc, char *argv[]) {
+       char *font = FONT;
        char *maxname;
+       char *normbg = NORMBGCOLOR;
+       char *normfg = NORMFGCOLOR;
+       char *selbg = SELBGCOLOR;
+       char *selfg = SELFGCOLOR;
        fd_set rd;
+       int i;
        struct timeval timeout;
-       Item *i;
+       Item *itm;
        XEvent ev;
        XSetWindowAttributes wa;
 
-       if(argc == 2 && !strncmp("-v", argv[1], 3)) {
-               fputs("dmenu-"VERSION", (C)opyright MMVI Anselm R. Garbe\n", stdout);
-               exit(EXIT_SUCCESS);
-       }
-       else if(argc != 1)
-               eprint("usage: dmenu [-v]\n");
+       timeout.tv_usec = 0;
+       timeout.tv_sec = 3;
+       /* command line args */
+       for(i = 1; i < argc; i++)
+               if(!strncmp(argv[i], "-font", 6))
+                       font = argv[++i];
+               else if(!strncmp(argv[i], "-normbg", 8))
+                       normbg = argv[++i];
+               else if(!strncmp(argv[i], "-normfg", 8))
+                       normfg = argv[++i];
+               else if(!strncmp(argv[i], "-selbg", 7))
+                       selbg = argv[++i];
+               else if(!strncmp(argv[i], "-selfg", 7))
+                       selfg = argv[++i];
+               else if(!strncmp(argv[i], "-t", 3))
+                       timeout.tv_sec = atoi(argv[++i]);
+               else if(!strncmp(argv[i], "-v", 3)) {
+                       fputs("dmenu-"VERSION", (C)opyright MMVI Anselm R. Garbe\n", stdout);
+                       exit(EXIT_SUCCESS);
+               }
+               else
+                       eprint("usage: dmenu [-font <name>] [-{norm,sel}{bg,fg} <color>] [-t <seconds>] [-v]\n", stdout);
 
        dpy = XOpenDisplay(0);
        if(!dpy)
@@ -314,8 +334,6 @@ main(int argc, char *argv[]) {
                         GrabModeAsync, CurrentTime) != GrabSuccess)
                usleep(1000);
 
-       timeout.tv_usec = 0;
-       timeout.tv_sec = STDIN_TIMEOUT;
        FD_ZERO(&rd);
        FD_SET(STDIN_FILENO, &rd);
        if(select(ConnectionNumber(dpy) + 1, &rd, NULL, NULL, &timeout) < 1)
@@ -323,11 +341,11 @@ main(int argc, char *argv[]) {
        maxname = readstdin();
 
        /* style */
-       dc.sel[ColBG] = getcolor(SELBGCOLOR);
-       dc.sel[ColFG] = getcolor(SELFGCOLOR);
-       dc.norm[ColBG] = getcolor(NORMBGCOLOR);
-       dc.norm[ColFG] = getcolor(NORMFGCOLOR);
-       setfont(FONT);
+       dc.sel[ColBG] = getcolor(selbg);
+       dc.sel[ColFG] = getcolor(selfg);
+       dc.norm[ColBG] = getcolor(normbg);
+       dc.norm[ColFG] = getcolor(normfg);
+       setfont(font);
 
        wa.override_redirect = 1;
        wa.background_pixmap = ParentRelative;
@@ -375,10 +393,10 @@ main(int argc, char *argv[]) {
        }
 
        while(allitems) {
-               i = allitems->next;
+               itm = allitems->next;
                free(allitems->text);
                free(allitems);
-               allitems = i;
+               allitems = itm;
        }
        if(dc.font.set)
                XFreeFontSet(dpy, dc.font.set);