st

fork of suckless's simple terminal
Index Commits Files Refs README LICENSE
commit a53017c8b47f511cf0462ac910cf9223a31ceb2f
parent a77b01176a34de741485024e5e36002cff3c1124
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:
Mconfig.def.h | 10+++++++++-
Mst.c | 26+++++++++++++++++++++-----
2 files changed, 30 insertions(+), 6 deletions(-)
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[] = {
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);
     }
 }