[CONTACT]

[ABOUT]

[POLICY]

git clone dmenu dmenu Log gph

Found at: gopher.r-36.net:70/scm/dmenu/commit/6c1d0e4d60b239e9533def6feaf8eb2138858c3e.gph

tfixed offsets, updated eprint, cleaned up - dmenu - Dmenu fork with xft fonts.

git clone git://r-36.net/dmenu

Log

Files

Refs

README

LICENSE

---

commit 6c1d0e4d60b239e9533def6feaf8eb2138858c3e

parent 6efe1932be9425896c34f54501a6194286dd0503

Author: Connor Lane Smith

Date:   Thu, 24 Jun 2010 14:22:34 +0100
fixed offsets, updated eprint, cleaned up
Diffstat:
  dinput.c                            |       5 +++--
  dmenu.c                             |      56 +++++++++++++++++--------------
  draw.c                              |      12 ++++++++----
  draw.h                              |       2 +-
4 files changed, 42 insertions(+), 33 deletions(-)
---

diff --git a/dinput.c b/dinput.c

t@@ -164,7 +164,7 @@ kpress(XKeyEvent * e) {
                                 FILE *fp;
                                 char *s;
                                 if(!(fp = popen("sselp", "r")))
-                                        eprint("dinput: cannot popen sselp\n");
+                                        eprint("cannot popen sselp\n");
                                 s = fgets(buf, sizeof buf, fp);
                                 pclose(fp);
                                 if(s == NULL)
t@@ -322,6 +322,7 @@ main(int argc, char *argv[]) {
         Bool topbar = True;
         /* command line args */
+        progname = argv[0];
         for(i = 1; i < argc; i++)
                 if(!strcmp(argv[i], "-b"))
                         topbar = False;
t@@ -356,7 +357,7 @@ main(int argc, char *argv[]) {
         if(!setlocale(LC_CTYPE, "") || !XSupportsLocale())
                 fprintf(stderr, "dinput: warning: no locale support\n");
         if(!(dpy = XOpenDisplay(NULL)))
-                eprint("dinput: cannot open display\n");
+                eprint("cannot open display\n");
         screen = DefaultScreen(dpy);
         if(!parent)
                 parent = RootWindow(dpy, screen);

diff --git a/dmenu.c b/dmenu.c

t@@ -34,6 +34,7 @@ static void calcoffsetsh(void);
 static void calcoffsetsv(void);
 static char *cistrstr(const char *s, const char *sub);
 static void cleanup(void);
+static void dinput(void);
 static void drawmenu(void);
 static void drawmenuh(void);
 static void drawmenuv(void);
t@@ -89,28 +90,25 @@ void
 calcoffsetsh(void) {
         unsigned int w;
-        if(!curr)
-                return;
-        w = promptw + cmdw + 2 * spaceitem;
-        for(next = curr; next && w < mw; next=next->right)
-                w += MIN(textw(next->text), mw / 3);
-        w = promptw + cmdw + 2 * spaceitem;
-        for(prev = curr; prev && prev->left && w < mw; prev=prev->left)
-                w += MIN(textw(prev->left->text), mw / 3);
+        w = promptw + cmdw + (2 * spaceitem);
+        for(next = curr; next; next = next->right)
+                if((w += MIN(textw(next->text), mw / 3)) > mw)
+                        break;
+        w = promptw + cmdw + (2 * spaceitem);
+        for(prev = curr; prev && prev->left; prev = prev->left)
+                if((w += MIN(textw(prev->left->text), mw / 3)) > mw)
+                        break;
 }
 void
 calcoffsetsv(void) {
-        unsigned int h;
+        unsigned int i;
-        if(!curr)
-                return;
-        h = (dc.font.height + 2) * lines;
-        for(next = curr; next && h > 0; next = next->right)
-                h -= dc.font.height + 2;
-        h = (dc.font.height + 2) * lines;
-        for(prev = curr; prev && prev->left && h > 0; prev = prev->left)
-                h -= dc.font.height + 2;
+        next = prev = curr;
+        for(i = 0; i < lines && next; i++)
+                next = next->right;
+        for(i = 0; i < lines && prev && prev->left; i++)
+                prev = prev->left;
 }
 char *
t@@ -151,6 +149,13 @@ cleanup(void) {
 }
 void
+dinput(void) {
+        cleanup();
+        execlp("dinput", "dinput", text, NULL); /* todo: argv */
+        eprint("cannot exec dinput\n");
+}
+
+void
 drawmenu(void) {
         dc.x = 0;
         dc.y = 0;
t@@ -290,8 +295,7 @@ kpress(XKeyEvent * e) {
                         match(text);
                         break;
                 case XK_x:
-                        execlp("dinput", "dinput", text, NULL); /* todo: argv */
-                        eprint("dmenu: cannot exec dinput:");
+                        dinput();
                         break;
                 }
         }
t@@ -369,10 +373,9 @@ kpress(XKeyEvent * e) {
                 }
                 break;
         case XK_Tab:
-                if(!sel)
-                        return;
-                strncpy(text, sel->text, sizeof text);
-                match(text);
+                if(sel)
+                        strncpy(text, sel->text, sizeof text);
+                dinput();
                 break;
         }
         drawmenu();
t@@ -431,11 +434,11 @@ readstdin(void) {
                 if(buf[len-1] == '\n')
                         buf[--len] = '\0';
                 if(!(p = strdup(buf)))
-                        eprint("dmenu: cannot strdup %u bytes\n", len);
+                        eprint("cannot strdup %u bytes\n", len);
                 if((max = MAX(max, len)) == len)
                         maxname = p;
                 if(!(new = malloc(sizeof *new)))
-                        eprint("dmenu: cannot malloc %u bytes\n", sizeof *new);
+                        eprint("cannot malloc %u bytes\n", sizeof *new);
                 new->next = new->left = new->right = NULL;
                 new->text = p;
                 if(!i)
t@@ -544,6 +547,7 @@ main(int argc, char *argv[]) {
         Bool topbar = True;
         /* command line args */
+        progname = argv[0];
         for(i = 1; i < argc; i++)
                 if(!strcmp(argv[i], "-i")) {
                         fstrncmp = strncasecmp;
t@@ -585,7 +589,7 @@ main(int argc, char *argv[]) {
         if(!setlocale(LC_CTYPE, "") || !XSupportsLocale())
                 fprintf(stderr, "dmenu: warning: no locale support\n");
         if(!(dpy = XOpenDisplay(NULL)))
-                eprint("dmenu: cannot open display\n");
+                eprint("cannot open display\n");
         screen = DefaultScreen(dpy);
         if(!parent)
                 parent = RootWindow(dpy, screen);

diff --git a/draw.c b/draw.c

t@@ -13,6 +13,9 @@
 #define MIN(a, b)               ((a) < (b) ? (a) : (b))
 #define MAX(a, b)               ((a) > (b) ? (a) : (b))
+/* variables */
+char *progname;
+
 void
 drawcleanup(void) {
         if(dc.font.set)
t@@ -71,6 +74,7 @@ void
 eprint(const char *errstr, ...) {
         va_list ap;
+        fprintf(stderr, "%s: ", progname);
         va_start(ap, errstr);
         vfprintf(stderr, errstr, ap);
         va_end(ap);
t@@ -83,7 +87,7 @@ getcolor(const char *colstr) {
         XColor color;
         if(!XAllocNamedColor(dpy, cmap, colstr, &color, &color))
-                eprint("drawtext: cannot allocate color '%s'\n", colstr);
+                eprint("cannot allocate color '%s'\n", colstr);
         return color.pixel;
 }
t@@ -92,8 +96,8 @@ initfont(const char *fontstr) {
         char *def, **missing = NULL;
         int i, n;
-        if(!fontstr || fontstr[0] == '\0')
-                eprint("drawtext: cannot load font: '%s'\n", fontstr);
+        if(!fontstr || !*fontstr)
+                eprint("cannot load null font\n");
         dc.font.set = XCreateFontSet(dpy, fontstr, &missing, &n, &def);
         if(missing)
                 XFreeStringList(missing);
t@@ -111,7 +115,7 @@ initfont(const char *fontstr) {
         else {
                 if(!(dc.font.xfont = XLoadQueryFont(dpy, fontstr))
                 && !(dc.font.xfont = XLoadQueryFont(dpy, "fixed")))
-                        eprint("drawtext: cannot load font: '%s'\n", fontstr);
+                        eprint("cannot load font '%s'\n", fontstr);
                 dc.font.ascent = dc.font.xfont->ascent;
                 dc.font.descent = dc.font.xfont->descent;
         }

diff --git a/draw.h b/draw.h

t@@ -30,13 +30,13 @@ int textnw(const char *text, unsigned int len);
 int textw(const char *text);
 /* variables */
+extern char *progname;
 extern Display *dpy;
 extern DC dc;
 extern int screen;
 extern unsigned int mw, mh;
 extern Window parent;
-/* style */
 extern const char *font;
 extern const char *normbgcolor;
 extern const char *normfgcolor;
.


AD: