X-Git-Url: https://git.xinqibao.xyz/dmenu.git/blobdiff_plain/caf524626894bdee3756c4065bca44152d0efe9a..e149c531b876e666a42870816834723d97a656f4:/dmenu.c diff --git a/dmenu.c b/dmenu.c index 384def6..a8bdcb9 100644 --- a/dmenu.c +++ b/dmenu.c @@ -41,6 +41,7 @@ static void usage(void); static char text[BUFSIZ]; static size_t cursor = 0; +static const char *font = NULL; static const char *prompt = NULL; static const char *normbgcolor = "#cccccc"; static const char *normfgcolor = "#000000"; @@ -82,11 +83,12 @@ calcoffsets(void) { else n = mw - (promptw + inputw + textw(dc, "<") + textw(dc, ">")); - for(i = 0, next = curr; i <= n && next; next = next->right) - i += (lines > 0) ? LINEH : MIN(textw(dc, next->text), mw/3); - - for(i = 0, prev = curr; i <= n && prev && prev->left; prev = prev->left) - i += (lines > 0) ? LINEH : MIN(textw(dc, prev->left->text), mw/3); + for(i = 0, next = curr; next; next = next->right) + if((i += (lines > 0) ? LINEH : MIN(textw(dc, next->text), mw/3)) > n) + break; + for(i = 0, prev = curr; prev && prev->left; prev = prev->left) + if((i += (lines > 0) ? LINEH : MIN(textw(dc, prev->left->text), mw/3)) > n) + break; } char * @@ -500,8 +502,6 @@ main(int argc, char *argv[]) { int i; progname = "dmenu"; - dc = initdraw(); - for(i = 1; i < argc; i++) /* single flags */ if(!strcmp(argv[i], "-v")) { @@ -522,7 +522,7 @@ main(int argc, char *argv[]) { else if(!strcmp(argv[i], "-p")) prompt = argv[++i]; else if(!strcmp(argv[i], "-fn")) - initfont(dc, argv[++i]); + font = argv[++i]; else if(!strcmp(argv[i], "-nb")) normbgcolor = argv[++i]; else if(!strcmp(argv[i], "-nf")) @@ -534,6 +534,8 @@ main(int argc, char *argv[]) { else usage(); + dc = initdraw(); + initfont(dc, font); readstdin(); setup(); run();