Introduction
Introduction Statistics Contact Development Disclaimer Help
tFix Shift + Insert shortcut - st - [fork] customized build of st, the simple t…
git clone git://src.adamsgaard.dk/st
Log
Files
Refs
README
LICENSE
---
commit 90e1427632d6c5852d10c8d2bafa787012903eb9
parent cc86d148cb4092a57af2b58eeae96bbd721de803
Author: Roberto E. Vargas Caballero <[email protected]>
Date: Thu, 15 Nov 2012 19:01:16 +0100
Fix Shift + Insert shortcut
This patch apply the same code for shortcuts that it is used now for defined
keys. So it is possible use now XK_NO_MOD and XK_ANY_MOD for defining shortcuts.
---
st.c | 35 ++++++++++++++++++++---------------
1 file changed, 20 insertions(+), 15 deletions(-)
Diffstat:
M st.c | 35 ++++++++++++++++++-----------…
1 file changed, 20 insertions(+), 15 deletions(-)
---
diff --git a/st.c b/st.c
t@@ -65,7 +65,6 @@
#define REDRAW_TIMEOUT (80*1000) /* 80 ms */
/* macros */
-#define CLEANMASK(mask) (mask & (ShiftMask|ControlMask|Mod1Mask|Mod2Mask|Mod3M…
#define SERRNO strerror(errno)
#define MIN(a, b) ((a) < (b) ? (a) : (b))
#define MAX(a, b) ((a) < (b) ? (b) : (a))
t@@ -329,6 +328,7 @@ static void tsetmode(bool, bool, int *, int);
static void tfulldirt(void);
static void techo(char *, int);
+static inline bool match(uint, uint);
static void ttynew(void);
static void ttyread(void);
static void ttyresize(void);
t@@ -2696,23 +2696,29 @@ focus(XEvent *ev) {
}
}
+inline bool
+match(uint mask, uint state) {
+ if(mask == XK_NO_MOD && state)
+ return false;
+ if(mask != XK_ANY_MOD && mask != XK_NO_MOD && !state)
+ return false;
+ if((state & mask) != state)
+ return false;
+ return true;
+}
+
char*
kmap(KeySym k, uint state) {
uint mask;
Key *kp;
- state &= ~Mod2Mask;
for(kp = key; kp < key + LEN(key); kp++) {
mask = kp->mask;
if(kp->k != k)
continue;
- if(mask == XK_NO_MOD && state)
- continue;
- if(mask != XK_ANY_MOD && mask != XK_NO_MOD && !state)
- continue;
- if((state & mask) != state)
+ if(!match(mask, state))
continue;
if((kp->appkey < 0 && IS_SET(MODE_APPKEYPAD)) ||
t@@ -2741,21 +2747,20 @@ kpress(XEvent *ev) {
XKeyEvent *e = &ev->xkey;
KeySym ksym;
char xstr[31], buf[32], *customkey, *cp = buf;
- int len, i;
+ int len;
Status status;
+ Shortcut *bp;
if (IS_SET(MODE_KBDLOCK))
return;
len = XmbLookupString(xw.xic, e, xstr, sizeof(xstr), &ksym, &status);
-
+ e->state &= ~Mod2Mask;
/* 1. shortcuts */
- for(i = 0; i < LEN(shortcuts); i++) {
- if((ksym == shortcuts[i].keysym)
- && (CLEANMASK(shortcuts[i].mod) == \
- CLEANMASK(e->state))
- && shortcuts[i].func) {
- shortcuts[i].func(&(shortcuts[i].arg));
+ for(bp = shortcuts; bp < shortcuts + LEN(shortcuts); bp++) {
+ if(ksym == bp->keysym && match(bp->mod, e->state)) {
+ bp->func(&(bp->arg));
+ return;
}
}
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.