From 3472085f59123384fa99252c195fee31160a7764 Mon Sep 17 00:00:00 2001 From: Anselm R Garbe Date: Thu, 1 Apr 2010 21:31:09 +0100 Subject: commited Connor's sanity patch --- dmenu.c | 83 +++++++++++++++++++++++++---------------------------------------- 1 file changed, 32 insertions(+), 51 deletions(-) (limited to 'dmenu.c') diff --git a/dmenu.c b/dmenu.c index f6552aa..97014cc 100644 --- a/dmenu.c +++ b/dmenu.c @@ -118,18 +118,14 @@ calcoffsetsh(void) { return; w = promptw + cmdw + 2 * spaceitem; for(next = curr; next; next=next->right) { - tw = textw(next->text); - if(tw > mw / 3) - tw = mw / 3; + tw = MIN(textw(next->text), mw / 3); w += tw; if(w > mw) break; } w = promptw + cmdw + 2 * spaceitem; for(prev = curr; prev && prev->left; prev=prev->left) { - tw = textw(prev->left->text); - if(tw > mw / 3) - tw = mw / 3; + tw = MIN(textw(prev->left->text), mw / 3); w += tw; if(w > mw) break; @@ -138,20 +134,20 @@ calcoffsetsh(void) { void calcoffsetsv(void) { - static unsigned int w; + static unsigned int h; if(!curr) return; - w = (dc.font.height + 2) * (lines + 1); + h = (dc.font.height + 2) * (lines + 1); for(next = curr; next; next=next->right) { - w -= dc.font.height + 2; - if(w <= 0) + h -= dc.font.height + 2; + if(h <= 0) break; } - w = (dc.font.height + 2) * (lines + 1); + h = (dc.font.height + 2) * (lines + 1); for(prev = curr; prev && prev->left; prev=prev->left) { - w -= dc.font.height + 2; - if(w <= 0) + h -= dc.font.height + 2; + if(h <= 0) break; } } @@ -352,10 +348,8 @@ initfont(const char *fontstr) { font_extents = XExtentsOfFontSet(dc.font.set); n = XFontsOfFontSet(dc.font.set, &xfonts, &font_names); for(i = 0, dc.font.ascent = 0, dc.font.descent = 0; i < n; i++) { - if(dc.font.ascent < (*xfonts)->ascent) - dc.font.ascent = (*xfonts)->ascent; - if(dc.font.descent < (*xfonts)->descent) - dc.font.descent = (*xfonts)->descent; + dc.font.ascent = MAX(dc.font.ascent, (*xfonts)->ascent); + dc.font.descent = MAX(dc.font.descent, (*xfonts)->descent); xfonts++; } } @@ -396,16 +390,16 @@ kpress(XKeyEvent * e) { return; case XK_a: case XK_A: - cursor = 0; - break; - case XK_e: - case XK_E: - cursor = strlen(text); + ksym = XK_Home; break; case XK_c: case XK_C: ksym = XK_Escape; break; + case XK_e: + case XK_E: + ksym = XK_End; + break; case XK_h: case XK_H: ksym = XK_BackSpace; @@ -429,7 +423,7 @@ kpress(XKeyEvent * e) { i = cursor; while(i-- > 0 && text[i] == ' '); while(i-- > 0 && text[i] != ' '); - memmove(text + i + 1, text + cursor, sizeof text - cursor); + memmove(text + i + 1, text + cursor, sizeof text - cursor + 1); cursor = i + 1; match(text); } @@ -460,12 +454,12 @@ kpress(XKeyEvent * e) { case XK_p: { FILE *fp; - char *c; + char *s; if(!(fp = (FILE*)popen("sselp", "r"))) eprint("dmenu: Could not popen sselp\n"); - c = fgets(buf, sizeof buf, fp); + s = fgets(buf, sizeof buf, fp); pclose(fp); - if(c == NULL) + if(s == NULL) return; } num = strlen(buf); @@ -621,32 +615,25 @@ match(char *pattern) { void readstdin(void) { - char *p, buf[1024]; - unsigned int len = 0, blen = 0, max = 0; + char *p, buf[sizeof text]; + unsigned int len = 0, max = 0; Item *i, *new; - i = 0, p = NULL; + i = NULL; while(fgets(buf, sizeof buf, stdin)) { - len += (blen = strlen(buf)); - if(!(p = realloc(p, len))) { - eprint("fatal: could not realloc() %u bytes\n", len); - return; - } - memcpy (p + len - blen, buf, blen); - if (p[len - 1] == '\n') - p[len - 1] = 0; - else if (!feof(stdin)) - continue; + len = strlen(buf); + if(buf[len-1] == '\n') + buf[--len] = '\0'; + if(!(p = strdup(buf))) + eprint("fatal: could not strdup() %u bytes\n", len); if(max < len) { maxname = p; max = len; } - len = 0; if(!(new = (Item *)malloc(sizeof(Item)))) eprint("fatal: could not malloc() %u bytes\n", sizeof(Item)); new->next = new->left = new->right = NULL; new->text = p; - p = NULL; if(!i) allitems = new; else @@ -812,8 +799,8 @@ main(int argc, char *argv[]) { else if(!strcmp(argv[i], "-v")) eprint("dmenu-"VERSION", © 2006-2010 dmenu engineers, see LICENSE for details\n"); else - eprint("usage: dmenu [-i] [-b] [-l ] [-fn ] [-nb ] [-nf ]\n" - " [-p ] [-sb ] [-sf ] [-v]\n"); + eprint("usage: dmenu [-i] [-b] [-e ] [-l ] [-fn ] [-nb ]\n" + " [-nf ] [-p ] [-sb ] [-sf ] [-v]\n"); if(!setlocale(LC_CTYPE, "") || !XSupportsLocale()) fprintf(stderr, "warning: no locale support\n"); if(!(dpy = XOpenDisplay(NULL))) @@ -822,14 +809,8 @@ main(int argc, char *argv[]) { if(!root) root = RootWindow(dpy, screen); - if(isatty(STDIN_FILENO)) { - readstdin(); - running = grabkeyboard(); - } - else { /* prevent keypress loss */ - running = grabkeyboard(); - readstdin(); - } + readstdin(); + running = grabkeyboard(); setup(topbar); drawmenu(); -- cgit v1.2.3-59-g8ed1b eletions'>-0/+0 2024-09-11updated readme with visualsGravatar BanceDev 2-0/+4 2024-09-11fixed off-by-one error with prompt wrappingGravatar BanceDev 1-11/+89 2024-09-10added tab to accept inline autocompleteGravatar BanceDev 1-9/+85 2024-09-10basic current directory suggestionsGravatar BanceDev 1-9/+146 2024-09-10made it so that lua args properly reset between commandsGravatar BanceDev 1-0/+4 2024-09-10removed demo image to cleanupGravatar Lance Borden 2-4/+1 2024-09-10higher quality image for readmeGravatar BanceDev 1-0/+0 2024-09-10added better demo to readmeGravatar BanceDev 2-0/+10 2024-09-10added handling for when prompt gets longer than terminal widthGravatar BanceDev 1-0/+36 2024-09-10added support for multiline promptsGravatar BanceDev 1-4/+35 2024-09-10lua api functions for getting terminal width and heightGravatar BanceDev 4-0/+46 2024-09-09added coloring to help commandGravatar BanceDev 1-2/+2 2024-09-09add aliasing to init.luaGravatar BanceDev 9-14/+258 2024-09-09bugfix to inline backspace and delete on multiline bufferGravatar BanceDev 1-7/+23 2024-09-09fixed line wrapping when deleting inlineGravatar BanceDev 1-0/+8 2024-09-09updated gitignoreGravatar BanceDev 2-1/+2 2024-09-09fixed wrapping bug due to not using updated prompt_lengthGravatar BanceDev 1-3/+6 2024-09-09added stripping of escape sequences from prompt size to allow for coloringGravatar BanceDev 1-5/+26 2024-09-09added support for init.lua for configuring shellGravatar BanceDev 8-38/+180 2024-09-09docs: update pathGravatar Christopher Lane 1-1/+1 2024-09-08added getenv and putenv to Lua APIGravatar BanceDev 2-5/+33 2024-09-08added lua api functions for indexing historyGravatar BanceDev 2-0/+35 2024-09-08added support for cli args for lua scriptsGravatar BanceDev 4-3/+28 2024-09-07added --version flagGravatar BanceDev 1-1/+9 2024-09-07fixed error in install.sh instructionsGravatar BanceDev 1-1/+1 2024-09-07fixed bug with cursor alignment when adding text within the bufferGravatar BanceDev 1-1/+11 2024-09-06added API guide to readmeGravatar BanceDev 1-1/+5 2024-09-06Update README.mdGravatar Lance Borden 1-1/+1 2024-09-06better readmeGravatar BanceDev 2-2/+14