all repos — st @ d2b75db8d7519a20af8bf09e9c205507f9ff828c

st (suckless terminal) config

mouse shortcuts: don't hardcode selpaste

Because selpaste is activated on release, a release flag was added to
mouse shortcuts which controls whether activation is on press/release,
and selpaste binding to button2 was moved to config.h .

button1 remains the only hardcoded mouse button - for selection + copy.
Avi Halachmi (:avih) avihpit@yahoo.com
commit

d2b75db8d7519a20af8bf09e9c205507f9ff828c

parent

b6d280de6df30167ce9cf30fadefc362e77729e7

2 files changed, 26 insertions(+), 12 deletions(-)

jump to
M config.def.hconfig.def.h

@@ -162,7 +162,8 @@ * Internal mouse shortcuts.

* Beware that overloading Button1 will disable the selection. */ static MouseShortcut mshortcuts[] = { - /* mask button function argument */ + /* mask button function argument release */ + { XK_ANY_MOD, Button2, selpaste, {.i = 0}, 1 }, { XK_ANY_MOD, Button4, ttysend, {.s = "\031"} }, { XK_ANY_MOD, Button5, ttysend, {.s = "\005"} }, };
M x.cx.c

@@ -33,6 +33,7 @@ uint mod;

uint button; void (*func)(const Arg *); const Arg arg; + uint release; } MouseShortcut; typedef struct {

@@ -165,6 +166,7 @@ static void kpress(XEvent *);

static void cmessage(XEvent *); static void resize(XEvent *); static void focus(XEvent *); +static int mouseaction(XEvent *, uint); static void brelease(XEvent *); static void bpress(XEvent *); static void bmotion(XEvent *);

@@ -416,11 +418,27 @@

ttywrite(buf, len, 0); } +int +mouseaction(XEvent *e, uint release) +{ + MouseShortcut *ms; + + for (ms = mshortcuts; ms < mshortcuts + LEN(mshortcuts); ms++) { + if (ms->release == release && + ms->button == e->xbutton.button && + match(ms->mod, e->xbutton.state & ~forcemousemod)) { + ms->func(&(ms->arg)); + return 1; + } + } + + return 0; +} + void bpress(XEvent *e) { struct timespec now; - MouseShortcut *ms; int snap; if (IS_SET(MODE_MOUSE) && !(e->xbutton.state & forcemousemod)) {

@@ -428,13 +446,8 @@ mousereport(e);

return; } - for (ms = mshortcuts; ms < mshortcuts + LEN(mshortcuts); ms++) { - if (e->xbutton.button == ms->button && - match(ms->mod, e->xbutton.state & ~forcemousemod)) { - ms->func(&(ms->arg)); - return; - } - } + if (mouseaction(e, 0)) + return; if (e->xbutton.button == Button1) { /*

@@ -655,9 +668,9 @@ mousereport(e);

return; } - if (e->xbutton.button == Button2) - selpaste(NULL); - else if (e->xbutton.button == Button1) + if (mouseaction(e, 1)) + return; + if (e->xbutton.button == Button1) mousesel(e, 1); }