| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -117,7 +117,8 @@ enum term_mode { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						MODE_KBDLOCK     = 256, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						MODE_HIDE	 = 512, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						MODE_ECHO	 = 1024, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						MODE_APPCURSOR	 = 2048 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						MODE_APPCURSOR	 = 2048, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						MODE_MOUSESGR    = 4096, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					}; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					enum escape_state { | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -666,11 +667,10 @@ getbuttoninfo(XEvent *e) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					mousereport(XEvent *e) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int x = x2col(e->xbutton.x); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int y = y2row(e->xbutton.y); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int button = e->xbutton.button; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int state = e->xbutton.state; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						char buf[] = { '\033', '[', 'M', 0, 32+x+1, 32+y+1 }; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int x = x2col(e->xbutton.x), y = y2row(e->xbutton.y), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						    button = e->xbutton.button, state = e->xbutton.state, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						    len; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						char buf[40]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						static int ob, ox, oy; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						/* from urxvt */ | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -679,7 +679,9 @@ mousereport(XEvent *e) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								return; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							button = ob + 32; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							ox = x, oy = y; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} else if(e->xbutton.type == ButtonRelease || button == AnyButton) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} else if(!IS_SET(MODE_MOUSESGR) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								&& (e->xbutton.type == ButtonRelease | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									|| button == AnyButton)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							button = 3; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							button -= Button1; | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -691,11 +693,23 @@ mousereport(XEvent *e) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						buf[3] = 32 + button + (state & ShiftMask ? 4 : 0) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						button += (state & ShiftMask   ? 4  : 0) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							+ (state & Mod4Mask    ? 8  : 0) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							+ (state & ControlMask ? 16 : 0); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						ttywrite(buf, sizeof(buf)); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						len = 0; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(IS_SET(MODE_MOUSESGR)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							len = snprintf(buf, sizeof(buf), "\033[<%d;%d;%d%c", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									button, x+1, y+1, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									e->xbutton.type == ButtonRelease ? 'm' : 'M'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} else if(x < 223 && y < 223) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							len = snprintf(buf, sizeof(buf), "\033[M%c%c%c", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									32+button, 32+x+1, 32+y+1); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							return; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						ttywrite(buf, len); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -1547,6 +1561,9 @@ tsetmode(bool priv, bool set, int *args, int narg) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								case 1002: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									MODBIT(term.mode, set, MODE_MOUSEMOTION); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								case 1006: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									MODBIT(term.mode, set, MODE_MOUSESGR); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								case 1049: /* = 1047 and 1048 */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								case 47: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								case 1047: { | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |