diff -u dmenu-4.4/dmenu.1 dmenu-quiet-4.4/dmenu.1
--- dmenu-4.4/dmenu.1   2011-07-19 22:31:28.000000000 +0200
+++ dmenu-quiet-4.4/dmenu.1     2011-08-05 19:39:31.000000000 +0200
@@ -41,6 +41,9 @@
 .B \-b
 dmenu appears at the bottom of the screen.
 .TP
+.B \-q
+dmenu will not show any items if the search string is empty.
+.TP
 .B \-f
 dmenu grabs the keyboard before reading stdin.  This is faster, but may lock up
 X if stdin is from a terminal.
diff -u dmenu-4.4/dmenu.c dmenu-quiet-4.4/dmenu.c
--- dmenu-4.4/dmenu.c   2011-07-19 22:31:28.000000000 +0200
+++ dmenu-quiet-4.4/dmenu.c     2011-08-05 19:39:31.000000000 +0200
@@ -53,6 +53,7 @@
 static unsigned long selcol[ColLast];
 static Atom utf8;
 static Bool topbar = True;
+static Bool quiet = False;
 static DC *dc;
 static Item *items = NULL;
 static Item *matches, *matchend;
@@ -75,6 +76,8 @@
                }
                else if(!strcmp(argv[i], "-b"))
                        topbar = False;
+               else if(!strcmp(argv[i], "-q"))
+                       quiet = True;
                else if(!strcmp(argv[i], "-f"))
                        fast = True;
                else if(!strcmp(argv[i], "-i")) {
@@ -177,28 +180,30 @@
        if((curpos = textnw(dc, text, cursor) + dc->h/2 - 2) < dc->w)
                drawrect(dc, curpos, 2, 1, dc->h - 4, True, FG(dc, normcol));
 
-       if(lines > 0) {
-               dc->w = mw - dc->x;
-               for(item = curr; item != next; item = item->right) {
-                       dc->y += dc->h;
-                       drawtext(dc, item->text, (item == sel) ? selcol : 
normcol);
-               }
-       }
-       else if(matches) {
-               dc->x += inputw;
-               dc->w = textw(dc, "<");
-               if(curr->left)
-                       drawtext(dc, "<", normcol);
-               for(item = curr; item != next; item = item->right) {
-                       dc->x += dc->w;
-                       dc->w = MIN(textw(dc, item->text), mw - dc->x - 
textw(dc, ">"));
-                       drawtext(dc, item->text, (item == sel) ? selcol : 
normcol);
-               }
-               dc->w = textw(dc, ">");
-               dc->x = mw - dc->w;
-               if(next)
-                       drawtext(dc, ">", normcol);
-       }
+    if(!quiet || strlen(text) > 0) {    
+        if(lines > 0) {
+            dc->w = mw - dc->x;
+            for(item = curr; item != next; item = item->right) {
+                dc->y += dc->h;
+                drawtext(dc, item->text, (item == sel) ? selcol : normcol);
+            }
+        }
+        else if(matches) {
+            dc->x += inputw;
+            dc->w = textw(dc, "<");
+            if(curr->left)
+                drawtext(dc, "<", normcol);
+            for(item = curr; item != next; item = item->right) {
+                dc->x += dc->w;
+                dc->w = MIN(textw(dc, item->text), mw - dc->x - textw(dc, 
">"));
+                drawtext(dc, item->text, (item == sel) ? selcol : normcol);
+            }
+            dc->w = textw(dc, ">");
+            dc->x = mw - dc->w;
+            if(next)
+                drawtext(dc, ">", normcol);
+        }
+    }
        mapdc(dc, win, mw, mh);
 }
 
@@ -532,7 +537,7 @@
 
 void
 usage(void) {
-       fputs("usage: dmenu [-b] [-f] [-i] [-l lines] [-p prompt] [-fn font]\n"
+       fputs("usage: dmenu [-b] [-q] [-f] [-i] [-l lines] [-p prompt] [-fn 
font]\n"
              "             [-nb color] [-nf color] [-sb color] [-sf color] 
[-v]\n", stderr);
        exit(EXIT_FAILURE);
 }

Reply via email to