https://bbs.archlinux.org/viewtopic.php?id=124915
diff -u dmenu-4.4/dmenu.1 dmenu/dmenu.1
--- dmenu-4.4/dmenu.1   2011-07-19 22:31:28.000000000 +0200
+++ dmenu/dmenu.1       2011-08-06 23:18:20.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.
@@ -57,6 +60,15 @@
 .BI \-fn " font"
 defines the font or font set used.
 .TP
+.BI \-x " xoffset"
+defines the offset from the left border of the screen.
+.TP
+.BI \-y " yoffset"
+defines the offset from the top border of the screen.
+.TP
+.BI \-w " width"
+defines the desired menu window width.
+.TP
 .BI \-nb " color"
 defines the normal background color.
 .IR #RGB ,
diff -u dmenu-4.4/dmenu.c dmenu/dmenu.c
--- dmenu-4.4/dmenu.c   2011-07-19 22:31:28.000000000 +0200
+++ dmenu/dmenu.c       2011-08-06 23:17:53.000000000 +0200
@@ -42,6 +42,9 @@
 static int bh, mw, mh;
 static int inputw, promptw;
 static int lines = 0;
+static int xoffset = 0;
+static int yoffset = 0;
+static int width = 0;
 static size_t cursor = 0;
 static const char *font = NULL;
 static const char *prompt = NULL;
@@ -53,6 +56,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 +79,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")) {
@@ -84,6 +90,12 @@
                else if(i+1 == argc)
                        usage();
                /* double flags */
+               else if(!strcmp(argv[i], "-x"))
+                       xoffset = atoi(argv[++i]);
+               else if(!strcmp(argv[i], "-y"))
+                       yoffset = atoi(argv[++i]);
+               else if(!strcmp(argv[i], "-w"))
+                       width = atoi(argv[++i]);
                else if(!strcmp(argv[i], "-l"))
                        lines = atoi(argv[++i]);
                else if(!strcmp(argv[i], "-p"))
@@ -177,28 +189,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);
 }
 
@@ -501,7 +515,7 @@
                        if(INRECT(x, y, info[i].x_org, info[i].y_org, 
info[i].width, info[i].height))
                                break;
                x = info[i].x_org;
-               y = info[i].y_org + (topbar ? 0 : info[i].height - mh);
+               y = info[i].y_org + (topbar ? yoffset : info[i].height - mh - 
yoffset);
                mw = info[i].width;
                XFree(info);
        }
@@ -509,9 +523,13 @@
 #endif
        {
                x = 0;
-               y = topbar ? 0 : DisplayHeight(dc->dpy, screen) - mh;
+               y = topbar ? yoffset : DisplayHeight(dc->dpy, screen) - mh - 
yoffset;
                mw = DisplayWidth(dc->dpy, screen);
        }
+
+    x += xoffset;
+    mw = width ? width : mw;
+
        promptw = prompt ? textw(dc, prompt) : 0;
        inputw = MIN(inputw, mw/3);
        match(False);
@@ -532,7 +550,8 @@
 
 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"
+             "             [-x xoffset] [-y yoffset] [-w width]\n"
              "             [-nb color] [-nf color] [-sb color] [-sf color] 
[-v]\n", stderr);
        exit(EXIT_FAILURE);
 }

Reply via email to