On Mon, May 12, 2014 at 1:07 PM, Raphaël Proust <[email protected]> wrote: > [...] > It makes sense. Although applications might be binding Shift+Mouse for > their own purpose (not expecting X to interfere with their input). I > don't care too much which is chosen because I tend to not use the > mouse in the terminal, but I think it's worth considering and > discussing a bit. > Definitely, is it enough to make ShiftMask configurable?
> We can rephrase the question: What are sane terminal managers? (And > thus, which one should st make effort to work with?) > st should work (and generally does already work) well with tmux in my opinion. >> As described in the post you linked >> (http://lists.suckless.org/dev/1402/20050.html) maybe ShiftMask can be >> added as a configurable shortcut to allow shortcuts using ShiftMask >> and also allow things like rectangular (SEL_RECTANGULAR) to work? > > I think that an entry in config.c is a good idea. Then people can > customise based on their terminal manager(s) of choice. > The attached updated patch makes ShiftMask configurable and allows to use selmasks too (SEL_RECTANGULAR). Kind regards, Hiltjo
From ea61df8ef63067a1e1863442b994a123435edbf9 Mon Sep 17 00:00:00 2001 From: Hiltjo Posthuma <[email protected]> Date: Mon, 12 May 2014 11:58:06 +0000 Subject: [PATCH] Allow forced mouse selection 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 <[email protected]> --- st.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/st.c b/st.c index 5946c7c..78d8a01 100644 --- a/st.c +++ b/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; } -- 1.9.2
