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)
Bool topbar = True;
/* command line args */
+ progname = argv[0];
for(i = 1; i < argc; i++)
if(!strcmp(argv[i], "-b"))
topbar = False;
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);
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);
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 *
XUngrabKeyboard(dpy, CurrentTime);
}
+void
+dinput(void) {
+ cleanup();
+ execlp("dinput", "dinput", text, NULL); /* todo: argv */
+ eprint("cannot exec dinput\n");
+}
+
void
drawmenu(void) {
dc.x = 0;
match(text);
break;
case XK_x:
- execlp("dinput", "dinput", text, NULL); /* todo: argv */
- eprint("dmenu: cannot exec dinput:");
+ dinput();
break;
}
}
}
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();
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)
Bool topbar = True;
/* command line args */
+ progname = argv[0];
for(i = 1; i < argc; i++)
if(!strcmp(argv[i], "-i")) {
fstrncmp = strncasecmp;
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);
#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)
eprint(const char *errstr, ...) {
va_list ap;
+ fprintf(stderr, "%s: ", progname);
va_start(ap, errstr);
vfprintf(stderr, errstr, ap);
va_end(ap);
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;
}
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);
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;
}