Introduction
Introduction Statistics Contact Development Disclaimer Help
mouse shortcuts: don't hardcode selpaste - st - simple terminal
git clone git://git.suckless.org/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
@@ -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
@@ -33,6 +33,7 @@ typedef struct {
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 @@ 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)) {
@@ -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) {
/*
@@ -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);
}
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.