all repos — st @ cf890e5bf06a65a35fe195aa1ef8ae3e1eb55f51

st (suckless terminal) config

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
commit

cf890e5bf06a65a35fe195aa1ef8ae3e1eb55f51

parent

bdb850a16a6d7a2d12b2bd5500a3b7d70290a74a

2 files changed, 9 insertions(+), 5 deletions(-)

jump to
M config.def.hconfig.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.cst.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; }