| st-scrollback-mouse-0.8.2.diff - sites - public wiki contents of suckless.org | |
| git clone git://git.suckless.org/sites | |
| Log | |
| Files | |
| Refs | |
| --- | |
| st-scrollback-mouse-0.8.2.diff (2181B) | |
| --- | |
| 1 From 315f69069017122ca69d0319d0ad9481113fe5c8 Mon Sep 17 00:00:00 2001 | |
| 2 From: Jacob Prosser <[email protected]> | |
| 3 Date: Fri, 26 Apr 2019 17:23:27 +1000 | |
| 4 Subject: [PATCH] Scrollback-Mouse for 0.8.2 | |
| 5 | |
| 6 --- | |
| 7 config.def.h | 10 ++++++++-- | |
| 8 st.h | 8 ++++++++ | |
| 9 x.c | 9 +++++++++ | |
| 10 3 files changed, 25 insertions(+), 2 deletions(-) | |
| 11 | |
| 12 diff --git a/config.def.h b/config.def.h | |
| 13 index 7326a74..ad20c4c 100644 | |
| 14 --- a/config.def.h | |
| 15 +++ b/config.def.h | |
| 16 @@ -156,8 +156,14 @@ static unsigned int defaultattr = 11; | |
| 17 */ | |
| 18 static MouseShortcut mshortcuts[] = { | |
| 19 /* button mask string */ | |
| 20 - { Button4, XK_ANY_MOD, "\031" }, | |
| 21 - { Button5, XK_ANY_MOD, "\005" }, | |
| 22 + { Button4, XK_NO_MOD, "\031" }, | |
| 23 + { Button5, XK_NO_MOD, "\005" }, | |
| 24 +}; | |
| 25 + | |
| 26 +MouseKey mkeys[] = { | |
| 27 + /* button mask function argumen… | |
| 28 + { Button4, ShiftMask, kscrollup, {.i = … | |
| 29 + { Button5, ShiftMask, kscrolldown, {.i = … | |
| 30 }; | |
| 31 | |
| 32 /* Internal keyboard shortcuts. */ | |
| 33 diff --git a/st.h b/st.h | |
| 34 index 17a79e0..3ac7f57 100644 | |
| 35 --- a/st.h | |
| 36 +++ b/st.h | |
| 37 @@ -76,6 +76,13 @@ typedef union { | |
| 38 const void *v; | |
| 39 } Arg; | |
| 40 | |
| 41 +typedef struct { | |
| 42 + uint b; | |
| 43 + uint mask; | |
| 44 + void (*func)(const Arg *); | |
| 45 + const Arg arg; | |
| 46 +} MouseKey; | |
| 47 + | |
| 48 void die(const char *, ...); | |
| 49 void redraw(void); | |
| 50 void draw(void); | |
| 51 @@ -122,3 +129,4 @@ extern char *termname; | |
| 52 extern unsigned int tabspaces; | |
| 53 extern unsigned int defaultfg; | |
| 54 extern unsigned int defaultbg; | |
| 55 +extern MouseKey mkeys[]; | |
| 56 diff --git a/x.c b/x.c | |
| 57 index 0422421..e9fd6e9 100644 | |
| 58 --- a/x.c | |
| 59 +++ b/x.c | |
| 60 @@ -409,6 +409,7 @@ bpress(XEvent *e) | |
| 61 { | |
| 62 struct timespec now; | |
| 63 MouseShortcut *ms; | |
| 64 + MouseKey *mk; | |
| 65 int snap; | |
| 66 | |
| 67 if (IS_SET(MODE_MOUSE) && !(e->xbutton.state & forceselmod)) { | |
| 68 @@ -424,6 +425,14 @@ bpress(XEvent *e) | |
| 69 } | |
| 70 } | |
| 71 | |
| 72 + for (mk = mkeys; mk < mkeys + LEN(mkeys); mk++) { | |
| 73 + if (e->xbutton.button == mk->b | |
| 74 + && match(mk->mask, e->xbutton.state)) { | |
| 75 + mk->func(&mk->arg); | |
| 76 + return; | |
| 77 + } | |
| 78 + } | |
| 79 + | |
| 80 if (e->xbutton.button == Button1) { | |
| 81 /* | |
| 82 * If the user clicks below predefined timeouts specific | |
| 83 -- | |
| 84 2.21.0 | |
| 85 |