mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 09:26:05 +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. By Micah Cowan.
This commit is contained in:
		
							
								
								
									
										11
									
								
								key-string.c
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								key-string.c
									
									
									
									
									
								
							@@ -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++) {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								tmux.h
									
									
									
									
									
								
							@@ -111,6 +111,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. */
 | 
			
		||||
 
 | 
			
		||||
@@ -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