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>
Hiltjo Posthuma hiltjo@codemadness.org
2 files changed,
9 insertions(+),
5 deletions(-)
M
config.def.h
→
config.def.h
@@ -154,6 +154,11 @@ * numlock (Mod2Mask) and keyboard layout (XK_SWITCH_MOD) are ignored.
*/ 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 @@ * Button1Mask is always unset, to make masks match between ButtonPress.
* ButtonRelease and MotionNotify. * If no match is found, regular selection is used. */ - static uint selmasks[] = { [SEL_RECTANGULAR] = Mod1Mask, };
M
st.c
→
st.c
@@ -765,7 +765,7 @@
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 @@ }
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; }