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>
This commit is contained in:
parent
bdb850a16a
commit
cf890e5bf0
2 changed files with 9 additions and 5 deletions
|
@ -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},
|
||||
|
@ -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,
|
||||
};
|
||||
|
|
8
st.c
8
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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue