[hackers] [dmenu] fixed offsets, updated eprint, cleaned up || Connor Lane Smith

From: <hg_AT_suckless.org>
Date: Thu, 24 Jun 2010 13:22:39 +0000 (UTC)

changeset: 322:7df935c43a12
tag: tip
user: Connor Lane Smith <cls_AT_lubutu.com>
date: Thu Jun 24 14:22:34 2010 +0100
files: dinput.c dmenu.c draw.c draw.h
description:
fixed offsets, updated eprint, cleaned up

diff -r 29e732fe4798 -r 7df935c43a12 dinput.c
--- a/dinput.c Thu Jun 24 11:30:30 2010 +0100
+++ b/dinput.c Thu Jun 24 14:22:34 2010 +0100
@@ -164,7 +164,7 @@
                                 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)
@@ -322,6 +322,7 @@
         Bool topbar = True;
 
         /* command line args */
+ progname = argv[0];
         for(i = 1; i < argc; i++)
                 if(!strcmp(argv[i], "-b"))
                         topbar = False;
@@ -356,7 +357,7 @@
         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 -r 29e732fe4798 -r 7df935c43a12 dmenu.c
--- a/dmenu.c Thu Jun 24 11:30:30 2010 +0100
+++ b/dmenu.c Thu Jun 24 14:22:34 2010 +0100
@@ -34,6 +34,7 @@
 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);
@@ -89,28 +90,25 @@
 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 *
@@ -151,6 +149,13 @@
 }
 
 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;
@@ -290,8 +295,7 @@
                         match(text);
                         break;
                 case XK_x:
- execlp("dinput", "dinput", text, NULL); /* todo: argv */
- eprint("dmenu: cannot exec dinput:");
+ dinput();
                         break;
                 }
         }
@@ -369,10 +373,9 @@
                 }
                 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();
@@ -431,11 +434,11 @@
                 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)
@@ -544,6 +547,7 @@
         Bool topbar = True;
 
         /* command line args */
+ progname = argv[0];
         for(i = 1; i < argc; i++)
                 if(!strcmp(argv[i], "-i")) {
                         fstrncmp = strncasecmp;
@@ -585,7 +589,7 @@
         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 -r 29e732fe4798 -r 7df935c43a12 draw.c
--- a/draw.c Thu Jun 24 11:30:30 2010 +0100
+++ b/draw.c Thu Jun 24 14:22:34 2010 +0100
@@ -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)
@@ -71,6 +74,7 @@
 eprint(const char *errstr, ...) {
         va_list ap;
 
+ fprintf(stderr, "%s: ", progname);
         va_start(ap, errstr);
         vfprintf(stderr, errstr, ap);
         va_end(ap);
@@ -83,7 +87,7 @@
         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;
 }
 
@@ -92,8 +96,8 @@
         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);
@@ -111,7 +115,7 @@
         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 -r 29e732fe4798 -r 7df935c43a12 draw.h
--- a/draw.h Thu Jun 24 11:30:30 2010 +0100
+++ b/draw.h Thu Jun 24 14:22:34 2010 +0100
@@ -30,13 +30,13 @@
 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;
Received on Thu Jun 24 2010 - 13:22:39 UTC

This archive was generated by hypermail 2.2.0 : Thu Jun 24 2010 - 13:24:04 UTC