fixed offsets, updated eprint, cleaned up
This commit is contained in:
		
							parent
							
								
									28bf1ca60b
								
							
						
					
					
						commit
						0c0bcf7cdb
					
				@ -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);
 | 
				
			||||||
 | 
				
			|||||||
@ -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);
 | 
				
			||||||
		match(text);
 | 
							dinput();
 | 
				
			||||||
		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);
 | 
				
			||||||
 | 
				
			|||||||
@ -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;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
@ -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user