tmouse shortcuts: don't hardcode selpaste - st - [fork] customized build of st,… | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit d2b75db8d7519a20af8bf09e9c205507f9ff828c | |
parent b6d280de6df30167ce9cf30fadefc362e77729e7 | |
Author: Avi Halachmi (:avih) <[email protected]> | |
Date: Fri, 11 Oct 2019 02:26:10 +0300 | |
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. | |
Diffstat: | |
M config.def.h | 3 ++- | |
M x.c | 35 +++++++++++++++++++++--------… | |
2 files changed, 26 insertions(+), 12 deletions(-) | |
--- | |
diff --git a/config.def.h b/config.def.h | |
t@@ -162,7 +162,8 @@ static uint forcemousemod = ShiftMask; | |
* Beware that overloading Button1 will disable the selection. | |
*/ | |
static MouseShortcut mshortcuts[] = { | |
- /* mask button function argument */ | |
+ /* mask button function argument releas… | |
+ { XK_ANY_MOD, Button2, selpaste, {.i = 0}, 1 }, | |
{ XK_ANY_MOD, Button4, ttysend, {.s = "\031"} }, | |
{ XK_ANY_MOD, Button5, ttysend, {.s = "\005"} }, | |
}; | |
diff --git a/x.c b/x.c | |
t@@ -33,6 +33,7 @@ typedef struct { | |
uint button; | |
void (*func)(const Arg *); | |
const Arg arg; | |
+ uint release; | |
} MouseShortcut; | |
typedef struct { | |
t@@ -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 *); | |
t@@ -416,11 +418,27 @@ mousereport(XEvent *e) | |
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)) { | |
t@@ -428,13 +446,8 @@ bpress(XEvent *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) { | |
/* | |
t@@ -655,9 +668,9 @@ brelease(XEvent *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); | |
} | |