mirror of
				https://github.com/tmux/tmux.git
				synced 2025-10-26 12:27:15 +00:00 
			
		
		
		
	Tidy up control key parsing; add shift.
This commit is contained in:
		
							
								
								
									
										45
									
								
								key-string.c
									
									
									
									
									
								
							
							
						
						
									
										45
									
								
								key-string.c
									
									
									
									
									
								
							| @@ -1,4 +1,4 @@ | |||||||
| /* $Id: key-string.c,v 1.12 2009-01-09 23:57:42 nicm Exp $ */ | /* $Id: key-string.c,v 1.13 2009-01-12 20:13:20 nicm Exp $ */ | ||||||
|  |  | ||||||
| /* | /* | ||||||
|  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> |  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> | ||||||
| @@ -89,37 +89,31 @@ int | |||||||
| key_string_lookup_string(const char *string) | key_string_lookup_string(const char *string) | ||||||
| { | { | ||||||
| 	int	      	 key; | 	int	      	 key; | ||||||
|  | 	const char	*ptr; | ||||||
|  |  | ||||||
| 	if (string[0] == '\0') | 	if (string[0] == '\0') | ||||||
| 		return (KEYC_NONE); | 		return (KEYC_NONE); | ||||||
| 	if (string[1] == '\0') | 	if (string[1] == '\0') | ||||||
| 		return (string[0]); | 		return (string[0]); | ||||||
|  |  | ||||||
| 	if (string[0] == 'C' && string[1] == '-') { | 	ptr = NULL; | ||||||
| 		if (string[2] == '\0' || string[3] != '\0') | 	if (string[0] == 'C' && string[1] == '-') | ||||||
|  | 		ptr = string + 2; | ||||||
|  | 	else if (string[0] == '^') | ||||||
|  | 		ptr = string + 1; | ||||||
|  | 	if (ptr != NULL) { | ||||||
|  | 		if (ptr[0] == '\0') | ||||||
| 			return (KEYC_NONE); | 			return (KEYC_NONE); | ||||||
| 		if (string[1] == 32) | 		if (ptr[1] == '\0') { | ||||||
|  | 			if (ptr[0] == 32) | ||||||
| 				return (0); | 				return (0); | ||||||
| 		if (string[2] >= 64 && string[2] <= 95) | 			if (ptr[0] >= 64 && ptr[0] <= 95) | ||||||
| 			return (string[2] - 64); | 				return (ptr[0] - 64); | ||||||
| 		if (string[2] >= 97 && string[2] <= 122) | 			if (ptr[0] >= 97 && ptr[0] <= 122) | ||||||
| 			return (string[2] - 96); | 				return (ptr[0] - 96); | ||||||
| 		key = key_string_search_table(string + 2); |  | ||||||
| 		if (key != KEYC_NONE) |  | ||||||
| 			return (KEYC_ADDCTL(key)); |  | ||||||
| 			return (KEYC_NONE); | 			return (KEYC_NONE); | ||||||
| 		} | 		} | ||||||
|  | 		key = key_string_search_table(ptr); | ||||||
| 	if (string[0] == '^') { |  | ||||||
| 		if (string[1] == '\0' || string[2] != '\0') |  | ||||||
| 			return (KEYC_NONE); |  | ||||||
| 		if (string[1] == 32) |  | ||||||
| 			return (0); |  | ||||||
| 		if (string[1] >= 64 && string[1] <= 95) |  | ||||||
| 			return (string[1] - 64); |  | ||||||
| 		if (string[1] >= 97 && string[1] <= 122) |  | ||||||
| 			return (string[1] - 96); |  | ||||||
| 		key = key_string_search_table(string + 1); |  | ||||||
| 		if (key != KEYC_NONE) | 		if (key != KEYC_NONE) | ||||||
| 			return (KEYC_ADDCTL(key)); | 			return (KEYC_ADDCTL(key)); | ||||||
| 		return (KEYC_NONE); | 		return (KEYC_NONE); | ||||||
| @@ -156,7 +150,12 @@ key_string_lookup_key(int key) | |||||||
| 		xsnprintf(tmp2, sizeof tmp2, "C-%s", s); | 		xsnprintf(tmp2, sizeof tmp2, "C-%s", s); | ||||||
| 		return (tmp2); | 		return (tmp2); | ||||||
| 	} | 	} | ||||||
|  | 	if (KEYC_ISSFT(key)) { | ||||||
|  | 		if ((s = key_string_lookup_key(KEYC_REMOVESFT(key))) == NULL) | ||||||
|  | 			return (NULL); | ||||||
|  | 		xsnprintf(tmp2, sizeof tmp2, "S-%s", s); | ||||||
|  | 		return (tmp2); | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	if (key >= 32 && key <= 255) { | 	if (key >= 32 && key <= 255) { | ||||||
| 		tmp[0] = key; | 		tmp[0] = key; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Nicholas Marriott
					Nicholas Marriott