tAllow mouse selection override using ShiftMask - st - [fork] customized build … | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit cf890e5bf06a65a35fe195aa1ef8ae3e1eb55f51 | |
parent bdb850a16a6d7a2d12b2bd5500a3b7d70290a74a | |
Author: Hiltjo Posthuma <[email protected]> | |
Date: Mon, 12 May 2014 14:39:37 +0200 | |
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 <[email protected]> | |
Diffstat: | |
M config.def.h | 6 +++++- | |
M st.c | 8 ++++---- | |
2 files changed, 9 insertions(+), 5 deletions(-) | |
--- | |
diff --git a/config.def.h b/config.def.h | |
t@@ -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}, | |
t@@ -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, | |
}; | |
diff --git a/st.c b/st.c | |
t@@ -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); | |
t@@ -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; | |
} | |
t@@ -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; | |
} | |
t@@ -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; | |
} |