aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config.mk2
-rw-r--r--dmenu.c21
-rw-r--r--draw.c11
3 files changed, 19 insertions, 15 deletions
diff --git a/config.mk b/config.mk
index 126bd79..03f1670 100644
--- a/config.mk
+++ b/config.mk
@@ -18,7 +18,7 @@ LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS}
18 18
19# flags 19# flags
20CPPFLAGS = -D_BSD_SOURCE -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS} 20CPPFLAGS = -D_BSD_SOURCE -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS}
21CFLAGS = -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS} 21CFLAGS = -ansi -pedantic -Wall -Os ${INCS} ${CPPFLAGS}
22LDFLAGS = -s ${LIBS} 22LDFLAGS = -s ${LIBS}
23 23
24# compiler and linker 24# compiler and linker
diff --git a/dmenu.c b/dmenu.c
index a8a6290..cee73b2 100644
--- a/dmenu.c
+++ b/dmenu.c
@@ -3,6 +3,7 @@
3#include <stdio.h> 3#include <stdio.h>
4#include <stdlib.h> 4#include <stdlib.h>
5#include <string.h> 5#include <string.h>
6#include <strings.h>
6#include <unistd.h> 7#include <unistd.h>
7#include <X11/Xlib.h> 8#include <X11/Xlib.h>
8#include <X11/Xatom.h> 9#include <X11/Xatom.h>
@@ -231,13 +232,14 @@ insert(const char *str, ssize_t n) {
231void 232void
232keypress(XKeyEvent *ev) { 233keypress(XKeyEvent *ev) {
233 char buf[32]; 234 char buf[32];
234 size_t len;
235 KeySym ksym; 235 KeySym ksym;
236 236
237 len = strlen(text);
238 XLookupString(ev, buf, sizeof buf, &ksym, NULL); 237 XLookupString(ev, buf, sizeof buf, &ksym, NULL);
239 if(ev->state & ControlMask) 238 if(ev->state & ControlMask) {
240 switch(tolower(ksym)) { 239 KeySym lower, upper;
240
241 XConvertCase(ksym, &lower, &upper);
242 switch(lower) {
241 default: 243 default:
242 return; 244 return;
243 case XK_a: 245 case XK_a:
@@ -290,13 +292,14 @@ keypress(XKeyEvent *ev) {
290 XConvertSelection(dc->dpy, XA_PRIMARY, utf8, utf8, win, CurrentTime); 292 XConvertSelection(dc->dpy, XA_PRIMARY, utf8, utf8, win, CurrentTime);
291 return; 293 return;
292 } 294 }
295 }
293 switch(ksym) { 296 switch(ksym) {
294 default: 297 default:
295 if(!iscntrl(*buf)) 298 if(!iscntrl(*buf))
296 insert(buf, strlen(buf)); 299 insert(buf, strlen(buf));
297 break; 300 break;
298 case XK_Delete: 301 case XK_Delete:
299 if(cursor == len) 302 if(text[cursor] == '\0')
300 return; 303 return;
301 cursor = nextrune(+1); 304 cursor = nextrune(+1);
302 case XK_BackSpace: 305 case XK_BackSpace:
@@ -304,8 +307,8 @@ keypress(XKeyEvent *ev) {
304 insert(NULL, nextrune(-1) - cursor); 307 insert(NULL, nextrune(-1) - cursor);
305 break; 308 break;
306 case XK_End: 309 case XK_End:
307 if(cursor < len) { 310 if(text[cursor] != '\0') {
308 cursor = len; 311 cursor = strlen(text);
309 break; 312 break;
310 } 313 }
311 if(next) { 314 if(next) {
@@ -358,7 +361,7 @@ keypress(XKeyEvent *ev) {
358 fputs((sel && !(ev->state & ShiftMask)) ? sel->text : text, stdout); 361 fputs((sel && !(ev->state & ShiftMask)) ? sel->text : text, stdout);
359 exit(EXIT_SUCCESS); 362 exit(EXIT_SUCCESS);
360 case XK_Right: 363 case XK_Right:
361 if(cursor < len) { 364 if(text[cursor] != '\0') {
362 cursor = nextrune(+1); 365 cursor = nextrune(+1);
363 break; 366 break;
364 } 367 }
@@ -385,7 +388,7 @@ void
385match(Bool sub) { 388match(Bool sub) {
386 size_t len = strlen(text); 389 size_t len = strlen(text);
387 Item *lexact, *lprefix, *lsubstr, *exactend, *prefixend, *substrend; 390 Item *lexact, *lprefix, *lsubstr, *exactend, *prefixend, *substrend;
388 Item *item, *next = NULL; 391 Item *item, *next;
389 392
390 lexact = lprefix = lsubstr = exactend = prefixend = substrend = NULL; 393 lexact = lprefix = lsubstr = exactend = prefixend = substrend = NULL;
391 for(item = sub ? matches : items; item && item->text; item = next) { 394 for(item = sub ? matches : items; item && item->text; item = next) {
diff --git a/draw.c b/draw.c
index 95ff072..351a43d 100644
--- a/draw.c
+++ b/draw.c
@@ -15,12 +15,13 @@ static Bool loadfont(DC *dc, const char *fontstr);
15 15
16void 16void
17drawrect(DC *dc, int x, int y, unsigned int w, unsigned int h, Bool fill, unsigned long color) { 17drawrect(DC *dc, int x, int y, unsigned int w, unsigned int h, Bool fill, unsigned long color) {
18 XRectangle r = { dc->x + x, dc->y + y, w, h }; 18 XRectangle r;
19
20 r.x = dc->x + x;
21 r.y = dc->y + y;
22 r.width = fill ? w : w-1;
23 r.height = fill ? h : h-1;
19 24
20 if(!fill) {
21 r.width -= 1;
22 r.height -= 1;
23 }
24 XSetForeground(dc->dpy, dc->gc, color); 25 XSetForeground(dc->dpy, dc->gc, color);
25 (fill ? XFillRectangles : XDrawRectangles)(dc->dpy, dc->canvas, dc->gc, &r, 1); 26 (fill ? XFillRectangles : XDrawRectangles)(dc->dpy, dc->canvas, dc->gc, &r, 1);
26} 27}