ordered switch branches in kpress alphabetically, applied Sanders patch for PgUp/Dn and Home/End scrolling
This commit is contained in:
		
							parent
							
								
									e19e42adbb
								
							
						
					
					
						commit
						4bd3466215
					
				
							
								
								
									
										8
									
								
								dmenu.1
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								dmenu.1
									
									
									
									
									
								
							| @ -40,7 +40,7 @@ defines the seconds to wait for standard input, before exiting (default is 3). | |||||||
| prints version information to standard output, then exits. | prints version information to standard output, then exits. | ||||||
| .SH USAGE | .SH USAGE | ||||||
| dmenu reads a list of newline-separated items from standard input and creates a | 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 | 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. The following keys are recognized: | ||||||
| @ -52,6 +52,12 @@ only items containing this text will be displayed. | |||||||
| .B Left/Right | .B Left/Right | ||||||
| Select the previous/next item. | Select the previous/next item. | ||||||
| .TP | .TP | ||||||
|  | .B PageUp/PageDown | ||||||
|  | Select the first item of the previous/next 'page' of items. | ||||||
|  | .TP | ||||||
|  | .B Home/End | ||||||
|  | Select the first/last item. | ||||||
|  | .TP | ||||||
| .B Tab | .B Tab | ||||||
| Copy the selected item to the input field. | Copy the selected item to the input field. | ||||||
| .TP | .TP | ||||||
|  | |||||||
							
								
								
									
										87
									
								
								main.c
									
									
									
									
									
								
							
							
						
						
									
										87
									
								
								main.c
									
									
									
									
									
								
							| @ -170,6 +170,42 @@ kpress(XKeyEvent * e) { | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	switch(ksym) { | 	switch(ksym) { | ||||||
|  | 	default: | ||||||
|  | 		if(num && !iscntrl((int) buf[0])) { | ||||||
|  | 			buf[num] = 0; | ||||||
|  | 			if(len > 0) | ||||||
|  | 				strncat(text, buf, sizeof text); | ||||||
|  | 			else | ||||||
|  | 				strncpy(text, buf, sizeof text); | ||||||
|  | 			match(text); | ||||||
|  | 		} | ||||||
|  | 		break; | ||||||
|  | 	case XK_BackSpace: | ||||||
|  | 		if((i = len)) { | ||||||
|  | 			prev_nitem = nitem; | ||||||
|  | 			do { | ||||||
|  | 				text[--i] = 0; | ||||||
|  | 				match(text); | ||||||
|  | 			} while(i && nitem && prev_nitem == nitem); | ||||||
|  | 			match(text); | ||||||
|  | 		} | ||||||
|  | 		break; | ||||||
|  | 	case XK_End: | ||||||
|  | 		while(next) { | ||||||
|  | 			sel = curr = next; | ||||||
|  | 			calcoffsets(); | ||||||
|  | 		} | ||||||
|  | 		while(sel->right) | ||||||
|  | 			sel = sel->right; | ||||||
|  | 		break; | ||||||
|  | 	case XK_Escape: | ||||||
|  | 		ret = 1; | ||||||
|  | 		running = False; | ||||||
|  | 		break; | ||||||
|  | 	case XK_Home: | ||||||
|  | 		sel = curr = item; | ||||||
|  | 		calcoffsets(); | ||||||
|  | 		break; | ||||||
| 	case XK_Left: | 	case XK_Left: | ||||||
| 		if(!(sel && sel->left)) | 		if(!(sel && sel->left)) | ||||||
| 			return; | 			return; | ||||||
| @ -179,18 +215,15 @@ kpress(XKeyEvent * e) { | |||||||
| 			calcoffsets(); | 			calcoffsets(); | ||||||
| 		} | 		} | ||||||
| 		break; | 		break; | ||||||
| 	case XK_Tab: | 	case XK_Next: | ||||||
| 		if(!sel) | 		if(next) { | ||||||
| 			return; | 			sel = curr = next; | ||||||
| 		strncpy(text, sel->text, sizeof text); | 			calcoffsets(); | ||||||
| 		match(text); | 		} | ||||||
| 		break; | 		break; | ||||||
| 	case XK_Right: | 	case XK_Prior: | ||||||
| 		if(!(sel && sel->right)) | 		if(prev) { | ||||||
| 			return; | 			sel = curr = prev; | ||||||
| 		sel=sel->right; |  | ||||||
| 		if(sel == next) { |  | ||||||
| 			curr = next; |  | ||||||
| 			calcoffsets(); | 			calcoffsets(); | ||||||
| 		} | 		} | ||||||
| 		break; | 		break; | ||||||
| @ -204,29 +237,21 @@ kpress(XKeyEvent * e) { | |||||||
| 		fflush(stdout); | 		fflush(stdout); | ||||||
| 		running = False; | 		running = False; | ||||||
| 		break; | 		break; | ||||||
| 	case XK_Escape: | 	case XK_Right: | ||||||
| 		ret = 1; | 		if(!(sel && sel->right)) | ||||||
| 		running = False; | 			return; | ||||||
| 		break; | 		sel=sel->right; | ||||||
| 	case XK_BackSpace: | 		if(sel == next) { | ||||||
| 		if((i = len)) { | 			curr = next; | ||||||
| 			prev_nitem = nitem; | 			calcoffsets(); | ||||||
| 			do { |  | ||||||
| 				text[--i] = 0; |  | ||||||
| 				match(text); |  | ||||||
| 			} while(i && nitem && prev_nitem == nitem); |  | ||||||
| 			match(text); |  | ||||||
| 		} | 		} | ||||||
| 		break; | 		break; | ||||||
| 	default: | 	case XK_Tab: | ||||||
| 		if(num && !iscntrl((int) buf[0])) { | 		if(!sel) | ||||||
| 			buf[num] = 0; | 			return; | ||||||
| 			if(len > 0) | 		strncpy(text, sel->text, sizeof text); | ||||||
| 				strncat(text, buf, sizeof text); |  | ||||||
| 			else |  | ||||||
| 				strncpy(text, buf, sizeof text); |  | ||||||
| 		match(text); | 		match(text); | ||||||
| 		} | 		break; | ||||||
| 	} | 	} | ||||||
| 	drawmenu(); | 	drawmenu(); | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user