1
0
Fork 0

add Mod1Mask keybindings

This commit is contained in:
Connor Lane Smith 2012-01-01 20:32:40 +01:00
parent 6664e4233f
commit b95fb20269
2 changed files with 88 additions and 19 deletions

88
dmenu.1
View file

@ -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)

19
dmenu.c
View file

@ -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))