st-scrollback-mouse-0.8.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
st-scrollback-mouse-0.8.diff (1813B)
---
1 diff --git a/config.def.h b/config.def.h
2 index 27d42ca..feec7e2 100644
3 --- a/config.def.h
4 +++ b/config.def.h
5 @@ -156,8 +156,14 @@ static unsigned int defaultattr = 11;
6 */
7 static MouseShortcut mshortcuts[] = {
8 /* button mask string */
9 - { Button4, XK_ANY_MOD, "\031" },
10 - { Button5, XK_ANY_MOD, "\005" },
11 + { Button4, XK_NO_MOD, "\031" },
12 + { Button5, XK_NO_MOD, "\005" },
13 +};
14 +
15 +MouseKey mkeys[] = {
16 + /* button mask function argument */
17 + { Button4, ShiftMask, kscrollup, {.i = 1} },
18 + { Button5, ShiftMask, kscrolldown, {.i = 1} },
19 };
20
21 /* Internal keyboard shortcuts. */
22 diff --git a/st.h b/st.h
23 index 628e876..cdd25ae 100644
24 --- a/st.h
25 +++ b/st.h
26 @@ -81,6 +81,13 @@ typedef union {
27 const void *v;
28 } Arg;
29
30 +typedef struct {
31 + uint b;
32 + uint mask;
33 + void (*func)(const Arg *);
34 + const Arg arg;
35 +} MouseKey;
36 +
37 void die(const char *, ...);
38 void redraw(void);
39 void draw(void);
40 @@ -129,3 +136,4 @@ extern char *termname;
41 extern unsigned int tabspaces;
42 extern unsigned int defaultfg;
43 extern unsigned int defaultbg;
44 +extern MouseKey mkeys[];
45 diff --git a/x.c b/x.c
46 index d43a529..754d859 100644
47 --- a/x.c
48 +++ b/x.c
49 @@ -409,6 +409,7 @@ bpress(XEvent *e)
50 {
51 struct timespec now;
52 MouseShortcut *ms;
53 + MouseKey *mk;
54 int snap;
55
56 if (IS_SET(MODE_MOUSE) && !(e->xbutton.state & forceselmod)) {
57 @@ -424,6 +425,14 @@ bpress(XEvent *e)
58 }
59 }
60
61 + for (mk = mkeys; mk < mkeys + LEN(mkeys); mk++) {
62 + if (e->xbutton.button == mk->b
63 + && match(mk->mask, e->xbutton.state)) {
64 + mk->func(&mk->arg);
65 + return;
66 + }
67 + }
68 +
69 if (e->xbutton.button == Button1) {
70 /*
71 * If the user clicks below predefined timeouts specific