| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -114,6 +114,7 @@ enum term_mode { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						MODE_ECHO	 = 1024, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						MODE_APPCURSOR	 = 2048, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						MODE_MOUSESGR    = 4096, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						MODE_8BIT	 = 8192, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					}; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					enum escape_state { | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -1650,6 +1651,9 @@ tsetmode(bool priv, bool set, int *args, int narg) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								case 1006: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									MODBIT(term.mode, set, MODE_MOUSESGR); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								case 1034: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									MODBIT(term.mode, set, MODE_8BIT); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								case 1049: /* = 1047 and 1048 */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								case 47: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								case 1047: | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -3228,7 +3232,8 @@ kpress(XEvent *ev) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XKeyEvent *e = &ev->xkey; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						KeySym ksym; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						char xstr[31], buf[32], *customkey, *cp = buf; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int len; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int len, ret; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						long c; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						Status status; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						Shortcut *bp; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -3249,13 +3254,23 @@ kpress(XEvent *ev) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if((customkey = kmap(ksym, e->state))) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							len = strlen(customkey); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							memcpy(buf, customkey, len); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						/* 2. hardcoded (overrides X lookup) */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						/* 3. hardcoded (overrides X lookup) */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							if(len == 0) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								return; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							if(len == 1 && e->state & Mod1Mask) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								*cp++ = '\033'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							if(len == 1 && e->state & Mod1Mask) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								if(IS_SET(MODE_8BIT)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									if(*xstr < 0177) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										c = *xstr | B7; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										ret = utf8encode(&c, cp); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										cp += ret; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
										len = 0; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								} else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									*cp++ = '\033'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							memcpy(cp, xstr, len); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							len = cp - buf + len; | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |