[CONTACT]

[ABOUT]

[POLICY]

git clone dmenu dmenu Log gph

Found at: gopher.r-36.net:70/scm/dmenu/commit/eededaa76fb12c10d6de3cb5fcf1479efd39ad75.gph

tapplied Connor's next nice patch, thanks a lot! - dmenu - Dmenu fork with xft fonts.

git clone git://r-36.net/dmenu

Log

Files

Refs

README

LICENSE

---

commit eededaa76fb12c10d6de3cb5fcf1479efd39ad75

parent 8e3e61170bd34d8a8269e376c30cb3afa25343a2

Author: Anselm R Garbe

Date:   Wed, 31 Mar 2010 22:37:41 +0100
applied Connor's next nice patch, thanks a lot!
Diffstat:
  dmenu.c                             |      65 ++++++++++++++-----------------
1 file changed, 29 insertions(+), 36 deletions(-)
---

diff --git a/dmenu.c b/dmenu.c

t@@ -52,6 +52,7 @@ static void calcoffsetsh(void);
 static void calcoffsetsv(void);
 static char *cistrstr(const char *s, const char *sub);
 static void cleanup(void);
+static void drawcursor(void);
 static void drawmenu(void);
 static void drawmenuh(void);
 static void drawmenuv(void);
t@@ -247,9 +248,7 @@ drawmenuh(void) {
         dc.x += dc.w;
         /* determine maximum items */
         for(i = curr; i != next; i=i->right) {
-                dc.w = textw(i->text);
-                if(dc.w > mw / 3)
-                        dc.w = mw / 3;
+                dc.w = MIN(textw(i->text), mw / 3);
                 drawtext(i->text, (sel == i) ? dc.sel : dc.norm);
                 dc.x += dc.w;
         }
t@@ -395,7 +394,8 @@ kpress(XKeyEvent * e) {
                 switch (ksym) {
                 default:        /* ignore other control sequences */
                         return;
-                case XK_bracketleft:
+                case XK_c:
+                case XK_C:
                         ksym = XK_Escape;
                         break;
                 case XK_h:
t@@ -414,18 +414,16 @@ kpress(XKeyEvent * e) {
                 case XK_U:
                         text[0] = 0;
                         match(text);
-                        drawmenu();
                         break;
                 case XK_w:
                 case XK_W:
-                        if(len) {
-                                i = len - 1;
-                                while(i >= 0 && text[i] == ' ')
-                                        text[i--] = 0;
-                                while(i >= 0 && text[i] != ' ')
-                                        text[i--] = 0;
+                        if(cursor > 0) {
+                                i = cursor;
+                                while(i-- > 0 && text[i] == ' ');
+                                while(i-- > 0 && text[i] != ' ');
+                                memmove(text + i + 1, text + cursor, sizeof text - cursor);
+                                cursor = i + 1;
                                 match(text);
-                                drawmenu();
                         }
                         break;
                 }
t@@ -473,14 +471,14 @@ kpress(XKeyEvent * e) {
                 num = MIN(num, sizeof text - cursor);
                 if(num && !iscntrl((int) buf[0])) {
                         memmove(text + cursor + num, text + cursor, sizeof text - cursor - num);
-                        memmove(text + cursor, buf, num);
+                        memcpy(text + cursor, buf, num);
                         cursor+=num;
                         match(text);
                 }
                 break;
         case XK_BackSpace:
                 if(cursor > 0) {
-                        memmove(text + cursor + -1, text + cursor, sizeof text - cursor);
+                        memmove(text + cursor - 1, text + cursor, sizeof text - cursor + 1);
                         cursor--;
                         match(text);
                 }
t@@ -490,8 +488,10 @@ kpress(XKeyEvent * e) {
                 match(text);
                 break;
         case XK_End:
-                if(!item)
-                        return;
+                if(cursor < len) {
+                        cursor = len;
+                        break;
+                }
                 while(next) {
                         sel = curr = next;
                         calcoffsets();
t@@ -504,8 +504,10 @@ kpress(XKeyEvent * e) {
                 running = False;
                 break;
         case XK_Home:
-                if(!item)
-                        return;
+                if(sel == item) {
+                        cursor = 0;
+                        break;
+                }
                 sel = curr = item;
                 calcoffsets();
                 break;
t@@ -536,12 +538,10 @@ kpress(XKeyEvent * e) {
                 calcoffsets();
                 break;
         case XK_Return:
-                if((e->state & ShiftMask) && *text)
+                if((e->state & ShiftMask) || !sel)
                         fprintf(stdout, "%s", text);
-                else if(sel)
+                else
                         fprintf(stdout, "%s", sel->text);
-                else if(*text)
-                        fprintf(stdout, "%s", text);
                 fflush(stdout);
                 running = False;
                 break;
t@@ -567,9 +567,6 @@ kpress(XKeyEvent * e) {
                 match(text);
                 break;
         }
-        len = strlen(text);
-        cursor = MIN(cursor, len);
-        cursor = MAX(cursor, 0);
         drawmenu();
 }
t@@ -620,13 +617,13 @@ readstdin(void) {
         unsigned int len = 0, max = 0;
         Item *i, *new;
-        i = 0;
+        i = NULL;
         while(fgets(buf, sizeof buf, stdin)) {
                 len = strlen(buf);
-                if (buf[len - 1] == '\n')
-                        buf[len - 1] = 0;
+                if(buf[len-1] == '\n')
+                        buf[--len] = '\0';
                 if(!(p = strdup(buf)))
-                        eprint("fatal: could not strdup() %u bytes\n", strlen(buf));
+                        eprint("fatal: could not strdup() %u bytes\n", len);
                 if(max < len) {
                         maxname = p;
                         max = len;
t@@ -734,13 +731,9 @@ setup(Bool topbar) {
         if(!dc.font.set)
                 XSetFont(dpy, dc.gc, dc.font.xfont->fid);
         if(maxname)
-                cmdw = textw(maxname);
-        if(cmdw > mw / 3)
-                cmdw = mw / 3;
+                cmdw = MIN(textw(maxname), mw / 3);
         if(prompt)
-                promptw = textw(prompt);
-        if(promptw > mw / 5)
-                promptw = mw / 5;
+                promptw = MIN(textw(prompt), mw / 5);
         text[0] = 0;
         match(text);
         XMapRaised(dpy, win);
t@@ -799,7 +792,7 @@ main(int argc, char *argv[]) {
                         if(++i < argc) selfgcolor = argv[i];
                 }
                 else if(!strcmp(argv[i], "-v"))
-                        eprint("dmenu-"VERSION", © 2006-2009 dmenu engineers, see LICENSE for details\n");
+                        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");
.


AD: