tfast grab patch (thanks Rob) - 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 e0e6b071c63f960c398b43b2fbf0dec66a9b3ab6
 (DIR) parent cd3b4915c3358b93f8dbff531bff82c0cd833c0b
 (HTM) Author: Connor Lane Smith <cls@lubutu.com>
       Date:   Sun,  8 May 2011 15:15:24 +0100
       
       fast grab patch (thanks Rob)
       Diffstat:
         dmenu.1                             |      22 +++++++++++++---------
         dmenu.c                             |      18 ++++++++++++++----
       
       2 files changed, 27 insertions(+), 13 deletions(-)
       ---
 (DIR) diff --git a/dmenu.1 b/dmenu.1
       t@@ -4,6 +4,7 @@ dmenu \- dynamic menu
        .SH SYNOPSIS
        .B dmenu
        .RB [ \-b ]
       +.RB [ \-f ]
        .RB [ \-i ]
        .RB [ \-l
        .IR lines ]
       t@@ -32,9 +33,9 @@ is a dynamic menu for X, originally designed for
        .BR dwm (1).
        It manages huge numbers of user-defined menu items efficiently.
        .P
       -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,
       -their choice is printed to standard output and dmenu terminates.
       +dmenu reads a list of newline-separated items from stdin and creates a menu.
       +When the user selects an item or enters any text and presses Return, their
       +choice is printed to stdout and dmenu terminates.
        .P
        .B dmenu_run
        is a dmenu script used by dwm which lists programs in the user's PATH and
       t@@ -47,6 +48,10 @@ is a program used by dmenu_run to find and cache a list of executables.
        .B \-b
        dmenu appears at the bottom of the screen.
        .TP
       +.B \-f
       +dmenu grabs the keyboard before reading stdin.  This is faster, but may lock up
       +X if stdin is from a terminal.
       +.TP
        .B \-i
        dmenu matches menu items case insensitively.
        .TP
       t@@ -66,7 +71,7 @@ defines the font or font set used.
        defines the normal background color.
        .IR #RGB ,
        .IR #RRGGBB ,
       -and color names are supported.
       +and X color names are supported.
        .TP
        .BI \-nf " color"
        defines the normal foreground color.
       t@@ -78,7 +83,7 @@ defines the selected background color.
        defines the selected foreground color.
        .TP
        .B \-v
       -prints version information to standard output, then exits.
       +prints version information to stdout, then exits.
        .SH USAGE
        dmenu is completely controlled by the keyboard.  Besides standard Unix line
        editing and item selection (Up/Down/Left/Right, PageUp/PageDown, Home/End), the
       t@@ -88,12 +93,11 @@ following keys are recognized:
        Copy the selected item to the input field.
        .TP
        .B Return (Control\-j)
       -Confirm selection.  Prints the selected item to standard output and exits,
       -returning success.
       +Confirm selection.  Prints the selected item to stdout and exits, returning
       +success.
        .TP
        .B Shift\-Return (Control\-Shift\-j)
       -Confirm input.  Prints the input text to standard output and exits, returning
       -success.
       +Confirm input.  Prints the input text to stdout and exits, returning success.
        .TP
        .B Escape (Control\-c)
        Exit without selecting an item, returning failure.
 (DIR) diff --git a/dmenu.c b/dmenu.c
       t@@ -64,6 +64,7 @@ static int (*fstrncmp)(const char *, const char *, size_t) = strncmp;
        
        int
        main(int argc, char *argv[]) {
       +        Bool fast = False;
                int i;
        
                progname = "dmenu";
       t@@ -77,6 +78,8 @@ main(int argc, char *argv[]) {
                                topbar = False;
                        else if(!strcmp(argv[i], "-i"))
                                fstrncmp = strncasecmp;
       +                else if(!strcmp(argv[i], "-f"))
       +                        fast = True;
                        else if(i == argc-1)
                                goto usage;
                        /* double flags */
       t@@ -101,13 +104,21 @@ main(int argc, char *argv[]) {
        
                dc = initdc();
                initfont(dc, font);
       -        readstdin();
       -        setup();
       +
       +        if(fast) {
       +                setup();
       +                readstdin();
       +        }
       +        else {
       +                readstdin();
       +                setup();
       +        }
       +        match();
                run();
                return EXIT_FAILURE;
        
        usage:
       -        fputs("usage: dmenu [-b] [-i] [-l lines] [-m monitor] [-p prompt] [-fn font]\n"
       +        fputs("usage: dmenu [-b] [-f] [-i] [-l lines] [-m monitor] [-p prompt] [-fn font]\n"
                      "             [-nb color] [-nf color] [-sb color] [-sf color] [-v]\n", stderr);
                return EXIT_FAILURE;
        }
       t@@ -530,5 +541,4 @@ setup(void) {
                inputw = MIN(inputw, mw/3);
                promptw = prompt ? textw(dc, prompt) : 0;
                XMapRaised(dc->dpy, win);
       -        match();
        }