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:
		
							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;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue