tAdd a possibility to modify the string sent by mouse buttons. - st - [fork] cu… | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit a53017c8b47f511cf0462ac910cf9223a31ceb2f | |
parent a77b01176a34de741485024e5e36002cff3c1124 | |
Author: Christoph Lohmann <[email protected]> | |
Date: Sun, 28 Apr 2013 17:42:30 +0200 | |
Add a possibility to modify the string sent by mouse buttons. | |
Thanks Alexander Rezinsky <[email protected]> for the suggestion! | |
Diffstat: | |
M config.def.h | 10 +++++++++- | |
M st.c | 26 +++++++++++++++++++++----- | |
2 files changed, 30 insertions(+), 6 deletions(-) | |
--- | |
diff --git a/config.def.h b/config.def.h | |
t@@ -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 | |
t@@ -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]; | |
t@@ -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. */ | |
t@@ -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); | |
} | |
} | |