diff options
| -rw-r--r-- | dmenu.1 | 88 | ||||
| -rw-r--r-- | dmenu.c | 19 | 
2 files changed, 88 insertions, 19 deletions
| @@ -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) @@ -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)) | 
