sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

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