st-scrollback-mouse-0.8.2.diff (2181B)
1 From 315f69069017122ca69d0319d0ad9481113fe5c8 Mon Sep 17 00:00:00 2001 2 From: Jacob Prosser <jacoblouisprosser@protonmail.com> 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 argument */ 28 + { Button4, ShiftMask, kscrollup, {.i = 1} }, 29 + { Button5, ShiftMask, kscrolldown, {.i = 1} }, 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