updated manpage, changed keybinds

M- binds tend to be wm level, and there were up to 3 binds for the same action
M-{hjkl} also no longer made sense in vlist mode
This commit is contained in:
Connor Lane Smith 2010-06-20 15:04:15 +01:00
parent 97797d90a6
commit 9a33a72c6a
2 changed files with 59 additions and 71 deletions

46
dmenu.1
View File

@ -14,12 +14,22 @@ dmenu \- dynamic menu
.RB [ \-sb " <color>]" .RB [ \-sb " <color>]"
.RB [ \-sf " <color>]" .RB [ \-sf " <color>]"
.RB [ \-v ] .RB [ \-v ]
.B dmenu_run
[<options...>]
.BR dmenu_path
.SH DESCRIPTION .SH DESCRIPTION
.SS Overview .SS Overview
dmenu is a generic menu for X, originally designed for dmenu is a generic menu for X, originally designed for
.BR dwm (1). .BR dwm (1).
It manages huge amounts (up to 10.000 and more) of user defined menu items It manages huge amounts (up to 10.000 and more) of user defined menu items
efficiently. efficiently.
dmenu_run is a dmenu script used by dwm which lists executables in the user's PATH
and executes the selected item.
dmenu_path is a script used by dmenu_run to find and cache a list of executables.
.SS Options .SS Options
.TP .TP
.B \-i .B \-i
@ -33,7 +43,7 @@ reparents dmenu to the window specified by xid.
.TP .TP
.B \-l <lines> .B \-l <lines>
activates vertical list mode. activates vertical list mode.
The given number of lines will be displayed. Window height will get adjusted. The given number of lines will be displayed. Window height will be adjusted.
.TP .TP
.B \-fn <font> .B \-fn <font>
defines the font. defines the font.
@ -60,20 +70,9 @@ 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/her 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. choice is printed to standard output and dmenu terminates.
.P .P
dmenu is completely controlled by the keyboard. The following keys are recognized: dmenu is completely controlled by the keyboard. Besides standard Unix line editing,
.TP and item selection (Up/Down or Left/Right, PageUp/PageDown, Home/End), the following
.B Any printable character keys are recognized:
Appends the character to the text in the input field. This works as a filter:
only items containing this text will be displayed.
.TP
.B Left/Right (Up/Down) (Mod1\-h/Mod1\-l)
Select the previous/next item.
.TP
.B PageUp/PageDown (Mod1\-k/Mod1\-j)
Select the first item of the previous/next 'page' of items.
.TP
.B Home/End (Mod1\-g/Mod1\-G)
Select the first/last item.
.TP .TP
.B Tab (Control\-i) .B Tab (Control\-i)
Copy the selected item to the input field. Copy the selected item to the input field.
@ -84,24 +83,19 @@ Confirm selection and quit (print the selected item to standard output). Returns
on termination. on termination.
.TP .TP
.B Shift\-Return (Control\-Shift\-j) .B Shift\-Return (Control\-Shift\-j)
Confirm selection and quit (print the text in the input field to standard output). Confirm input and quit (print the text in the input field to standard output).
Returns Returns
.B 0 .B 0
on termination. on termination.
.TP .TP
.B Escape (Control\-bracketleft) .B Escape (Control\-c)
Quit without selecting an item. Returns Quit without selecting an item. Returns
.B 1 .B 1
on termination. on termination.
.TP .TP
.B Backspace (Control\-h) .B Control\-y
Remove a character from the input field. Pastes the X selection into the input field. This requires
.TP .BR sselp (1).
.B Control\-u
Remove all characters from the input field.
.TP
.B Control\-w
Remove all characters of current word from the input field.
.SH SEE ALSO .SH SEE ALSO
.BR dwm (1), .BR dwm (1),
.BR wmii (1) . .BR wmii (1).

84
dmenu.c
View File

@ -355,17 +355,23 @@ kpress(XKeyEvent * e) {
/* first check if a control mask is omitted */ /* first check if a control mask is omitted */
if(e->state & ControlMask) { if(e->state & ControlMask) {
switch(tolower(ksym)) { switch(tolower(ksym)) {
default: /* ignore other control sequences */ default:
return; return;
case XK_a: case XK_a:
ksym = XK_Home; ksym = XK_Home;
break; break;
case XK_b:
ksym = XK_Left;
break;
case XK_c: case XK_c:
ksym = XK_Escape; ksym = XK_Escape;
break; break;
case XK_e: case XK_e:
ksym = XK_End; ksym = XK_End;
break; break;
case XK_f:
ksym = XK_Right;
break;
case XK_h: case XK_h:
ksym = XK_BackSpace; ksym = XK_BackSpace;
break; break;
@ -378,6 +384,12 @@ kpress(XKeyEvent * e) {
case XK_k: case XK_k:
text[cursor] = '\0'; text[cursor] = '\0';
break; break;
case XK_n:
ksym = XK_Down;
break;
case XK_p:
ksym = XK_Up;
break;
case XK_u: case XK_u:
memmove(text, text + cursor, sizeof text - cursor + 1); memmove(text, text + cursor, sizeof text - cursor + 1);
cursor = 0; cursor = 0;
@ -393,31 +405,7 @@ kpress(XKeyEvent * e) {
match(text); match(text);
} }
break; break;
} case XK_y:
}
if(CLEANMASK(e->state) & Mod1Mask) {
switch(ksym) {
default:
return;
case XK_h:
ksym = XK_Left;
break;
case XK_l:
ksym = XK_Right;
break;
case XK_j:
ksym = XK_Next;
break;
case XK_k:
ksym = XK_Prior;
break;
case XK_g:
ksym = XK_Home;
break;
case XK_G:
ksym = XK_End;
break;
case XK_p:
{ {
FILE *fp; FILE *fp;
char *s; char *s;
@ -453,6 +441,8 @@ kpress(XKeyEvent * e) {
match(text); match(text);
break; break;
case XK_Delete: case XK_Delete:
if(cursor == len)
return;
for(i = 1; cursor + i < len && !IS_UTF8_1ST_CHAR(text[cursor + i]); i++); for(i = 1; cursor + i < len && !IS_UTF8_1ST_CHAR(text[cursor + i]); i++);
memmove(text + cursor, text + cursor + i, sizeof text - cursor); memmove(text + cursor, text + cursor + i, sizeof text - cursor);
match(text); match(text);
@ -482,18 +472,20 @@ kpress(XKeyEvent * e) {
calcoffsets(); calcoffsets();
break; break;
case XK_Left: case XK_Left:
case XK_Up: if(cursor > 0 && (!sel || !sel->left)) {
if(sel && sel->left){
sel = sel->left;
if(sel->right == curr) {
curr = prev;
calcoffsets();
}
}
else if(cursor > 0)
while(cursor-- > 0 && !IS_UTF8_1ST_CHAR(text[cursor])); while(cursor-- > 0 && !IS_UTF8_1ST_CHAR(text[cursor]));
else break;
}
if(lines > 0)
return; return;
case XK_Up:
if(!sel || !sel->left)
return;
sel = sel->left;
if(sel->right == curr) {
curr = prev;
calcoffsets();
}
break; break;
case XK_Next: case XK_Next:
if(!next) if(!next)
@ -516,18 +508,20 @@ kpress(XKeyEvent * e) {
running = False; running = False;
return; return;
case XK_Right: case XK_Right:
case XK_Down: if(cursor < len) {
if(cursor < len)
while(cursor++ < len && !IS_UTF8_1ST_CHAR(text[cursor])); while(cursor++ < len && !IS_UTF8_1ST_CHAR(text[cursor]));
else if(sel && sel->right) { break;
sel = sel->right;
if(sel == next) {
curr = next;
calcoffsets();
}
} }
else if(lines > 0)
return; return;
case XK_Down:
if(!sel || !sel->right)
return;
sel = sel->right;
if(sel == next) {
curr = next;
calcoffsets();
}
break; break;
case XK_Tab: case XK_Tab:
if(!sel) if(!sel)