summaryrefslogtreecommitdiff
path: root/patches/st-scrollback-mouse-0.8.diff
diff options
context:
space:
mode:
Diffstat (limited to 'patches/st-scrollback-mouse-0.8.diff')
-rw-r--r--patches/st-scrollback-mouse-0.8.diff71
1 files changed, 71 insertions, 0 deletions
diff --git a/patches/st-scrollback-mouse-0.8.diff b/patches/st-scrollback-mouse-0.8.diff
new file mode 100644
index 0000000..3b2729e
--- /dev/null
+++ b/patches/st-scrollback-mouse-0.8.diff
@@ -0,0 +1,71 @@
+diff --git a/config.def.h b/config.def.h
+index 27d42ca..feec7e2 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 628e876..cdd25ae 100644
+--- a/st.h
++++ b/st.h
+@@ -81,6 +81,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);
+@@ -129,3 +136,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 d43a529..754d859 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