| mouse shortcuts: allow same functions as kb shortcuts - st - simple terminal | |
| git clone git://git.suckless.org/st | |
| Log | |
| Files | |
| Refs | |
| README | |
| LICENSE | |
| --- | |
| commit ba7f4d69af62d20e13fea78a408095e017410651 | |
| parent 2b8333f553c14c15398e810353e192eb05938580 | |
| Author: Avi Halachmi (:avih) <[email protected]> | |
| Date: Thu, 10 Oct 2019 23:02:26 +0300 | |
| mouse shortcuts: allow same functions as kb shortcuts | |
| Previously mouse shortcuts supported only ttywrite. | |
| This required adding an "Arg" function ttysend - which does what the | |
| original mouse shortcuts did. | |
| Diffstat: | |
| M config.def.h | 6 +++--- | |
| M st.h | 1 + | |
| M x.c | 20 ++++++++++++++------ | |
| 3 files changed, 18 insertions(+), 9 deletions(-) | |
| --- | |
| diff --git a/config.def.h b/config.def.h | |
| @@ -155,9 +155,9 @@ static unsigned int defaultattr = 11; | |
| * Beware that overloading Button1 will disable the selection. | |
| */ | |
| static MouseShortcut mshortcuts[] = { | |
| - /* button mask string */ | |
| - { Button4, XK_ANY_MOD, "\031" }, | |
| - { Button5, XK_ANY_MOD, "\005" }, | |
| + /* mask button function argument */ | |
| + { XK_ANY_MOD, Button4, ttysend, {.s = "\031"} }, | |
| + { XK_ANY_MOD, Button5, ttysend, {.s = "\005"} }, | |
| }; | |
| /* Internal keyboard shortcuts. */ | |
| diff --git a/st.h b/st.h | |
| @@ -74,6 +74,7 @@ typedef union { | |
| uint ui; | |
| float f; | |
| const void *v; | |
| + const char *s; | |
| } Arg; | |
| void die(const char *, ...); | |
| diff --git a/x.c b/x.c | |
| @@ -29,9 +29,10 @@ typedef struct { | |
| } Shortcut; | |
| typedef struct { | |
| - uint b; | |
| - uint mask; | |
| - char *s; | |
| + uint mod; | |
| + uint button; | |
| + void (*func)(const Arg *); | |
| + const Arg arg; | |
| } MouseShortcut; | |
| typedef struct { | |
| @@ -56,6 +57,7 @@ static void selpaste(const Arg *); | |
| static void zoom(const Arg *); | |
| static void zoomabs(const Arg *); | |
| static void zoomreset(const Arg *); | |
| +static void ttysend(const Arg *); | |
| /* config.h for applying patches and the configuration. */ | |
| #include "config.h" | |
| @@ -312,6 +314,12 @@ zoomreset(const Arg *arg) | |
| } | |
| } | |
| +void | |
| +ttysend(const Arg *arg) | |
| +{ | |
| + ttywrite(arg->s, strlen(arg->s), 1); | |
| +} | |
| + | |
| int | |
| evcol(XEvent *e) | |
| { | |
| @@ -421,9 +429,9 @@ bpress(XEvent *e) | |
| } | |
| for (ms = mshortcuts; ms < mshortcuts + LEN(mshortcuts); ms++) { | |
| - if (e->xbutton.button == ms->b | |
| - && match(ms->mask, e->xbutton.state)) { | |
| - ttywrite(ms->s, strlen(ms->s), 1); | |
| + if (e->xbutton.button == ms->button | |
| + && match(ms->mod, e->xbutton.state)) { | |
| + ms->func(&(ms->arg)); | |
| return; | |
| } | |
| } |