*/
 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},
  * ButtonRelease and MotionNotify.
  * If no match is found, regular selection is used.
  */
-
 static uint selmasks[] = {
        [SEL_RECTANGULAR] = Mod1Mask,
 };
 
 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);
 
        struct timeval now;
        Mousekey *mk;
 
-       if(IS_SET(MODE_MOUSE)) {
+       if(IS_SET(MODE_MOUSE) && !(e->xbutton.state & forceselmod)) {
                mousereport(e);
                return;
        }
 
 void
 brelease(XEvent *e) {
-       if(IS_SET(MODE_MOUSE)) {
+       if(IS_SET(MODE_MOUSE) && !(e->xbutton.state & forceselmod)) {
                mousereport(e);
                return;
        }
 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;
        }