X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=dinput.c;h=6b78598196b94bf2bc07de6c5d6c16a70d794fba;hb=7afd296c40a2e8af9477add1c3d02a7c4b444747;hp=39889b31b393f7e7bedf2d52b129bd51e295430b;hpb=96c65400ccdcb76cf20ec7721920f944e6b490ec;p=dmenu.git diff --git a/dinput.c b/dinput.c index 39889b3..6b78598 100644 --- a/dinput.c +++ b/dinput.c @@ -5,7 +5,6 @@ #include #include #include -#include #include #include #include @@ -26,7 +25,7 @@ static void cleanup(void); static void drawcursor(void); static void drawinput(void); static Bool grabkeyboard(void); -static void kpress(XKeyEvent * e); +static void kpress(XKeyEvent *e); static void run(void); static void setup(Bool topbar); @@ -42,6 +41,8 @@ static int screen; static unsigned int cursor = 0; static unsigned int numlockmask = 0; static unsigned int mw, mh; +static unsigned long normcol[ColLast]; +static unsigned long selcol[ColLast]; static Bool running = True; static DC dc; static Display *dpy; @@ -60,7 +61,7 @@ drawcursor(void) { r.x += textnw(&dc, text, cursor) + dc.font.height / 2; - XSetForeground(dpy, dc.gc, dc.norm[ColFG]); + XSetForeground(dpy, dc.gc, normcol[ColFG]); XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); } @@ -71,15 +72,15 @@ drawinput(void) dc.y = 0; dc.w = mw; dc.h = mh; - drawtext(&dc, NULL, dc.norm); + drawtext(&dc, NULL, normcol, False); /* print prompt? */ if(prompt) { dc.w = promptw; - drawtext(&dc, prompt, dc.sel); + drawtext(&dc, prompt, selcol, False); dc.x += dc.w; } dc.w = mw - dc.x; - drawtext(&dc, *text ? text : NULL, dc.norm); + drawtext(&dc, *text ? text : NULL, normcol, False); drawcursor(); XCopyArea(dpy, dc.drawable, win, dc.gc, 0, 0, mw, mh, 0, 0); XFlush(dpy); @@ -99,7 +100,7 @@ grabkeyboard(void) { } void -kpress(XKeyEvent * e) { +kpress(XKeyEvent *e) { char buf[sizeof text]; int num; unsigned int i, len; @@ -139,6 +140,7 @@ kpress(XKeyEvent * e) { ksym = XK_BackSpace; break; case XK_j: + case XK_m: ksym = XK_Return; break; case XK_k: @@ -231,7 +233,7 @@ run(void) { /* main event loop */ while(running && !XNextEvent(dpy, &ev)) - switch (ev.type) { + switch(ev.type) { case KeyPress: kpress(&ev.xkey); break; @@ -268,17 +270,16 @@ setup(Bool topbar) { XFreeModifiermap(modmap); dc.dpy = dpy; - dc.norm[ColBG] = getcolor(&dc, normbgcolor); - dc.norm[ColFG] = getcolor(&dc, normfgcolor); - dc.sel[ColBG] = getcolor(&dc, selbgcolor); - dc.sel[ColFG] = getcolor(&dc, selfgcolor); + normcol[ColBG] = getcolor(&dc, normbgcolor); + normcol[ColFG] = getcolor(&dc, normfgcolor); + selcol[ColBG] = getcolor(&dc, selbgcolor); + selcol[ColFG] = getcolor(&dc, selfgcolor); initfont(&dc, font); - fprintf(stderr, "dc.font.xfont: %u\n", (size_t)dc.font.xfont); /* input window */ wa.override_redirect = True; wa.background_pixmap = ParentRelative; - wa.event_mask = ExposureMask | ButtonPressMask | KeyPressMask | VisibilityChangeMask; + wa.event_mask = ExposureMask | KeyPressMask | VisibilityChangeMask; /* input window geometry */ mh = dc.font.height + 2; @@ -328,11 +329,15 @@ main(int argc, char *argv[]) { /* command line args */ progname = argv[0]; for(i = 1; i < argc; i++) - if(!strcmp(argv[i], "-b")) + if(!strcmp(argv[i], "-i")) + ; /* ignore flag */ + else if(!strcmp(argv[i], "-b")) topbar = False; else if(!strcmp(argv[i], "-e")) { if(++i < argc) parent = atoi(argv[i]); } + else if(!strcmp(argv[i], "-l")) + i++; /* ignore flag */ else if(!strcmp(argv[i], "-fn")) { if(++i < argc) font = argv[i]; } @@ -351,13 +356,17 @@ main(int argc, char *argv[]) { else if(!strcmp(argv[i], "-sf")) { if(++i < argc) selfgcolor = argv[i]; } - else if(!strcmp(argv[i], "-v")) - eprint("dinput-"VERSION", © 2006-2010 dinput engineers, see LICENSE for details\n"); + else if(!strcmp(argv[i], "-v")) { + printf("dinput-"VERSION", © 2006-2010 dinput engineers, see LICENSE for details\n"); + exit(EXIT_SUCCESS); + } else if(!*text) strncpy(text, argv[i], sizeof text); - else - eprint("usage: dinput [-b] [-e ] [-fn ] [-nb ] [-nf ]\n" - " [-p ] [-sb ] [-sf ] [-v] []\n"); + else { + fputs("usage: dinput [-b] [-e ] [-fn ] [-nb ] [-nf ]\n" + " [-p ] [-sb ] [-sf ] [-v] []\n", stderr); + exit(EXIT_FAILURE); + } if(!setlocale(LC_CTYPE, "") || !XSupportsLocale()) fprintf(stderr, "dinput: warning: no locale support\n"); if(!(dpy = XOpenDisplay(NULL)))