diff options
Diffstat (limited to 'main.c')
| -rw-r--r-- | main.c | 52 |
1 files changed, 36 insertions, 16 deletions
| @@ -283,19 +283,41 @@ DC dc = {0}; | |||
| 283 | 283 | ||
| 284 | int | 284 | int |
| 285 | main(int argc, char *argv[]) { | 285 | main(int argc, char *argv[]) { |
| 286 | char *font = FONT; | ||
| 286 | char *maxname; | 287 | char *maxname; |
| 288 | char *normbg = NORMBGCOLOR; | ||
| 289 | char *normfg = NORMFGCOLOR; | ||
| 290 | char *selbg = SELBGCOLOR; | ||
| 291 | char *selfg = SELFGCOLOR; | ||
| 287 | fd_set rd; | 292 | fd_set rd; |
| 293 | int i; | ||
| 288 | struct timeval timeout; | 294 | struct timeval timeout; |
| 289 | Item *i; | 295 | Item *itm; |
| 290 | XEvent ev; | 296 | XEvent ev; |
| 291 | XSetWindowAttributes wa; | 297 | XSetWindowAttributes wa; |
| 292 | 298 | ||
| 293 | if(argc == 2 && !strncmp("-v", argv[1], 3)) { | 299 | timeout.tv_usec = 0; |
| 294 | fputs("dmenu-"VERSION", (C)opyright MMVI Anselm R. Garbe\n", stdout); | 300 | timeout.tv_sec = 3; |
| 295 | exit(EXIT_SUCCESS); | 301 | /* command line args */ |
| 296 | } | 302 | for(i = 1; i < argc; i++) |
| 297 | else if(argc != 1) | 303 | if(!strncmp(argv[i], "-font", 6)) |
| 298 | eprint("usage: dmenu [-v]\n"); | 304 | font = argv[++i]; |
| 305 | else if(!strncmp(argv[i], "-normbg", 8)) | ||
| 306 | normbg = argv[++i]; | ||
| 307 | else if(!strncmp(argv[i], "-normfg", 8)) | ||
| 308 | normfg = argv[++i]; | ||
| 309 | else if(!strncmp(argv[i], "-selbg", 7)) | ||
| 310 | selbg = argv[++i]; | ||
| 311 | else if(!strncmp(argv[i], "-selfg", 7)) | ||
| 312 | selfg = argv[++i]; | ||
| 313 | else if(!strncmp(argv[i], "-t", 3)) | ||
| 314 | timeout.tv_sec = atoi(argv[++i]); | ||
| 315 | else if(!strncmp(argv[i], "-v", 3)) { | ||
| 316 | fputs("dmenu-"VERSION", (C)opyright MMVI Anselm R. Garbe\n", stdout); | ||
| 317 | exit(EXIT_SUCCESS); | ||
| 318 | } | ||
| 319 | else | ||
| 320 | eprint("usage: dmenu [-font <name>] [-{norm,sel}{bg,fg} <color>] [-t <seconds>] [-v]\n", stdout); | ||
| 299 | 321 | ||
| 300 | dpy = XOpenDisplay(0); | 322 | dpy = XOpenDisplay(0); |
| 301 | if(!dpy) | 323 | if(!dpy) |
| @@ -312,8 +334,6 @@ main(int argc, char *argv[]) { | |||
| 312 | GrabModeAsync, CurrentTime) != GrabSuccess) | 334 | GrabModeAsync, CurrentTime) != GrabSuccess) |
| 313 | usleep(1000); | 335 | usleep(1000); |
| 314 | 336 | ||
| 315 | timeout.tv_usec = 0; | ||
| 316 | timeout.tv_sec = STDIN_TIMEOUT; | ||
| 317 | FD_ZERO(&rd); | 337 | FD_ZERO(&rd); |
| 318 | FD_SET(STDIN_FILENO, &rd); | 338 | FD_SET(STDIN_FILENO, &rd); |
| 319 | if(select(ConnectionNumber(dpy) + 1, &rd, NULL, NULL, &timeout) < 1) | 339 | if(select(ConnectionNumber(dpy) + 1, &rd, NULL, NULL, &timeout) < 1) |
| @@ -321,11 +341,11 @@ main(int argc, char *argv[]) { | |||
| 321 | maxname = readstdin(); | 341 | maxname = readstdin(); |
| 322 | 342 | ||
| 323 | /* style */ | 343 | /* style */ |
| 324 | dc.sel[ColBG] = getcolor(SELBGCOLOR); | 344 | dc.sel[ColBG] = getcolor(selbg); |
| 325 | dc.sel[ColFG] = getcolor(SELFGCOLOR); | 345 | dc.sel[ColFG] = getcolor(selfg); |
| 326 | dc.norm[ColBG] = getcolor(NORMBGCOLOR); | 346 | dc.norm[ColBG] = getcolor(normbg); |
| 327 | dc.norm[ColFG] = getcolor(NORMFGCOLOR); | 347 | dc.norm[ColFG] = getcolor(normfg); |
| 328 | setfont(FONT); | 348 | setfont(font); |
| 329 | 349 | ||
| 330 | wa.override_redirect = 1; | 350 | wa.override_redirect = 1; |
| 331 | wa.background_pixmap = ParentRelative; | 351 | wa.background_pixmap = ParentRelative; |
| @@ -373,10 +393,10 @@ main(int argc, char *argv[]) { | |||
| 373 | } | 393 | } |
| 374 | 394 | ||
| 375 | while(allitems) { | 395 | while(allitems) { |
| 376 | i = allitems->next; | 396 | itm = allitems->next; |
| 377 | free(allitems->text); | 397 | free(allitems->text); |
| 378 | free(allitems); | 398 | free(allitems); |
| 379 | allitems = i; | 399 | allitems = itm; |
| 380 | } | 400 | } |
| 381 | if(dc.font.set) | 401 | if(dc.font.set) |
| 382 | XFreeFontSet(dpy, dc.font.set); | 402 | XFreeFontSet(dpy, dc.font.set); |
