JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
Add a possibility to modify the string sent by mouse buttons.
authorChristoph Lohmann <20h@r-36.net>
Sun, 28 Apr 2013 15:42:30 +0000 (17:42 +0200)
committerChristoph Lohmann <20h@r-36.net>
Sun, 28 Apr 2013 15:42:30 +0000 (17:42 +0200)
Thanks Alexander Rezinsky <alexrez@gmail.com> for the suggestion!

config.def.h
st.c

index b44fe17..b0bc752 100644 (file)
@@ -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[] = {
diff --git a/st.c b/st.c
index 07940d2..aa2cd08 100644 (file)
--- 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);
        }
 }