@ -77,6 +77,49 @@ static unsigned int defaultucs = 257;  
			
		
	
		
			
				
					/* key, mask, output, keypad, cursor, crlf */  
			
		
	
		
			
				
					static  Key  key [ ]  =  {  
			
		
	
		
			
				
						/* keysym             mask         string         keypad cursor crlf */   
			
		
	
		
			
				
						{  XK_KP_Home ,        XK_NO_MOD ,       " \033 [H " ,         0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_Home ,        ShiftMask ,       " \033 [1;2H " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_Up ,          XK_NO_MOD ,       " \033 Ox " ,        + 1 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_Up ,          XK_NO_MOD ,       " \033 [A " ,         0 ,    - 1 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_Up ,          XK_NO_MOD ,       " \033 OA " ,         0 ,    + 1 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_Down ,        XK_NO_MOD ,       " \033 Or " ,        + 1 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_Down ,        XK_NO_MOD ,       " \033 [B " ,         0 ,    - 1 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_Down ,        XK_NO_MOD ,       " \033 OB " ,         0 ,    + 1 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_Left ,        XK_NO_MOD ,       " \033 Ot " ,        + 1 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_Left ,        XK_NO_MOD ,       " \033 [D " ,         0 ,    - 1 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_Left ,        XK_NO_MOD ,       " \033 OD " ,         0 ,    + 1 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_Right ,       XK_NO_MOD ,       " \033 Ov " ,        + 1 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_Right ,       XK_NO_MOD ,       " \033 [C " ,         0 ,    - 1 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_Right ,       XK_NO_MOD ,       " \033 OC " ,         0 ,    + 1 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_Prior ,       XK_NO_MOD ,       " \033 [5~ " , 	     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_Prior ,       ShiftMask ,       " \033 [5;2~ " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_Begin ,       XK_NO_MOD ,       " \033 [E " ,         0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_End ,         XK_NO_MOD ,       " \033 [4~ " ,        0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_End ,         ShiftMask ,       " \033 [1;2F " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_Next ,        XK_NO_MOD ,       " \033 [6~ " ,        0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_Next ,        ShiftMask ,       " \033 [6;2~ " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_Insert ,      XK_NO_MOD ,       " \033 [2~ " ,        0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_Insert ,      ShiftMask ,       " \033 [2;2~ " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_Delete ,      XK_NO_MOD ,       " \033 [3~ " ,        0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_Delete ,      ShiftMask ,       " \033 [3;2~ " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_Multiply ,    XK_NO_MOD ,       " \033 Oj " ,        + 1 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_Add ,         XK_NO_MOD ,       " \033 Ok " ,        + 1 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_Enter ,       XK_NO_MOD ,       " \033 OM " ,        + 1 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_Enter ,       XK_NO_MOD ,       " \n " ,            - 1 ,     0 ,    - 1 } ,   
			
		
	
		
			
				
						{  XK_KP_Enter ,       XK_NO_MOD ,       " \r \n " ,          - 1 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_Subtract ,    XK_NO_MOD ,       " \033 Om " ,        + 1 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_Decimal ,     XK_NO_MOD ,       " \033 On " ,        + 1 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_Divide ,      XK_NO_MOD ,       " \033 Oo " ,        + 1 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_0 ,           XK_NO_MOD ,       " \033 Op " ,        + 1 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_1 ,           XK_NO_MOD ,       " \033 Oq " ,        + 1 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_2 ,           XK_NO_MOD ,       " \033 Or " ,        + 1 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_3 ,           XK_NO_MOD ,       " \033 Os " ,        + 1 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_4 ,           XK_NO_MOD ,       " \033 Ot " ,        + 1 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_5 ,           XK_NO_MOD ,       " \033 Ou " ,        + 1 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_6 ,           XK_NO_MOD ,       " \033 Ov " ,        + 1 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_7 ,           XK_NO_MOD ,       " \033 Ow " ,        + 1 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_8 ,           XK_NO_MOD ,       " \033 Ox " ,        + 1 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_KP_9 ,           XK_NO_MOD ,       " \033 Oy " ,        + 1 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_BackSpace ,      XK_NO_MOD ,       " \177 " ,           0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_Up ,             XK_NO_MOD ,       " \033 [A " ,         0 ,    - 1 ,     0 } ,   
			
		
	
		
			
				
						{  XK_Up ,             XK_NO_MOD ,       " \033 OA " ,         0 ,    + 1 ,     0 } ,   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -98,28 +141,85 @@ static Key key[] = {  
			
		
	
		
			
				
						{  XK_Right ,          ShiftMask ,       " \033 [1;2C " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_Right ,          ControlMask ,     " \033 [1;5C " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_Right ,          Mod1Mask ,        " \033 [1;3C " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_Tab ,            ShiftMask ,       " \033 [Z " ,         0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_Return ,         XK_NO_MOD ,       " \n " ,             0 ,     0 ,    - 1 } ,   
			
		
	
		
			
				
						{  XK_Return ,         XK_NO_MOD ,       " \r \n " ,           0 ,     0 ,    + 1 } ,   
			
		
	
		
			
				
						{  XK_Return ,         Mod1Mask ,        " \033 \n " ,         0 ,     0 ,    - 1 } ,   
			
		
	
		
			
				
						{  XK_Return ,         Mod1Mask ,        " \033 \r \n " ,       0 ,     0 ,    + 1 } ,   
			
		
	
		
			
				
						{  XK_Insert ,         XK_NO_MOD ,       " \033 [2~ " ,        0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_Insert ,         ShiftMask ,       " \033 [2;2~ " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_Delete ,         XK_NO_MOD ,       " \033 [3~ " ,        0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_Home ,           XK_NO_MOD ,       " \033 [1~ " ,        0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_Delete ,         ShiftMask ,       " \033 [3;2~ " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_Home ,           XK_NO_MOD ,       " \033 [H " ,         0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_Home ,           ShiftMask ,       " \033 [1;2H " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_End ,            XK_NO_MOD ,       " \033 [4~ " ,        0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_End ,            ShiftMask ,       " \033 [1;2F " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_Prior ,          XK_NO_MOD ,       " \033 [5~ " ,        0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_Next ,           XK_NO_MOD ,       " \033 [6~ " ,        0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_Next ,           ShiftMask ,       " \033 [6;2~ " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F1 ,             XK_NO_MOD ,       " \033 OP "  ,        0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F1 ,  /* F13 */   ShiftMask ,       " \033 [1;2P " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F1 ,  /* F25 */   ControlMask ,     " \033 [1;5P " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F1 ,  /* F37 */   Mod2Mask ,        " \033 [1;6P " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F1 ,  /* F49 */   Mod1Mask ,        " \033 [1;3P " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F1 ,  /* F61 */   Mod3Mask ,        " \033 [1;4P " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F2 ,             XK_NO_MOD ,       " \033 OQ "  ,        0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F2 ,  /* F14 */   ShiftMask ,       " \033 [1;2Q " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F2 ,  /* F26 */   ControlMask ,     " \033 [1;5Q " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F2 ,  /* F38 */   Mod2Mask ,        " \033 [1;6Q " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F2 ,  /* F50 */   Mod1Mask ,        " \033 [1;3Q " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F2 ,  /* F62 */   Mod3Mask ,        " \033 [1;4Q " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F3 ,             XK_NO_MOD ,       " \033 OR "  ,        0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F3 ,  /* F15 */   ShiftMask ,       " \033 [1;2R " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F3 ,  /* F27 */   ControlMask ,     " \033 [1;5R " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F3 ,  /* F39 */   Mod2Mask ,        " \033 [1;6R " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F3 ,  /* F51 */   Mod1Mask ,        " \033 [1;3R " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F3 ,  /* F63 */   Mod3Mask ,        " \033 [1;4R " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F4 ,             XK_NO_MOD ,       " \033 OS "  ,        0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F4 ,  /* F16 */   ShiftMask ,       " \033 [1;2S " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F4 ,  /* F28 */   ShiftMask ,       " \033 [1;5S " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F4 ,  /* F40 */   Mod2Mask ,        " \033 [1;6S " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F4 ,  /* F52 */   Mod1Mask ,        " \033 [1;3S " ,      0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F5 ,             XK_NO_MOD ,       " \033 [15~ " ,       0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F5 ,  /* F17 */   ShiftMask ,       " \033 [15;2~ " ,     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F5 ,  /* F29 */   ControlMask ,     " \033 [15;5~ " ,     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F5 ,  /* F41 */   Mod2Mask ,        " \033 [15;6~ " ,     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F5 ,  /* F53 */   Mod1Mask ,        " \033 [15;3~ " ,     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F6 ,             XK_NO_MOD ,       " \033 [17~ " ,       0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F6 ,  /* F18 */   ShiftMask ,       " \033 [17;2~ " ,     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F6 ,  /* F30 */   ControlMask ,     " \033 [17;5~ " ,     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F6 ,  /* F42 */   Mod2Mask ,        " \033 [17;6~ " ,     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F6 ,  /* F54 */   Mod1Mask ,        " \033 [17;3~ " ,     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F7 ,             XK_NO_MOD ,       " \033 [18~ " ,       0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F7 ,  /* F19 */   ShiftMask ,       " \033 [18;2~ " ,     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F7 ,  /* F31 */   ControlMask ,     " \033 [18;5~ " ,     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F7 ,  /* F43 */   Mod2Mask ,        " \033 [18;6~ " ,     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F7 ,  /* F55 */   Mod1Mask ,        " \033 [18;3~ " ,     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F8 ,             XK_NO_MOD ,       " \033 [19~ " ,       0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F8 ,  /* F20 */   ShiftMask ,       " \033 [19;2~ " ,     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F8 ,  /* F32 */   ControlMask ,     " \033 [19;5~ " ,     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F8 ,  /* F44 */   Mod2Mask ,        " \033 [19;6~ " ,     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F8 ,  /* F56 */   Mod1Mask ,        " \033 [19;3~ " ,     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F9 ,             XK_NO_MOD ,       " \033 [20~ " ,       0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F9 ,  /* F21 */   ShiftMask ,       " \033 [20;2~ " ,     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F9 ,  /* F33 */   ControlMask ,     " \033 [20;5~ " ,     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F9 ,  /* F45 */   Mod2Mask ,        " \033 [20;6~ " ,     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F9 ,  /* F57 */   Mod1Mask ,        " \033 [20;3~ " ,     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F10 ,            XK_NO_MOD ,       " \033 [21~ " ,       0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F10 ,  /* F22 */  ShiftMask ,       " \033 [21;2~ " ,     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F10 ,  /* F34 */  ControlMask ,     " \033 [21;5~ " ,     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F10 ,  /* F46 */  Mod2Mask ,        " \033 [21;6~ " ,     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F10 ,  /* F58 */  Mod1Mask ,        " \033 [21;3~ " ,     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F11 ,            XK_NO_MOD ,       " \033 [23~ " ,       0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F11 ,  /* F23 */  ShiftMask ,       " \033 [23;2~ " ,     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F11 ,  /* F35 */  ControlMask ,     " \033 [23;5~ " ,     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F11 ,  /* F47 */  Mod2Mask ,        " \033 [23;6~ " ,     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F11 ,  /* F59 */  Mod1Mask ,        " \033 [23;3~ " ,     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F12 ,            XK_NO_MOD ,       " \033 [24~ " ,       0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F12 ,  /* F24 */  ShiftMask ,       " \033 [24;2~ " ,     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F12 ,  /* F36 */  ControlMask ,     " \033 [24;5~ " ,     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F12 ,  /* F48 */  Mod2Mask ,        " \033 [24;6~ " ,     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
						{  XK_F12 ,  /* F60 */  Mod1Mask ,        " \033 [24;3~ " ,     0 ,     0 ,     0 } ,   
			
		
	
		
			
				
					} ;  
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					/* Internal shortcuts. */