- /* command line args */
- for(i = 1; i < argc; i++)
- if(!strcmp(argv[i], "-b")) {
- bottom = True;
- }
- else if(!strcmp(argv[i], "-fn")) {
- if(++i < argc) font = argv[i];
- }
- else if(!strcmp(argv[i], "-nb")) {
- if(++i < argc) normbg = argv[i];
- }
- else if(!strcmp(argv[i], "-nf")) {
- if(++i < argc) normfg = argv[i];
- }
- else if(!strcmp(argv[i], "-p")) {
- if(++i < argc) prompt = argv[i];
- }
- else if(!strcmp(argv[i], "-sb")) {
- if(++i < argc) selbg = argv[i];
- }
- else if(!strcmp(argv[i], "-sf")) {
- if(++i < argc) selfg = argv[i];
- }
- else if(!strcmp(argv[i], "-v"))
- eprint("dmenu-"VERSION", © 2006-2007 Anselm R. Garbe, Sander van Dijk\n");
- else
- usage();
- setlocale(LC_CTYPE, "");
- dpy = XOpenDisplay(0);
- if(!dpy)
- eprint("dmenu: cannot open display\n");
- screen = DefaultScreen(dpy);
- root = RootWindow(dpy, screen);
- if(isatty(STDIN_FILENO)) {
- maxname = readstdin();
- running = grabkeyboard();
- }
- else { /* prevent keypress loss */
- running = grabkeyboard();
- maxname = readstdin();
- }
- /* init modifier map */
- modmap = XGetModifierMapping(dpy);
- for (i = 0; i < 8; i++) {
- for (j = 0; j < modmap->max_keypermod; j++) {
- if(modmap->modifiermap[i * modmap->max_keypermod + j]
- == XKeysymToKeycode(dpy, XK_Num_Lock))
- numlockmask = (1 << i);
- }
+void
+readstdin(void) {
+ char buf[sizeof text], *p;
+ Item *item, **end;
+
+ for(end = &items; fgets(buf, sizeof buf, stdin); *end = item, end = &item->next) {
+ if((p = strchr(buf, '\n')))
+ *p = '\0';
+ if(!(item = calloc(1, sizeof *item)))
+ eprintf("cannot malloc %u bytes:", sizeof *item);
+ if(!(item->text = strdup(buf)))
+ eprintf("cannot strdup %u bytes:", strlen(buf)+1);
+ inputw = MAX(inputw, textw(dc, item->text));