Browse Source

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
Hiltjo Posthuma 11 years ago
committed by Roberto E. Vargas Caballero
parent
commit
cf890e5bf0
2 changed files with 9 additions and 5 deletions
  1. +5
    -1
      config.def.h
  2. +4
    -4
      st.c

+ 5
- 1
config.def.h View File

@ -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,
}; };


+ 4
- 4
st.c View File

@ -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;
} }


Loading…
Cancel
Save