Add a possibility to modify the string sent by mouse buttons. - 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 a53017c8b47f511cf0462ac910cf9223a31ceb2f
 (DIR) parent a77b01176a34de741485024e5e36002cff3c1124
 (HTM) Author: Christoph Lohmann <20h@r-36.net>
       Date:   Sun, 28 Apr 2013 17:42:30 +0200
       
       Add a possibility to modify the string sent by mouse buttons.
       
       Thanks Alexander Rezinsky <alexrez@gmail.com> for the suggestion!
       
       Diffstat:
         M config.def.h                        |      10 +++++++++-
         M st.c                                |      26 +++++++++++++++++++++-----
       
       2 files changed, 30 insertions(+), 6 deletions(-)
       ---
 (DIR) diff --git a/config.def.h b/config.def.h
       @@ -74,7 +74,15 @@ static unsigned int defaultcs = 256;
        static unsigned int defaultitalic = 11;
        static unsigned int defaultunderline = 7;
        
       -/* Internal shortcuts. */
       +/* Internal mouse shortcuts. */
       +/* Beware that overloading Button1 will disable the selection. */
       +static Mousekey mshortcuts[] = {
       +        /* keysym                mask                string */
       +        { Button4,                XK_ANY_MOD,        "\031"},
       +        { Button5,                XK_ANY_MOD,        "\005"},
       +};
       +
       +/* Internal keyboard shortcuts. */
        #define MODKEY Mod1Mask
        
        static Shortcut shortcuts[] = {
 (DIR) diff --git a/st.c b/st.c
       @@ -229,6 +229,12 @@ typedef struct {
        } XWindow;
        
        typedef struct {
       +        int b;
       +        uint mask;
       +        char s[ESC_BUF_SIZ];
       +} Mousekey;
       +
       +typedef struct {
                KeySym k;
                uint mask;
                char s[ESC_BUF_SIZ];
       @@ -771,10 +777,24 @@ mousereport(XEvent *e) {
        void
        bpress(XEvent *e) {
                struct timeval now;
       +        Mousekey *mk;
        
                if(IS_SET(MODE_MOUSE)) {
                        mousereport(e);
       -        } else if(e->xbutton.button == Button1) {
       +                return;
       +        }
       +
       +        for(mk = mshortcuts; mk < mshortcuts + LEN(mshortcuts); mk++) {
       +                if(e->xbutton.button == mk->b
       +                                && match(mk->mask, e->xbutton.state)) {
       +                        ttywrite(mk->s, strlen(mk->s));
       +                        if(IS_SET(MODE_ECHO))
       +                                techo(mk->s, strlen(mk->s));
       +                        return;
       +                }
       +        }
       +
       +        if(e->xbutton.button == Button1) {
                        gettimeofday(&now, NULL);
        
                        /* Clear previous selection, logically and visually. */
       @@ -817,10 +837,6 @@ bpress(XEvent *e) {
                        }
                        sel.tclick2 = sel.tclick1;
                        sel.tclick1 = now;
       -        } else if(e->xbutton.button == Button4) {
       -                ttywrite("\031", 1);
       -        } else if(e->xbutton.button == Button5) {
       -                ttywrite("\005", 1);
                }
        }