dynamic menu
git clone git://
Log | Files | Refs | README | LICENSE

commit b95fb20269f55c9fe649d971c53efb8040d3ceea
parent 6664e4233faa3d6b677a24196e9af4ac5b1920fd
Author: Connor Lane Smith <>
Date:   Sun,  1 Jan 2012 20:32:40 +0100

add Mod1Mask keybindings
dmenu.1 | 88+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------
dmenu.c | 19+++++++++++++------
2 files changed, 88 insertions(+), 19 deletions(-)

diff --git a/dmenu.1 b/dmenu.1 @@ -33,7 +33,7 @@ matching the tokens in the input. .B dmenu_run is a script used by .IR dwm (1) -which lists programs in the user's $PATH and executes the selected item. +which lists programs in the user's $PATH and runs the result in their $SHELL. .SH OPTIONS .TP .B \-b @@ -73,28 +73,90 @@ defines the selected foreground color. .B \-v prints version information to stdout, then exits. .SH USAGE -dmenu is completely controlled by the keyboard. Besides standard Unix line -editing and item selection (arrow keys, page up/down, home and end), the -following keys are recognized: +dmenu is completely controlled by the keyboard. Items are selected using the +arrow keys, page up, page down, home, and end. .TP -.B Tab (Ctrl\-i) +.B Tab Copy the selected item to the input field. .TP -.B Return (Ctrl\-j) +.B Return Confirm selection. Prints the selected item to stdout and exits, returning success. .TP -.B Shift\-Return (Ctrl\-Shift\-j) +.B Shift\-Return Confirm input. Prints the input text to stdout and exits, returning success. .TP -.B Escape (Ctrl\-c) +.B Escape Exit without selecting an item, returning failure. .TP -.B Ctrl\-y -Paste the primary X selection into the input field. +C\-a +Home .TP -.B Ctrl-Shift-y -Paste the X clipboard into the input field. +C\-b +Left +.TP +C\-c +Escape +.TP +C\-d +Delete +.TP +C\-e +End +.TP +C\-f +Right +.TP +C\-h +Backspace +.TP +C\-i +Tab +.TP +C\-j +Return +.TP +C\-k +Delete line right +.TP +C\-m +Return +.TP +C\-n +Down +.TP +C\-p +Up +.TP +C\-u +Delete line left +.TP +C\-w +Delete word left +.TP +C\-y +Paste from primary X selection +.TP +C\-Y +Paste from X clipboard +.TP +M\-g +Home +.TP +M\-G +End +.TP +M\-h +Page up +.TP +M\-j +Up +.TP +M\-k +Down +.TP +M\-l +Page down .SH SEE ALSO .IR dwm (1), -.IR lsx (1) +.IR stest (1) diff --git a/dmenu.c b/dmenu.c @@ -243,11 +243,8 @@ keypress(XKeyEvent *ev) { len = XmbLookupString(xic, ev, buf, sizeof buf, &ksym, &status); if(status == XBufferOverflow) return; - if(ev->state & ControlMask) { - KeySym lower, upper; - - XConvertCase(ksym, &lower, &upper); - switch(lower) { + if(ev->state & ControlMask) + switch(ksym) { case XK_a: ksym = XK_Home; break; case XK_b: ksym = XK_Left; break; case XK_c: ksym = XK_Escape; break; @@ -281,7 +278,17 @@ keypress(XKeyEvent *ev) { default: return; } - } + else if(ev->state & Mod1Mask) + switch(ksym) { + case XK_g: ksym = XK_Home; break; + case XK_G: ksym = XK_End; break; + case XK_h: ksym = XK_Prior; break; + case XK_j: ksym = XK_Up; break; + case XK_k: ksym = XK_Down; break; + case XK_l: ksym = XK_Next; break; + default: + return; + } switch(ksym) { default: if(!iscntrl(*buf))