mirror of
				https://github.com/tmux/tmux.git
				synced 2025-10-26 12:27:15 +00:00 
			
		
		
		
	Use a macro-based mask for obtaining a key or modifier-set from the combination.
Display C-@, etc, as C-Space, in list-keys.
This commit is contained in:
		
							
								
								
									
										13
									
								
								key-string.c
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								key-string.c
									
									
									
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| /* $Id: key-string.c,v 1.33 2010-06-05 06:27:19 micahcowan Exp $ */ | ||||
| /* $Id: key-string.c,v 1.34 2010-06-05 20:29:11 micahcowan Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> | ||||
| @@ -184,6 +184,15 @@ key_string_lookup_key(int key) | ||||
|  | ||||
| 	*out = '\0'; | ||||
|  | ||||
| 	/* | ||||
| 	 * Special case: display C-@ as C-Space. Could do this below in | ||||
| 	 * the (key >= 0 && key <= 32), but this way we let it be found | ||||
| 	 * in key_string_table, for the unlikely chance that we might | ||||
| 	 * change its name. | ||||
| 	 */ | ||||
| 	if ((key & KEYC_MASK_KEY) == 0) | ||||
| 	    key = ' ' | KEYC_CTRL | (key & KEYC_MASK_MOD); | ||||
|  | ||||
| 	/* Fill in the modifiers. */ | ||||
| 	if (key & KEYC_CTRL) | ||||
| 		strlcat(out, "C-", sizeof out); | ||||
| @@ -191,7 +200,7 @@ key_string_lookup_key(int key) | ||||
| 		strlcat(out, "M-", sizeof out); | ||||
| 	if (key & KEYC_SHIFT) | ||||
| 		strlcat(out, "S-", sizeof out); | ||||
| 	key &= ~(KEYC_CTRL|KEYC_ESCAPE|KEYC_SHIFT); | ||||
| 	key &= KEYC_MASK_KEY; | ||||
|  | ||||
| 	/* Try the key against the string table. */ | ||||
| 	for (i = 0; i < nitems(key_string_table); i++) { | ||||
|   | ||||
							
								
								
									
										6
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								tmux.h
									
									
									
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| /* $Id: tmux.h,v 1.558 2010-05-22 21:56:04 micahcowan Exp $ */ | ||||
| /* $Id: tmux.h,v 1.559 2010-06-05 20:29:11 micahcowan Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> | ||||
| @@ -110,6 +110,10 @@ extern char   **environ; | ||||
| #define KEYC_SHIFT 0x8000 | ||||
| #define KEYC_PREFIX 0x10000 | ||||
|  | ||||
| /* Mask to obtain key w/o modifiers */ | ||||
| #define KEYC_MASK_MOD (KEYC_ESCAPE|KEYC_CTRL|KEYC_SHIFT|KEYC_PREFIX) | ||||
| #define KEYC_MASK_KEY (~KEYC_MASK_MOD) | ||||
|  | ||||
| /* Other key codes. */ | ||||
| enum key_code { | ||||
| 	/* Mouse key. */ | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| /* $Id: window-copy.c,v 1.118 2010-06-05 07:48:35 micahcowan Exp $ */ | ||||
| /* $Id: window-copy.c,v 1.119 2010-06-05 20:29:11 micahcowan Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> | ||||
| @@ -367,7 +367,7 @@ window_copy_key(struct window_pane *wp, struct session *sess, int key) | ||||
| 	if (data->inputtype == WINDOW_COPY_JUMPFORWARD | ||||
| 	    || data->inputtype == WINDOW_COPY_JUMPBACK) { | ||||
| 		/* Ignore keys with modifiers. */ | ||||
| 		if ((key & 0xff00) == 0) { | ||||
| 		if ((key & KEYC_MASK_MOD) == 0) { | ||||
| 			data->jumpchar = key; | ||||
| 			if (data->inputtype == WINDOW_COPY_JUMPFORWARD) { | ||||
| 				for (; np != 0; np--) | ||||
| @@ -627,7 +627,7 @@ window_copy_key(struct window_pane *wp, struct session *sess, int key) | ||||
| 		*data->inputstr = '\0'; | ||||
| 		goto input_on; | ||||
| 	case MODEKEYCOPY_STARTNUMBERPREFIX: | ||||
| 		key &= 0xff; | ||||
| 		key &= KEYC_MASK_KEY; | ||||
| 		if (key >= '0' && key <= '9') { | ||||
| 			data->inputtype = WINDOW_COPY_NUMERICPREFIX; | ||||
| 			data->numprefix = 0; | ||||
| @@ -741,7 +741,7 @@ window_copy_key_numeric_prefix(struct window_pane *wp, int key) | ||||
| 	struct window_copy_mode_data	*data = wp->modedata; | ||||
| 	struct screen			*s = &data->screen; | ||||
|  | ||||
| 	key &= 0xff; | ||||
| 	key &= KEYC_MASK_KEY; | ||||
| 	if (key < '0' || key > '9') | ||||
| 		return 1; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Micah Cowan
					Micah Cowan