mouse shortcuts: allow same functions as kb shortcuts - st - Personal fork of st
 (HTM) git clone git://git.drkhsh.at/st.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit ba7f4d69af62d20e13fea78a408095e017410651
 (DIR) parent 2b8333f553c14c15398e810353e192eb05938580
 (HTM) 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:
         M config.def.h                        |       6 +++---
         M st.h                                |       1 +
         M x.c                                 |      20 ++++++++++++++------
       
       3 files changed, 18 insertions(+), 9 deletions(-)
       ---
 (DIR) 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. */
 (DIR) 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 *, ...);
 (DIR) 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;
                        }
                }