1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- From 315f69069017122ca69d0319d0ad9481113fe5c8 Mon Sep 17 00:00:00 2001
- From: Jacob Prosser <jacoblouisprosser@protonmail.com>
- Date: Fri, 26 Apr 2019 17:23:27 +1000
- Subject: [PATCH] Scrollback-Mouse for 0.8.2
- ---
- config.def.h | 10 ++++++++--
- st.h | 8 ++++++++
- x.c | 9 +++++++++
- 3 files changed, 25 insertions(+), 2 deletions(-)
- diff --git a/config.def.h b/config.def.h
- index 7326a74..ad20c4c 100644
- --- a/config.def.h
- +++ b/config.def.h
- @@ -156,8 +156,14 @@ static unsigned int defaultattr = 11;
- */
- static MouseShortcut mshortcuts[] = {
- /* button mask string */
- - { Button4, XK_ANY_MOD, "\031" },
- - { Button5, XK_ANY_MOD, "\005" },
- + { Button4, XK_NO_MOD, "\031" },
- + { Button5, XK_NO_MOD, "\005" },
- +};
- +
- +MouseKey mkeys[] = {
- + /* button mask function argument */
- + { Button4, ShiftMask, kscrollup, {.i = 1} },
- + { Button5, ShiftMask, kscrolldown, {.i = 1} },
- };
-
- /* Internal keyboard shortcuts. */
- diff --git a/st.h b/st.h
- index 17a79e0..3ac7f57 100644
- --- a/st.h
- +++ b/st.h
- @@ -76,6 +76,13 @@ typedef union {
- const void *v;
- } Arg;
-
- +typedef struct {
- + uint b;
- + uint mask;
- + void (*func)(const Arg *);
- + const Arg arg;
- +} MouseKey;
- +
- void die(const char *, ...);
- void redraw(void);
- void draw(void);
- @@ -122,3 +129,4 @@ extern char *termname;
- extern unsigned int tabspaces;
- extern unsigned int defaultfg;
- extern unsigned int defaultbg;
- +extern MouseKey mkeys[];
- diff --git a/x.c b/x.c
- index 0422421..e9fd6e9 100644
- --- a/x.c
- +++ b/x.c
- @@ -409,6 +409,7 @@ bpress(XEvent *e)
- {
- struct timespec now;
- MouseShortcut *ms;
- + MouseKey *mk;
- int snap;
-
- if (IS_SET(MODE_MOUSE) && !(e->xbutton.state & forceselmod)) {
- @@ -424,6 +425,14 @@ bpress(XEvent *e)
- }
- }
-
- + for (mk = mkeys; mk < mkeys + LEN(mkeys); mk++) {
- + if (e->xbutton.button == mk->b
- + && match(mk->mask, e->xbutton.state)) {
- + mk->func(&mk->arg);
- + return;
- + }
- + }
- +
- if (e->xbutton.button == Button1) {
- /*
- * If the user clicks below predefined timeouts specific
- --
- 2.21.0
|