st-scrollback-mouse-20170427-5a10aca.diff - sites - public wiki contents of suc… | |
git clone git://git.suckless.org/sites | |
Log | |
Files | |
Refs | |
--- | |
st-scrollback-mouse-20170427-5a10aca.diff (2287B) | |
--- | |
1 diff --git a/config.def.h b/config.def.h | |
2 index 3e9cda5..a9c65a9 100644 | |
3 --- a/config.def.h | |
4 +++ b/config.def.h | |
5 @@ -156,8 +156,14 @@ unsigned int defaultattr = 11; | |
6 */ | |
7 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 argumen… | |
17 + { Button4, ShiftMask, kscrollup, {.i = … | |
18 + { Button5, ShiftMask, kscrolldown, {.i = … | |
19 }; | |
20 | |
21 /* Internal keyboard shortcuts. */ | |
22 diff --git a/st.c b/st.c | |
23 index b74b9dc..d33eb5b 100644 | |
24 --- a/st.c | |
25 +++ b/st.c | |
26 @@ -237,6 +237,7 @@ static Rune utfmax[UTF_SIZ + 1] = {0x10FFFF, 0x7F, 0… | |
27 /* config.h array lengths */ | |
28 size_t colornamelen = LEN(colorname); | |
29 size_t mshortcutslen = LEN(mshortcuts); | |
30 +size_t mkeyslen = LEN(mkeys); | |
31 size_t shortcutslen = LEN(shortcuts); | |
32 size_t selmaskslen = LEN(selmasks); | |
33 | |
34 diff --git a/st.h b/st.h | |
35 index 2d9b028..ca90c31 100644 | |
36 --- a/st.h | |
37 +++ b/st.h | |
38 @@ -182,6 +182,13 @@ typedef union { | |
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 +typedef struct { | |
49 uint mod; | |
50 KeySym keysym; | |
51 void (*func)(const Arg *); | |
52 @@ -271,6 +278,8 @@ extern unsigned int mousebg; | |
53 extern unsigned int defaultattr; | |
54 extern MouseShortcut mshortcuts[]; | |
55 extern size_t mshortcutslen; | |
56 +extern MouseKey mkeys[]; | |
57 +extern size_t mkeyslen; | |
58 extern Shortcut shortcuts[]; | |
59 extern size_t shortcutslen; | |
60 extern uint forceselmod; | |
61 diff --git a/x.c b/x.c | |
62 index 495cd90..67dcfdc 100644 | |
63 --- a/x.c | |
64 +++ b/x.c | |
65 @@ -248,6 +248,7 @@ bpress(XEvent *e) | |
66 { | |
67 struct timespec now; | |
68 MouseShortcut *ms; | |
69 + MouseKey *mk; | |
70 | |
71 if (IS_SET(MODE_MOUSE) && !(e->xbutton.state & forceselmod)) { | |
72 mousereport(e); | |
73 @@ -262,6 +263,14 @@ bpress(XEvent *e) | |
74 } | |
75 } | |
76 | |
77 + for (mk = mkeys; mk < mkeys + mkeyslen; mk++) { | |
78 + if (e->xbutton.button == mk->b | |
79 + && match(mk->mask, e->xbutton.state)) { | |
80 + mk->func(&mk->arg); | |
81 + return; | |
82 + } | |
83 + } | |
84 + | |
85 if (e->xbutton.button == Button1) { | |
86 clock_gettime(CLOCK_MONOTONIC, &now); | |
87 |