fixed offsets, updated eprint, cleaned up
This commit is contained in:
parent
6efe1932be
commit
6c1d0e4d60
4 changed files with 42 additions and 33 deletions
5
dinput.c
5
dinput.c
|
@ -164,7 +164,7 @@ kpress(XKeyEvent * e) {
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
char *s;
|
char *s;
|
||||||
if(!(fp = popen("sselp", "r")))
|
if(!(fp = popen("sselp", "r")))
|
||||||
eprint("dinput: cannot popen sselp\n");
|
eprint("cannot popen sselp\n");
|
||||||
s = fgets(buf, sizeof buf, fp);
|
s = fgets(buf, sizeof buf, fp);
|
||||||
pclose(fp);
|
pclose(fp);
|
||||||
if(s == NULL)
|
if(s == NULL)
|
||||||
|
@ -322,6 +322,7 @@ main(int argc, char *argv[]) {
|
||||||
Bool topbar = True;
|
Bool topbar = True;
|
||||||
|
|
||||||
/* command line args */
|
/* command line args */
|
||||||
|
progname = argv[0];
|
||||||
for(i = 1; i < argc; i++)
|
for(i = 1; i < argc; i++)
|
||||||
if(!strcmp(argv[i], "-b"))
|
if(!strcmp(argv[i], "-b"))
|
||||||
topbar = False;
|
topbar = False;
|
||||||
|
@ -356,7 +357,7 @@ main(int argc, char *argv[]) {
|
||||||
if(!setlocale(LC_CTYPE, "") || !XSupportsLocale())
|
if(!setlocale(LC_CTYPE, "") || !XSupportsLocale())
|
||||||
fprintf(stderr, "dinput: warning: no locale support\n");
|
fprintf(stderr, "dinput: warning: no locale support\n");
|
||||||
if(!(dpy = XOpenDisplay(NULL)))
|
if(!(dpy = XOpenDisplay(NULL)))
|
||||||
eprint("dinput: cannot open display\n");
|
eprint("cannot open display\n");
|
||||||
screen = DefaultScreen(dpy);
|
screen = DefaultScreen(dpy);
|
||||||
if(!parent)
|
if(!parent)
|
||||||
parent = RootWindow(dpy, screen);
|
parent = RootWindow(dpy, screen);
|
||||||
|
|
56
dmenu.c
56
dmenu.c
|
@ -34,6 +34,7 @@ static void calcoffsetsh(void);
|
||||||
static void calcoffsetsv(void);
|
static void calcoffsetsv(void);
|
||||||
static char *cistrstr(const char *s, const char *sub);
|
static char *cistrstr(const char *s, const char *sub);
|
||||||
static void cleanup(void);
|
static void cleanup(void);
|
||||||
|
static void dinput(void);
|
||||||
static void drawmenu(void);
|
static void drawmenu(void);
|
||||||
static void drawmenuh(void);
|
static void drawmenuh(void);
|
||||||
static void drawmenuv(void);
|
static void drawmenuv(void);
|
||||||
|
@ -89,28 +90,25 @@ void
|
||||||
calcoffsetsh(void) {
|
calcoffsetsh(void) {
|
||||||
unsigned int w;
|
unsigned int w;
|
||||||
|
|
||||||
if(!curr)
|
w = promptw + cmdw + (2 * spaceitem);
|
||||||
return;
|
for(next = curr; next; next = next->right)
|
||||||
w = promptw + cmdw + 2 * spaceitem;
|
if((w += MIN(textw(next->text), mw / 3)) > mw)
|
||||||
for(next = curr; next && w < mw; next=next->right)
|
break;
|
||||||
w += MIN(textw(next->text), mw / 3);
|
w = promptw + cmdw + (2 * spaceitem);
|
||||||
w = promptw + cmdw + 2 * spaceitem;
|
for(prev = curr; prev && prev->left; prev = prev->left)
|
||||||
for(prev = curr; prev && prev->left && w < mw; prev=prev->left)
|
if((w += MIN(textw(prev->left->text), mw / 3)) > mw)
|
||||||
w += MIN(textw(prev->left->text), mw / 3);
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
calcoffsetsv(void) {
|
calcoffsetsv(void) {
|
||||||
unsigned int h;
|
unsigned int i;
|
||||||
|
|
||||||
if(!curr)
|
next = prev = curr;
|
||||||
return;
|
for(i = 0; i < lines && next; i++)
|
||||||
h = (dc.font.height + 2) * lines;
|
next = next->right;
|
||||||
for(next = curr; next && h > 0; next = next->right)
|
for(i = 0; i < lines && prev && prev->left; i++)
|
||||||
h -= dc.font.height + 2;
|
prev = prev->left;
|
||||||
h = (dc.font.height + 2) * lines;
|
|
||||||
for(prev = curr; prev && prev->left && h > 0; prev = prev->left)
|
|
||||||
h -= dc.font.height + 2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
|
@ -150,6 +148,13 @@ cleanup(void) {
|
||||||
XUngrabKeyboard(dpy, CurrentTime);
|
XUngrabKeyboard(dpy, CurrentTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
dinput(void) {
|
||||||
|
cleanup();
|
||||||
|
execlp("dinput", "dinput", text, NULL); /* todo: argv */
|
||||||
|
eprint("cannot exec dinput\n");
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
drawmenu(void) {
|
drawmenu(void) {
|
||||||
dc.x = 0;
|
dc.x = 0;
|
||||||
|
@ -290,8 +295,7 @@ kpress(XKeyEvent * e) {
|
||||||
match(text);
|
match(text);
|
||||||
break;
|
break;
|
||||||
case XK_x:
|
case XK_x:
|
||||||
execlp("dinput", "dinput", text, NULL); /* todo: argv */
|
dinput();
|
||||||
eprint("dmenu: cannot exec dinput:");
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -369,10 +373,9 @@ kpress(XKeyEvent * e) {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case XK_Tab:
|
case XK_Tab:
|
||||||
if(!sel)
|
if(sel)
|
||||||
return;
|
strncpy(text, sel->text, sizeof text);
|
||||||
strncpy(text, sel->text, sizeof text);
|
dinput();
|
||||||
match(text);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
drawmenu();
|
drawmenu();
|
||||||
|
@ -431,11 +434,11 @@ readstdin(void) {
|
||||||
if(buf[len-1] == '\n')
|
if(buf[len-1] == '\n')
|
||||||
buf[--len] = '\0';
|
buf[--len] = '\0';
|
||||||
if(!(p = strdup(buf)))
|
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)
|
if((max = MAX(max, len)) == len)
|
||||||
maxname = p;
|
maxname = p;
|
||||||
if(!(new = malloc(sizeof *new)))
|
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->next = new->left = new->right = NULL;
|
||||||
new->text = p;
|
new->text = p;
|
||||||
if(!i)
|
if(!i)
|
||||||
|
@ -544,6 +547,7 @@ main(int argc, char *argv[]) {
|
||||||
Bool topbar = True;
|
Bool topbar = True;
|
||||||
|
|
||||||
/* command line args */
|
/* command line args */
|
||||||
|
progname = argv[0];
|
||||||
for(i = 1; i < argc; i++)
|
for(i = 1; i < argc; i++)
|
||||||
if(!strcmp(argv[i], "-i")) {
|
if(!strcmp(argv[i], "-i")) {
|
||||||
fstrncmp = strncasecmp;
|
fstrncmp = strncasecmp;
|
||||||
|
@ -585,7 +589,7 @@ main(int argc, char *argv[]) {
|
||||||
if(!setlocale(LC_CTYPE, "") || !XSupportsLocale())
|
if(!setlocale(LC_CTYPE, "") || !XSupportsLocale())
|
||||||
fprintf(stderr, "dmenu: warning: no locale support\n");
|
fprintf(stderr, "dmenu: warning: no locale support\n");
|
||||||
if(!(dpy = XOpenDisplay(NULL)))
|
if(!(dpy = XOpenDisplay(NULL)))
|
||||||
eprint("dmenu: cannot open display\n");
|
eprint("cannot open display\n");
|
||||||
screen = DefaultScreen(dpy);
|
screen = DefaultScreen(dpy);
|
||||||
if(!parent)
|
if(!parent)
|
||||||
parent = RootWindow(dpy, screen);
|
parent = RootWindow(dpy, screen);
|
||||||
|
|
12
draw.c
12
draw.c
|
@ -13,6 +13,9 @@
|
||||||
#define MIN(a, b) ((a) < (b) ? (a) : (b))
|
#define MIN(a, b) ((a) < (b) ? (a) : (b))
|
||||||
#define MAX(a, b) ((a) > (b) ? (a) : (b))
|
#define MAX(a, b) ((a) > (b) ? (a) : (b))
|
||||||
|
|
||||||
|
/* variables */
|
||||||
|
char *progname;
|
||||||
|
|
||||||
void
|
void
|
||||||
drawcleanup(void) {
|
drawcleanup(void) {
|
||||||
if(dc.font.set)
|
if(dc.font.set)
|
||||||
|
@ -71,6 +74,7 @@ void
|
||||||
eprint(const char *errstr, ...) {
|
eprint(const char *errstr, ...) {
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
|
fprintf(stderr, "%s: ", progname);
|
||||||
va_start(ap, errstr);
|
va_start(ap, errstr);
|
||||||
vfprintf(stderr, errstr, ap);
|
vfprintf(stderr, errstr, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
@ -83,7 +87,7 @@ getcolor(const char *colstr) {
|
||||||
XColor color;
|
XColor color;
|
||||||
|
|
||||||
if(!XAllocNamedColor(dpy, cmap, colstr, &color, &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;
|
return color.pixel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,8 +96,8 @@ initfont(const char *fontstr) {
|
||||||
char *def, **missing = NULL;
|
char *def, **missing = NULL;
|
||||||
int i, n;
|
int i, n;
|
||||||
|
|
||||||
if(!fontstr || fontstr[0] == '\0')
|
if(!fontstr || !*fontstr)
|
||||||
eprint("drawtext: cannot load font: '%s'\n", fontstr);
|
eprint("cannot load null font\n");
|
||||||
dc.font.set = XCreateFontSet(dpy, fontstr, &missing, &n, &def);
|
dc.font.set = XCreateFontSet(dpy, fontstr, &missing, &n, &def);
|
||||||
if(missing)
|
if(missing)
|
||||||
XFreeStringList(missing);
|
XFreeStringList(missing);
|
||||||
|
@ -111,7 +115,7 @@ initfont(const char *fontstr) {
|
||||||
else {
|
else {
|
||||||
if(!(dc.font.xfont = XLoadQueryFont(dpy, fontstr))
|
if(!(dc.font.xfont = XLoadQueryFont(dpy, fontstr))
|
||||||
&& !(dc.font.xfont = XLoadQueryFont(dpy, "fixed")))
|
&& !(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.ascent = dc.font.xfont->ascent;
|
||||||
dc.font.descent = dc.font.xfont->descent;
|
dc.font.descent = dc.font.xfont->descent;
|
||||||
}
|
}
|
||||||
|
|
2
draw.h
2
draw.h
|
@ -30,13 +30,13 @@ int textnw(const char *text, unsigned int len);
|
||||||
int textw(const char *text);
|
int textw(const char *text);
|
||||||
|
|
||||||
/* variables */
|
/* variables */
|
||||||
|
extern char *progname;
|
||||||
extern Display *dpy;
|
extern Display *dpy;
|
||||||
extern DC dc;
|
extern DC dc;
|
||||||
extern int screen;
|
extern int screen;
|
||||||
extern unsigned int mw, mh;
|
extern unsigned int mw, mh;
|
||||||
extern Window parent;
|
extern Window parent;
|
||||||
|
|
||||||
/* style */
|
|
||||||
extern const char *font;
|
extern const char *font;
|
||||||
extern const char *normbgcolor;
|
extern const char *normbgcolor;
|
||||||
extern const char *normfgcolor;
|
extern const char *normfgcolor;
|
||||||
|
|
Loading…
Reference in a new issue