diff options
| -rw-r--r-- | config.def.h | 6 | ||||
| -rw-r--r-- | st.h | 1 | ||||
| -rw-r--r-- | x.c | 20 | 
3 files changed, 18 insertions, 9 deletions
| diff --git a/config.def.h b/config.def.h index 6ebea98..36ff6ce 100644 --- a/config.def.h +++ b/config.def.h @@ -155,9 +155,9 @@ static unsigned int defaultattr = 11;   * Beware that overloading Button1 will disable the selection.   */  static MouseShortcut mshortcuts[] = { -	/* button               mask            string */ -	{ Button4,              XK_ANY_MOD,     "\031" }, -	{ Button5,              XK_ANY_MOD,     "\005" }, +	/* mask                 button   function        argument */ +	{ XK_ANY_MOD,           Button4, ttysend,        {.s = "\031"} }, +	{ XK_ANY_MOD,           Button5, ttysend,        {.s = "\005"} },  };  /* Internal keyboard shortcuts. */ @@ -74,6 +74,7 @@ typedef union {  	uint ui;  	float f;  	const void *v; +	const char *s;  } Arg;  void die(const char *, ...); @@ -29,9 +29,10 @@ typedef struct {  } Shortcut;  typedef struct { -	uint b; -	uint mask; -	char *s; +	uint mod; +	uint button; +	void (*func)(const Arg *); +	const Arg arg;  } MouseShortcut;  typedef struct { @@ -56,6 +57,7 @@ static void selpaste(const Arg *);  static void zoom(const Arg *);  static void zoomabs(const Arg *);  static void zoomreset(const Arg *); +static void ttysend(const Arg *);  /* config.h for applying patches and the configuration. */  #include "config.h" @@ -312,6 +314,12 @@ zoomreset(const Arg *arg)  	}  } +void +ttysend(const Arg *arg) +{ +	ttywrite(arg->s, strlen(arg->s), 1); +} +  int  evcol(XEvent *e)  { @@ -421,9 +429,9 @@ bpress(XEvent *e)  	}  	for (ms = mshortcuts; ms < mshortcuts + LEN(mshortcuts); ms++) { -		if (e->xbutton.button == ms->b -				&& match(ms->mask, e->xbutton.state)) { -			ttywrite(ms->s, strlen(ms->s), 1); +		if (e->xbutton.button == ms->button +				&& match(ms->mod, e->xbutton.state)) { +			ms->func(&(ms->arg));  			return;  		}  	} |