tordered switch branches in kpress alphabetically, applied Sanders patch for PgUp/Dn and Home/End scrolling - 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 4bd34662153f0b2cabac485d01ac2e1300c254c1
 (DIR) parent e19e42adbba5ea74778bcd10c6e8720d0755f812
 (HTM) Author: arg@mig29 <unknown>
       Date:   Tue, 12 Dec 2006 09:57:42 +0100
       
       ordered switch branches in kpress alphabetically, applied Sanders patch for PgUp/Dn and Home/End scrolling
       Diffstat:
         dmenu.1                             |       8 +++++++-
         main.c                              |      89 ++++++++++++++++++++-----------
       
       2 files changed, 64 insertions(+), 33 deletions(-)
       ---
 (DIR) diff --git a/dmenu.1 b/dmenu.1
       t@@ -40,7 +40,7 @@ defines the seconds to wait for standard input, before exiting (default is 3).
        prints version information to standard output, then exits.
        .SH USAGE
        dmenu reads a list of newline-separated items from standard input and creates a
       -menu.  When the user selects an item or enters any text and presses Return, his
       +menu.  When the user selects an item or enters any text and presses Return, his/her
        choice is printed to standard output and dmenu terminates.
        .P
        dmenu is completely controlled by the keyboard. The following keys are recognized:
       t@@ -52,6 +52,12 @@ only items containing this text will be displayed.
        .B Left/Right
        Select the previous/next item.
        .TP
       +.B PageUp/PageDown
       +Select the first item of the previous/next 'page' of items.
       +.TP
       +.B Home/End
       +Select the first/last item.
       +.TP
        .B Tab
        Copy the selected item to the input field.
        .TP
 (DIR) diff --git a/main.c b/main.c
       t@@ -170,6 +170,42 @@ kpress(XKeyEvent * e) {
                        }
                }
                switch(ksym) {
       +        default:
       +                if(num && !iscntrl((int) buf[0])) {
       +                        buf[num] = 0;
       +                        if(len > 0)
       +                                strncat(text, buf, sizeof text);
       +                        else
       +                                strncpy(text, buf, sizeof text);
       +                        match(text);
       +                }
       +                break;
       +        case XK_BackSpace:
       +                if((i = len)) {
       +                        prev_nitem = nitem;
       +                        do {
       +                                text[--i] = 0;
       +                                match(text);
       +                        } while(i && nitem && prev_nitem == nitem);
       +                        match(text);
       +                }
       +                break;
       +        case XK_End:
       +                while(next) {
       +                        sel = curr = next;
       +                        calcoffsets();
       +                }
       +                while(sel->right)
       +                        sel = sel->right;
       +                break;
       +        case XK_Escape:
       +                ret = 1;
       +                running = False;
       +                break;
       +        case XK_Home:
       +                sel = curr = item;
       +                calcoffsets();
       +                break;
                case XK_Left:
                        if(!(sel && sel->left))
                                return;
       t@@ -179,18 +215,15 @@ kpress(XKeyEvent * e) {
                                calcoffsets();
                        }
                        break;
       -        case XK_Tab:
       -                if(!sel)
       -                        return;
       -                strncpy(text, sel->text, sizeof text);
       -                match(text);
       +        case XK_Next:
       +                if(next) {
       +                        sel = curr = next;
       +                        calcoffsets();
       +                }
                        break;
       -        case XK_Right:
       -                if(!(sel && sel->right))
       -                        return;
       -                sel=sel->right;
       -                if(sel == next) {
       -                        curr = next;
       +        case XK_Prior:
       +                if(prev) {
       +                        sel = curr = prev;
                                calcoffsets();
                        }
                        break;
       t@@ -204,29 +237,21 @@ kpress(XKeyEvent * e) {
                        fflush(stdout);
                        running = False;
                        break;
       -        case XK_Escape:
       -                ret = 1;
       -                running = False;
       -                break;
       -        case XK_BackSpace:
       -                if((i = len)) {
       -                        prev_nitem = nitem;
       -                        do {
       -                                text[--i] = 0;
       -                                match(text);
       -                        } while(i && nitem && prev_nitem == nitem);
       -                        match(text);
       +        case XK_Right:
       +                if(!(sel && sel->right))
       +                        return;
       +                sel=sel->right;
       +                if(sel == next) {
       +                        curr = next;
       +                        calcoffsets();
                        }
                        break;
       -        default:
       -                if(num && !iscntrl((int) buf[0])) {
       -                        buf[num] = 0;
       -                        if(len > 0)
       -                                strncat(text, buf, sizeof text);
       -                        else
       -                                strncpy(text, buf, sizeof text);
       -                        match(text);
       -                }
       +        case XK_Tab:
       +                if(!sel)
       +                        return;
       +                strncpy(text, sel->text, sizeof text);
       +                match(text);
       +                break;
                }
                drawmenu();
        }