Allow mouse selection override using ShiftMask
Similar to xterm or urxvt holding shift before selecting text with the mouse allows to override copying text. For example in tmux with "mode-mouse on" or vim (compiled with --with-x), mc, htop, etc. forceselmod in config.h sets the modifier to use this mode, by default ShiftMask. Signed-off-by: Hiltjo Posthuma <hiltjo@codemadness.org>
This commit is contained in:
		
				
					committed by
					
						 Roberto E. Vargas Caballero
						Roberto E. Vargas Caballero
					
				
			
			
				
	
			
			
			
						parent
						
							bdb850a16a
						
					
				
				
					commit
					cf890e5bf0
				
			| @@ -154,6 +154,11 @@ static KeySym mappedkeys[] = { -1 }; | ||||
|  */ | ||||
| static uint ignoremod = Mod2Mask|XK_SWITCH_MOD; | ||||
|  | ||||
| /* Override mouse-select while mask is active (when MODE_MOUSE is set). | ||||
|  * Note that if you want to use ShiftMask with selmasks, set this to an other | ||||
|  * modifier, set to 0 to not use it. */ | ||||
| static uint forceselmod = ShiftMask; | ||||
|  | ||||
| static Key key[] = { | ||||
| 	/* keysym           mask            string      appkey appcursor crlf */ | ||||
| 	{ XK_KP_Home,       ShiftMask,      "\033[2J",       0,   -1,    0}, | ||||
| @@ -357,7 +362,6 @@ static Key key[] = { | ||||
|  * ButtonRelease and MotionNotify. | ||||
|  * If no match is found, regular selection is used. | ||||
|  */ | ||||
|  | ||||
| static uint selmasks[] = { | ||||
| 	[SEL_RECTANGULAR] = Mod1Mask, | ||||
| }; | ||||
|   | ||||
							
								
								
									
										8
									
								
								st.c
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								st.c
									
									
									
									
									
								
							| @@ -765,7 +765,7 @@ selsnap(int mode, int *x, int *y, int direction) { | ||||
| void | ||||
| getbuttoninfo(XEvent *e) { | ||||
| 	int type; | ||||
| 	uint state = e->xbutton.state &~Button1Mask; | ||||
| 	uint state = e->xbutton.state & ~(Button1Mask | forceselmod); | ||||
|  | ||||
| 	sel.alt = IS_SET(MODE_ALTSCREEN); | ||||
|  | ||||
| @@ -858,7 +858,7 @@ bpress(XEvent *e) { | ||||
| 	struct timeval now; | ||||
| 	Mousekey *mk; | ||||
|  | ||||
| 	if(IS_SET(MODE_MOUSE)) { | ||||
| 	if(IS_SET(MODE_MOUSE) && !(e->xbutton.state & forceselmod)) { | ||||
| 		mousereport(e); | ||||
| 		return; | ||||
| 	} | ||||
| @@ -1090,7 +1090,7 @@ xsetsel(char *str) { | ||||
|  | ||||
| void | ||||
| brelease(XEvent *e) { | ||||
| 	if(IS_SET(MODE_MOUSE)) { | ||||
| 	if(IS_SET(MODE_MOUSE) && !(e->xbutton.state & forceselmod)) { | ||||
| 		mousereport(e); | ||||
| 		return; | ||||
| 	} | ||||
| @@ -1113,7 +1113,7 @@ void | ||||
| bmotion(XEvent *e) { | ||||
| 	int oldey, oldex, oldsby, oldsey; | ||||
|  | ||||
| 	if(IS_SET(MODE_MOUSE)) { | ||||
| 	if(IS_SET(MODE_MOUSE) && !(e->xbutton.state & forceselmod)) { | ||||
| 		mousereport(e); | ||||
| 		return; | ||||
| 	} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user