mirror of
				https://github.com/tmux/tmux.git
				synced 2025-10-26 12:27:15 +00:00 
			
		
		
		
	Handle ctrl/shift modifiers better.
This commit is contained in:
		
							
								
								
									
										3
									
								
								CHANGES
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								CHANGES
									
									
									
									
									
								
							| @@ -1,5 +1,6 @@ | ||||
| 12 January 2009 | ||||
|  | ||||
| * More hacks for key handling. | ||||
| * Two commands, resize-pane-up and resize-pane-down to resize a pane. | ||||
| * Make the window pane code handle panes of different sizes, and add a -l | ||||
|   and -p arguments to split-window to specify the new window size in lines | ||||
| @@ -883,7 +884,7 @@ | ||||
|   (including mutt, emacs). No status bar yet and no key remapping or other | ||||
|   customisation. | ||||
|  | ||||
| $Id: CHANGES,v 1.196 2009-01-12 19:23:14 nicm Exp $ | ||||
| $Id: CHANGES,v 1.197 2009-01-12 21:47:03 nicm Exp $ | ||||
|  | ||||
|  LocalWords:  showw utf UTF fulvio ciriaco joshe OSC APC gettime abc DEF OA clr | ||||
|  LocalWords:  rivo nurges lscm Erdely eol smysession mysession ek dstname RB | ||||
|   | ||||
							
								
								
									
										1
									
								
								TODO
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								TODO
									
									
									
									
									
								
							| @@ -104,3 +104,4 @@ | ||||
| - should have a repeat-command delay - if you execute a key binding then | ||||
|   press another key within the delay time it is treated as if it was anoth | ||||
|   key binding (ie the ^A prefix is implied) | ||||
| - key handling sucks a bit and needs to be reworked | ||||
|   | ||||
							
								
								
									
										51
									
								
								input-keys.c
									
									
									
									
									
								
							
							
						
						
									
										51
									
								
								input-keys.c
									
									
									
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| /* $Id: input-keys.c,v 1.21 2009-01-11 23:31:46 nicm Exp $ */ | ||||
| /* $Id: input-keys.c,v 1.22 2009-01-12 21:47:03 nicm Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> | ||||
| @@ -37,10 +37,10 @@ struct input_key_ent { | ||||
|  | ||||
| struct input_key_ent input_keys[] = { | ||||
| 	/* Function keys. */ | ||||
| 	{ KEYC_F1,     "\033OP", INPUTKEY_MODIFIER|INPUTKEY_XTERM }, | ||||
| 	{ KEYC_F2,     "\033OQ", INPUTKEY_MODIFIER|INPUTKEY_XTERM }, | ||||
| 	{ KEYC_F3,     "\033OR", INPUTKEY_MODIFIER|INPUTKEY_XTERM }, | ||||
| 	{ KEYC_F4,     "\033OS", INPUTKEY_MODIFIER|INPUTKEY_XTERM }, | ||||
| 	{ KEYC_F1,     "\033OP",   INPUTKEY_MODIFIER|INPUTKEY_XTERM }, | ||||
| 	{ KEYC_F2,     "\033OQ",   INPUTKEY_MODIFIER|INPUTKEY_XTERM }, | ||||
| 	{ KEYC_F3,     "\033OR",   INPUTKEY_MODIFIER|INPUTKEY_XTERM }, | ||||
| 	{ KEYC_F4,     "\033OS",   INPUTKEY_MODIFIER|INPUTKEY_XTERM }, | ||||
| 	{ KEYC_F5,     "\033[15~", INPUTKEY_MODIFIER|INPUTKEY_XTERM }, | ||||
| 	{ KEYC_F6,     "\033[17~", INPUTKEY_MODIFIER|INPUTKEY_XTERM }, | ||||
| 	{ KEYC_F7,     "\033[18~", INPUTKEY_MODIFIER|INPUTKEY_XTERM }, | ||||
| @@ -49,24 +49,35 @@ struct input_key_ent input_keys[] = { | ||||
| 	{ KEYC_F10,    "\033[21~", INPUTKEY_MODIFIER|INPUTKEY_XTERM }, | ||||
| 	{ KEYC_F11,    "\033[23~", INPUTKEY_MODIFIER|INPUTKEY_XTERM }, | ||||
| 	{ KEYC_F12,    "\033[24~", INPUTKEY_MODIFIER|INPUTKEY_XTERM }, | ||||
| 	{ KEYC_IC,     "\033[2~", INPUTKEY_MODIFIER|INPUTKEY_XTERM }, | ||||
| 	{ KEYC_DC,     "\033[3~", INPUTKEY_MODIFIER|INPUTKEY_XTERM }, | ||||
| 	{ KEYC_HOME,   "\033[1~", INPUTKEY_MODIFIER|INPUTKEY_XTERM }, | ||||
| 	{ KEYC_END,    "\033[4~", INPUTKEY_MODIFIER|INPUTKEY_XTERM }, | ||||
| 	{ KEYC_NPAGE,  "\033[6~", INPUTKEY_MODIFIER|INPUTKEY_XTERM }, | ||||
| 	{ KEYC_PPAGE,  "\033[5~", INPUTKEY_MODIFIER|INPUTKEY_XTERM }, | ||||
| 	{ KEYC_BTAB,   "\033[Z",  INPUTKEY_MODIFIER }, | ||||
| 	{ KEYC_IC,     "\033[2~",  INPUTKEY_MODIFIER|INPUTKEY_XTERM }, | ||||
| 	{ KEYC_DC,     "\033[3~",  INPUTKEY_MODIFIER|INPUTKEY_XTERM }, | ||||
| 	{ KEYC_HOME,   "\033[1~",  INPUTKEY_MODIFIER|INPUTKEY_XTERM }, | ||||
| 	{ KEYC_END,    "\033[4~",  INPUTKEY_MODIFIER|INPUTKEY_XTERM }, | ||||
| 	{ KEYC_NPAGE,  "\033[6~",  INPUTKEY_MODIFIER|INPUTKEY_XTERM }, | ||||
| 	{ KEYC_PPAGE,  "\033[5~",  INPUTKEY_MODIFIER|INPUTKEY_XTERM }, | ||||
| 	{ KEYC_BTAB,   "\033[Z",   INPUTKEY_MODIFIER }, | ||||
|  | ||||
| 	/* Arrow keys. Cursor versions must come first. */ | ||||
| 	{ KEYC_UP,     "\033OA", INPUTKEY_MODIFIER|INPUTKEY_CURSOR }, | ||||
| 	{ KEYC_DOWN,   "\033OB", INPUTKEY_MODIFIER|INPUTKEY_CURSOR }, | ||||
| 	{ KEYC_LEFT,   "\033OD", INPUTKEY_MODIFIER|INPUTKEY_CURSOR }, | ||||
| 	{ KEYC_RIGHT,  "\033OC", INPUTKEY_MODIFIER|INPUTKEY_CURSOR }, | ||||
| 	{ KEYC_UP,     "\033[A", INPUTKEY_MODIFIER }, | ||||
| 	{ KEYC_DOWN,   "\033[B", INPUTKEY_MODIFIER }, | ||||
| 	{ KEYC_LEFT,   "\033[D", INPUTKEY_MODIFIER }, | ||||
| 	{ KEYC_RIGHT,  "\033[C", INPUTKEY_MODIFIER }, | ||||
| 	{ KEYC_UP,     "\033OA",   INPUTKEY_CURSOR }, | ||||
| 	{ KEYC_DOWN,   "\033OB",   INPUTKEY_CURSOR }, | ||||
| 	{ KEYC_RIGHT,  "\033OC",   INPUTKEY_CURSOR }, | ||||
| 	{ KEYC_LEFT,   "\033OD",   INPUTKEY_CURSOR }, | ||||
|  | ||||
| 	{ KEYC_UP,     "\033[A",   0 }, | ||||
| 	{ KEYC_DOWN,   "\033[B",   0 }, | ||||
| 	{ KEYC_RIGHT,  "\033[C",   0 }, | ||||
| 	{ KEYC_LEFT,   "\033[D",   0 }, | ||||
|  | ||||
| 	{ KEYC_ADDCTL(KEYC_UP),    "\033Oa", 0 }, | ||||
| 	{ KEYC_ADDCTL(KEYC_DOWN),  "\033Ob", 0 }, | ||||
| 	{ KEYC_ADDCTL(KEYC_RIGHT), "\033Oc", 0 }, | ||||
| 	{ KEYC_ADDCTL(KEYC_LEFT),  "\033Od", 0 }, | ||||
| 	 | ||||
| 	{ KEYC_ADDSFT(KEYC_UP),    "\033[a", 0 }, | ||||
| 	{ KEYC_ADDSFT(KEYC_DOWN),  "\033[b", 0 }, | ||||
| 	{ KEYC_ADDSFT(KEYC_RIGHT), "\033[c", 0 }, | ||||
| 	{ KEYC_ADDSFT(KEYC_LEFT),  "\033[d", 0 }, | ||||
| 	     | ||||
| 	/* Keypad keys. Keypad versions must come first. */ | ||||
| 	{ KEYC_KP0_1,  "/", INPUTKEY_KEYPAD }, | ||||
| 	{ KEYC_KP0_2,  "*", INPUTKEY_KEYPAD }, | ||||
|   | ||||
							
								
								
									
										37
									
								
								tty-keys.c
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								tty-keys.c
									
									
									
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| /* $Id: tty-keys.c,v 1.18 2009-01-10 18:28:09 nicm Exp $ */ | ||||
| /* $Id: tty-keys.c,v 1.19 2009-01-12 21:47:03 nicm Exp $ */ | ||||
|  | ||||
| /* | ||||
|  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> | ||||
| @@ -56,18 +56,30 @@ struct tty_key_ent tty_keys[] = { | ||||
| 	{ TTYC_KCBT,  NULL,	KEYC_BTAB,  TTYKEY_MODIFIER }, | ||||
|  | ||||
| 	/* Arrow keys. */ | ||||
| 	{ 0,          "\033OA", KEYC_UP,    TTYKEY_RAW }, | ||||
| 	{ 0,          "\033OB", KEYC_DOWN,  TTYKEY_RAW }, | ||||
| 	{ 0,          "\033OC", KEYC_RIGHT, TTYKEY_RAW }, | ||||
| 	{ 0,          "\033OD", KEYC_LEFT,  TTYKEY_RAW }, | ||||
|  | ||||
| 	{ 0,          "\033[A", KEYC_UP,    TTYKEY_RAW }, | ||||
| 	{ 0,          "\033[B", KEYC_DOWN,  TTYKEY_RAW }, | ||||
| 	{ 0,          "\033[C", KEYC_RIGHT, TTYKEY_RAW }, | ||||
| 	{ 0,          "\033[D", KEYC_LEFT,  TTYKEY_RAW }, | ||||
|  | ||||
| 	{ 0,          "\033Oa", KEYC_ADDCTL(KEYC_UP),    TTYKEY_RAW }, | ||||
| 	{ 0,          "\033Ob", KEYC_ADDCTL(KEYC_DOWN),  TTYKEY_RAW }, | ||||
| 	{ 0,          "\033Oc", KEYC_ADDCTL(KEYC_RIGHT), TTYKEY_RAW }, | ||||
| 	{ 0,          "\033Od", KEYC_ADDCTL(KEYC_LEFT),  TTYKEY_RAW }, | ||||
|  | ||||
| 	{ 0,          "\033[a", KEYC_ADDSFT(KEYC_UP),    TTYKEY_RAW }, | ||||
| 	{ 0,          "\033[b", KEYC_ADDSFT(KEYC_DOWN),  TTYKEY_RAW }, | ||||
| 	{ 0,          "\033[c", KEYC_ADDSFT(KEYC_RIGHT), TTYKEY_RAW }, | ||||
| 	{ 0,          "\033[d", KEYC_ADDSFT(KEYC_LEFT),  TTYKEY_RAW }, | ||||
|  | ||||
| 	{ TTYC_KCUU1, NULL,     KEYC_UP,    TTYKEY_MODIFIER }, | ||||
| 	{ TTYC_KCUD1, NULL,     KEYC_DOWN,  TTYKEY_MODIFIER }, | ||||
| 	{ TTYC_KCUB1, NULL,     KEYC_LEFT,  TTYKEY_MODIFIER }, | ||||
| 	{ TTYC_KCUF1, NULL,     KEYC_RIGHT, TTYKEY_MODIFIER }, | ||||
| 	{ 0,          "\033OA", KEYC_UP,    TTYKEY_RAW|TTYKEY_MODIFIER }, | ||||
| 	{ 0,          "\033OB", KEYC_DOWN,  TTYKEY_RAW|TTYKEY_MODIFIER }, | ||||
| 	{ 0,          "\033OD", KEYC_LEFT,  TTYKEY_RAW|TTYKEY_MODIFIER }, | ||||
| 	{ 0,          "\033OC", KEYC_RIGHT, TTYKEY_RAW|TTYKEY_MODIFIER }, | ||||
| 	{ 0,          "\033[A", KEYC_UP,    TTYKEY_RAW|TTYKEY_MODIFIER }, | ||||
| 	{ 0,          "\033[B", KEYC_DOWN,  TTYKEY_RAW|TTYKEY_MODIFIER }, | ||||
| 	{ 0,          "\033[D", KEYC_LEFT,  TTYKEY_RAW|TTYKEY_MODIFIER }, | ||||
| 	{ 0,          "\033[C", KEYC_RIGHT, TTYKEY_RAW|TTYKEY_MODIFIER }, | ||||
|  | ||||
| 	/* | ||||
| 	 * Numeric keypad. termcap and terminfo are totally confusing for this. | ||||
| @@ -231,11 +243,14 @@ tty_keys_next(struct tty *tty, int *key) | ||||
| 		return (0); | ||||
| 	} | ||||
|  | ||||
| 	/* Not found. Look for an xterm argument and try again. */ | ||||
| 	/* Not found. Look xterm-style function keys with an argument. */ | ||||
| 	if (len < sizeof tmp && len > 4 && buf[len - 3] == ';') { | ||||
| 		memcpy(tmp, buf, len); | ||||
| 		log_debug("xterm key in: %s", tmp); | ||||
| 		arg = tmp[len - 2]; | ||||
| 		tmp[len - 3] = tmp[len - 1];	/* restore last */ | ||||
| 		tmp[3] = tmp[len - 1];	/* move last */ | ||||
| 		tmp[4] = '\0'; | ||||
| 		log_debug("xterm key out: %s", tmp); | ||||
| 		log_debug("argument is: %c", arg); | ||||
|  | ||||
| 		tk = tty_keys_find(tty, tmp + 1, len - 3, &size); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Nicholas Marriott
					Nicholas Marriott