diff options
| author | Hiltjo Posthuma <hiltjo@codemadness.org> | 2014-05-12 14:39:37 +0200 | 
|---|---|---|
| committer | Roberto E. Vargas Caballero <k0ga@shike2.com> | 2014-05-14 07:48:25 +0200 | 
| commit | cf890e5bf06a65a35fe195aa1ef8ae3e1eb55f51 (patch) | |
| tree | b6f946cb82d363cd6db0beb7ecf77e17f2928a20 | |
| parent | bdb850a16a6d7a2d12b2bd5500a3b7d70290a74a (diff) | |
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>
| -rw-r--r-- | config.def.h | 6 | ||||
| -rw-r--r-- | st.c | 8 | 
2 files changed, 9 insertions, 5 deletions
| diff --git a/config.def.h b/config.def.h index 646a88a..6e2be9a 100644 --- a/config.def.h +++ b/config.def.h @@ -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,  }; @@ -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;  	} | 
