ordered switch branches in kpress alphabetically, applied Sanders patch for PgUp/Dn and Home/End scrolling
4bd34662
2 file(s) · +64 −33
| 40 | 40 | prints version information to standard output, then exits. |
|
| 41 | 41 | .SH USAGE |
|
| 42 | 42 | dmenu reads a list of newline-separated items from standard input and creates a |
|
| 43 | - | menu. When the user selects an item or enters any text and presses Return, his |
|
| 43 | + | menu. When the user selects an item or enters any text and presses Return, his/her |
|
| 44 | 44 | choice is printed to standard output and dmenu terminates. |
|
| 45 | 45 | .P |
|
| 46 | 46 | dmenu is completely controlled by the keyboard. The following keys are recognized: |
|
| 51 | 51 | .TP |
|
| 52 | 52 | .B Left/Right |
|
| 53 | 53 | Select the previous/next item. |
|
| 54 | + | .TP |
|
| 55 | + | .B PageUp/PageDown |
|
| 56 | + | Select the first item of the previous/next 'page' of items. |
|
| 57 | + | .TP |
|
| 58 | + | .B Home/End |
|
| 59 | + | Select the first/last item. |
|
| 54 | 60 | .TP |
|
| 55 | 61 | .B Tab |
|
| 56 | 62 | Copy the selected item to the input field. |
|
| 170 | 170 | } |
|
| 171 | 171 | } |
|
| 172 | 172 | switch(ksym) { |
|
| 173 | + | default: |
|
| 174 | + | if(num && !iscntrl((int) buf[0])) { |
|
| 175 | + | buf[num] = 0; |
|
| 176 | + | if(len > 0) |
|
| 177 | + | strncat(text, buf, sizeof text); |
|
| 178 | + | else |
|
| 179 | + | strncpy(text, buf, sizeof text); |
|
| 180 | + | match(text); |
|
| 181 | + | } |
|
| 182 | + | break; |
|
| 183 | + | case XK_BackSpace: |
|
| 184 | + | if((i = len)) { |
|
| 185 | + | prev_nitem = nitem; |
|
| 186 | + | do { |
|
| 187 | + | text[--i] = 0; |
|
| 188 | + | match(text); |
|
| 189 | + | } while(i && nitem && prev_nitem == nitem); |
|
| 190 | + | match(text); |
|
| 191 | + | } |
|
| 192 | + | break; |
|
| 193 | + | case XK_End: |
|
| 194 | + | while(next) { |
|
| 195 | + | sel = curr = next; |
|
| 196 | + | calcoffsets(); |
|
| 197 | + | } |
|
| 198 | + | while(sel->right) |
|
| 199 | + | sel = sel->right; |
|
| 200 | + | break; |
|
| 201 | + | case XK_Escape: |
|
| 202 | + | ret = 1; |
|
| 203 | + | running = False; |
|
| 204 | + | break; |
|
| 205 | + | case XK_Home: |
|
| 206 | + | sel = curr = item; |
|
| 207 | + | calcoffsets(); |
|
| 208 | + | break; |
|
| 173 | 209 | case XK_Left: |
|
| 174 | 210 | if(!(sel && sel->left)) |
|
| 175 | 211 | return; |
|
| 179 | 215 | calcoffsets(); |
|
| 180 | 216 | } |
|
| 181 | 217 | break; |
|
| 182 | - | case XK_Tab: |
|
| 183 | - | if(!sel) |
|
| 184 | - | return; |
|
| 185 | - | strncpy(text, sel->text, sizeof text); |
|
| 186 | - | match(text); |
|
| 218 | + | case XK_Next: |
|
| 219 | + | if(next) { |
|
| 220 | + | sel = curr = next; |
|
| 221 | + | calcoffsets(); |
|
| 222 | + | } |
|
| 187 | 223 | break; |
|
| 188 | - | case XK_Right: |
|
| 189 | - | if(!(sel && sel->right)) |
|
| 190 | - | return; |
|
| 191 | - | sel=sel->right; |
|
| 192 | - | if(sel == next) { |
|
| 193 | - | curr = next; |
|
| 224 | + | case XK_Prior: |
|
| 225 | + | if(prev) { |
|
| 226 | + | sel = curr = prev; |
|
| 194 | 227 | calcoffsets(); |
|
| 195 | 228 | } |
|
| 196 | 229 | break; |
|
| 204 | 237 | fflush(stdout); |
|
| 205 | 238 | running = False; |
|
| 206 | 239 | break; |
|
| 207 | - | case XK_Escape: |
|
| 208 | - | ret = 1; |
|
| 209 | - | running = False; |
|
| 210 | - | break; |
|
| 211 | - | case XK_BackSpace: |
|
| 212 | - | if((i = len)) { |
|
| 213 | - | prev_nitem = nitem; |
|
| 214 | - | do { |
|
| 215 | - | text[--i] = 0; |
|
| 216 | - | match(text); |
|
| 217 | - | } while(i && nitem && prev_nitem == nitem); |
|
| 218 | - | match(text); |
|
| 240 | + | case XK_Right: |
|
| 241 | + | if(!(sel && sel->right)) |
|
| 242 | + | return; |
|
| 243 | + | sel=sel->right; |
|
| 244 | + | if(sel == next) { |
|
| 245 | + | curr = next; |
|
| 246 | + | calcoffsets(); |
|
| 219 | 247 | } |
|
| 220 | 248 | break; |
|
| 221 | - | default: |
|
| 222 | - | if(num && !iscntrl((int) buf[0])) { |
|
| 223 | - | buf[num] = 0; |
|
| 224 | - | if(len > 0) |
|
| 225 | - | strncat(text, buf, sizeof text); |
|
| 226 | - | else |
|
| 227 | - | strncpy(text, buf, sizeof text); |
|
| 228 | - | match(text); |
|
| 229 | - | } |
|
| 249 | + | case XK_Tab: |
|
| 250 | + | if(!sel) |
|
| 251 | + | return; |
|
| 252 | + | strncpy(text, sel->text, sizeof text); |
|
| 253 | + | match(text); |
|
| 254 | + | break; |
|
| 230 | 255 | } |
|
| 231 | 256 | drawmenu(); |
|
| 232 | 257 | } |
|