[hackers] [st] Allow mouse selection override using ShiftMask || Hiltjo Posthuma

From: <git_AT_suckless.org>
Date: Fri, 16 May 2014 07:34:03 +0200

commit cf890e5bf06a65a35fe195aa1ef8ae3e1eb55f51
Author: Hiltjo Posthuma <hiltjo_AT_codemadness.org>
Date: Mon May 12 14:39:37 2014 +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 <hiltjo_AT_codemadness.org>

diff --git a/config.def.h b/config.def.h
index 646a88a..6e2be9a 100644
--- a/config.def.h
+++ b/config.def.h
_AT_@ -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, "", 0, -1, 0},
_AT_@ -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
index 5946c7c..78d8a01 100644
--- a/st.c
+++ b/st.c
_AT_@ -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);
 
_AT_@ -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;
         }
_AT_@ -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;
         }
_AT_@ -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;
         }
Received on Fri May 16 2014 - 07:34:03 CEST

This archive was generated by hypermail 2.3.0 : Fri May 16 2014 - 07:36:08 CEST