tapplied cls' patch, thanks Connor! - dmenu - Dmenu fork with xft fonts.
 (HTM) git clone git://r-36.net/dmenu
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 8e3e61170bd34d8a8269e376c30cb3afa25343a2
 (DIR) parent 37236f8840624d5e9d590e7be9ba365bc61913a6
 (HTM) Author: anselm@garbe.us <unknown>
       Date:   Mon, 22 Mar 2010 07:50:26 +0000
       
       applied cls' patch, thanks Connor!
       Diffstat:
         dmenu.c                             |      24 +++++++++++++-----------
       
       1 file changed, 13 insertions(+), 11 deletions(-)
       ---
 (DIR) diff --git a/dmenu.c b/dmenu.c
       t@@ -372,7 +372,7 @@ initfont(const char *fontstr) {
        
        void
        kpress(XKeyEvent * e) {
       -        char buf[32];
       +        char buf[sizeof text];
                int i, num;
                unsigned int len;
                KeySym ksym;
       t@@ -457,25 +457,23 @@ kpress(XKeyEvent * e) {
                                        char *c;
                                        if(!(fp = (FILE*)popen("sselp", "r")))
                                                eprint("dmenu: Could not popen sselp\n");
       -                                c = fgets(text + len, sizeof(text) - len, fp);
       +                                c = fgets(buf, sizeof buf, fp);
                                        pclose(fp);
                                        if(c == NULL)
                                                return;
                                }
       -                        len = strlen(text);
       -                        if(len && text[len-1] == '\n')
       -                                text[--len] = '\0';
       -                        match(text);
       -                        drawmenu();
       -                        return;
       +                        num = strlen(buf);
       +                        if(num && buf[num-1] == '\n')
       +                                buf[--num] = '\0';
       +                        break;
                        }
                }
                switch(ksym) {
                default:
       +                num = MIN(num, sizeof text - cursor);
                        if(num && !iscntrl((int) buf[0])) {
       -                        buf[num] = 0;
       -                        memmove(text + cursor + num, text + cursor, sizeof text - cursor);
       -                        strncpy(text + cursor, buf, sizeof text - cursor);
       +                        memmove(text + cursor + num, text + cursor, sizeof text - cursor - num);
       +                        memmove(text + cursor, buf, num);
                                cursor+=num;
                                match(text);
                        }
       t@@ -487,6 +485,10 @@ kpress(XKeyEvent * e) {
                                match(text);
                        }
                        break;
       +        case XK_Delete:
       +                memmove(text + cursor, text + cursor + 1, sizeof text - cursor);
       +                match(text);
       +                break;
                case XK_End:
                        if(!item)
                                return;