# st

Unnamed repository; edit this file 'description' to name the repository.

| Log | Files | Refs | README | LICENSE

    commit ba7f4d69af62d20e13fea78a408095e017410651
    parent 2b8333f553c14c15398e810353e192eb05938580
    Author: Avi Halachmi (:avih) <avihpit@yahoo.com>
    Date:   Thu, 10 Oct 2019 23:02:26 +0300

    mouse shortcuts: allow same functions as kb shortcuts

    Previously mouse shortcuts supported only ttywrite.

    This required adding an "Arg" function ttysend - which does what the
    original mouse shortcuts did.

    Diffstat:
    Mconfig.def.h | 6+++---
    Mst.h | 1+
    Mx.c | 20++++++++++++++------

    3 files changed, 18 insertions(+), 9 deletions(-)
    diff --git 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. */
    diff --git a/st.h b/st.h
    @@ -74,6 +74,7 @@ typedef union {
     	uint ui;
     	float f;
     	const void *v;
    +	const char *s;
     } Arg;

     void die(const char *, ...);
    diff --git a/x.c b/x.c
    @@ -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;
     		}
     	}