ordered switch branches in kpress alphabetically, applied Sanders patch for PgUp/Dn and Home/End scrolling 4bd34662
arg@mig29 · 2006-12-12 09:57 2 file(s) · +64 −33
dmenu.1 +7 −1
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.
main.c +57 −32
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
}