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; | 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[] = { | static Key key[] = { | ||||||
| 	/* keysym           mask            string      appkey appcursor crlf */ | 	/* keysym           mask            string      appkey appcursor crlf */ | ||||||
| 	{ XK_KP_Home,       ShiftMask,      "\033[2J",       0,   -1,    0}, | 	{ XK_KP_Home,       ShiftMask,      "\033[2J",       0,   -1,    0}, | ||||||
| @@ -357,7 +362,6 @@ static Key key[] = { | |||||||
|  * ButtonRelease and MotionNotify. |  * ButtonRelease and MotionNotify. | ||||||
|  * If no match is found, regular selection is used. |  * If no match is found, regular selection is used. | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| static uint selmasks[] = { | static uint selmasks[] = { | ||||||
| 	[SEL_RECTANGULAR] = Mod1Mask, | 	[SEL_RECTANGULAR] = Mod1Mask, | ||||||
| }; | }; | ||||||
|   | |||||||
							
								
								
									
										8
									
								
								st.c
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								st.c
									
									
									
									
									
								
							| @@ -765,7 +765,7 @@ selsnap(int mode, int *x, int *y, int direction) { | |||||||
| void | void | ||||||
| getbuttoninfo(XEvent *e) { | getbuttoninfo(XEvent *e) { | ||||||
| 	int type; | 	int type; | ||||||
| 	uint state = e->xbutton.state &~Button1Mask; | 	uint state = e->xbutton.state & ~(Button1Mask | forceselmod); | ||||||
|  |  | ||||||
| 	sel.alt = IS_SET(MODE_ALTSCREEN); | 	sel.alt = IS_SET(MODE_ALTSCREEN); | ||||||
|  |  | ||||||
| @@ -858,7 +858,7 @@ bpress(XEvent *e) { | |||||||
| 	struct timeval now; | 	struct timeval now; | ||||||
| 	Mousekey *mk; | 	Mousekey *mk; | ||||||
|  |  | ||||||
| 	if(IS_SET(MODE_MOUSE)) { | 	if(IS_SET(MODE_MOUSE) && !(e->xbutton.state & forceselmod)) { | ||||||
| 		mousereport(e); | 		mousereport(e); | ||||||
| 		return; | 		return; | ||||||
| 	} | 	} | ||||||
| @@ -1090,7 +1090,7 @@ xsetsel(char *str) { | |||||||
|  |  | ||||||
| void | void | ||||||
| brelease(XEvent *e) { | brelease(XEvent *e) { | ||||||
| 	if(IS_SET(MODE_MOUSE)) { | 	if(IS_SET(MODE_MOUSE) && !(e->xbutton.state & forceselmod)) { | ||||||
| 		mousereport(e); | 		mousereport(e); | ||||||
| 		return; | 		return; | ||||||
| 	} | 	} | ||||||
| @@ -1113,7 +1113,7 @@ void | |||||||
| bmotion(XEvent *e) { | bmotion(XEvent *e) { | ||||||
| 	int oldey, oldex, oldsby, oldsey; | 	int oldey, oldex, oldsby, oldsey; | ||||||
|  |  | ||||||
| 	if(IS_SET(MODE_MOUSE)) { | 	if(IS_SET(MODE_MOUSE) && !(e->xbutton.state & forceselmod)) { | ||||||
| 		mousereport(e); | 		mousereport(e); | ||||||
| 		return; | 		return; | ||||||
| 	} | 	} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user