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>master
parent
bdb850a16a
commit
cf890e5bf0
|
@ -154,6 +154,11 @@ static KeySym mappedkeys[] = { -1 };
|
||||||
*/
|
*/
|
||||||
static uint ignoremod = Mod2Mask|XK_SWITCH_MOD;
|
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[] = {
|
static Key key[] = {
|
||||||
/* keysym mask string appkey appcursor crlf */
|
/* keysym mask string appkey appcursor crlf */
|
||||||
{ XK_KP_Home, ShiftMask, "\033[2J", 0, -1, 0},
|
{ XK_KP_Home, ShiftMask, "\033[2J", 0, -1, 0},
|
||||||
|
@ -357,7 +362,6 @@ static Key key[] = {
|
||||||
* ButtonRelease and MotionNotify.
|
* ButtonRelease and MotionNotify.
|
||||||
* If no match is found, regular selection is used.
|
* If no match is found, regular selection is used.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static uint selmasks[] = {
|
static uint selmasks[] = {
|
||||||
[SEL_RECTANGULAR] = Mod1Mask,
|
[SEL_RECTANGULAR] = Mod1Mask,
|
||||||
};
|
};
|
||||||
|
|
8
st.c
8
st.c
|
@ -765,7 +765,7 @@ selsnap(int mode, int *x, int *y, int direction) {
|
||||||
void
|
void
|
||||||
getbuttoninfo(XEvent *e) {
|
getbuttoninfo(XEvent *e) {
|
||||||
int type;
|
int type;
|
||||||
uint state = e->xbutton.state &~Button1Mask;
|
uint state = e->xbutton.state & ~(Button1Mask | forceselmod);
|
||||||
|
|
||||||
sel.alt = IS_SET(MODE_ALTSCREEN);
|
sel.alt = IS_SET(MODE_ALTSCREEN);
|
||||||
|
|
||||||
|
@ -858,7 +858,7 @@ bpress(XEvent *e) {
|
||||||
struct timeval now;
|
struct timeval now;
|
||||||
Mousekey *mk;
|
Mousekey *mk;
|
||||||
|
|
||||||
if(IS_SET(MODE_MOUSE)) {
|
if(IS_SET(MODE_MOUSE) && !(e->xbutton.state & forceselmod)) {
|
||||||
mousereport(e);
|
mousereport(e);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1090,7 +1090,7 @@ xsetsel(char *str) {
|
||||||
|
|
||||||
void
|
void
|
||||||
brelease(XEvent *e) {
|
brelease(XEvent *e) {
|
||||||
if(IS_SET(MODE_MOUSE)) {
|
if(IS_SET(MODE_MOUSE) && !(e->xbutton.state & forceselmod)) {
|
||||||
mousereport(e);
|
mousereport(e);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1113,7 +1113,7 @@ void
|
||||||
bmotion(XEvent *e) {
|
bmotion(XEvent *e) {
|
||||||
int oldey, oldex, oldsby, oldsey;
|
int oldey, oldex, oldsby, oldsey;
|
||||||
|
|
||||||
if(IS_SET(MODE_MOUSE)) {
|
if(IS_SET(MODE_MOUSE) && !(e->xbutton.state & forceselmod)) {
|
||||||
mousereport(e);
|
mousereport(e);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Reference in New Issue