diff options
| -rw-r--r-- | config.def.h | 52 | ||||
| -rw-r--r-- | st.c | 9 |
2 files changed, 36 insertions, 25 deletions
diff --git a/config.def.h b/config.def.h index c1afd88..37f9620 100644 --- a/config.def.h +++ b/config.def.h | |||
| @@ -25,34 +25,40 @@ static const char *colorname[] = { | |||
| 25 | "white" | 25 | "white" |
| 26 | }; | 26 | }; |
| 27 | 27 | ||
| 28 | /* Default colors (colorname index) */ | 28 | /* Default colors (colorname index) |
| 29 | /* foreground, background, cursor */ | 29 | foreground, background, cursor */ |
| 30 | #define DefaultFG 7 | 30 | #define DefaultFG 7 |
| 31 | #define DefaultBG 0 | 31 | #define DefaultBG 0 |
| 32 | #define DefaultCS 1 | 32 | #define DefaultCS 1 |
| 33 | 33 | ||
| 34 | /* Special keys (change & recompile st.info accordingly) */ | 34 | /* Special keys (change & recompile st.info accordingly) |
| 35 | /* key, mask, output */ | 35 | Keep in mind that kpress() in st.c hardcodes some keys. |
| 36 | |||
| 37 | Mask value: | ||
| 38 | * Use XK_ANY_MOD to match the key no matter modifiers state | ||
| 39 | * Use XK_NO_MOD to match the key alone (no modifiers) | ||
| 40 | |||
| 41 | key, mask, output */ | ||
| 36 | static Key key[] = { | 42 | static Key key[] = { |
| 37 | { XK_BackSpace, 0, "\177" }, | 43 | { XK_BackSpace, XK_NO_MOD, "\177" }, |
| 38 | { XK_Insert, 0, "\033[2~" }, | 44 | { XK_Insert, XK_NO_MOD, "\033[2~" }, |
| 39 | { XK_Delete, 0, "\033[3~" }, | 45 | { XK_Delete, XK_NO_MOD, "\033[3~" }, |
| 40 | { XK_Home, 0, "\033[1~" }, | 46 | { XK_Home, XK_NO_MOD, "\033[1~" }, |
| 41 | { XK_End, 0, "\033[4~" }, | 47 | { XK_End, XK_NO_MOD, "\033[4~" }, |
| 42 | { XK_Prior, 0, "\033[5~" }, | 48 | { XK_Prior, XK_NO_MOD, "\033[5~" }, |
| 43 | { XK_Next, 0, "\033[6~" }, | 49 | { XK_Next, XK_NO_MOD, "\033[6~" }, |
| 44 | { XK_F1, 0, "\033OP" }, | 50 | { XK_F1, XK_NO_MOD, "\033OP" }, |
| 45 | { XK_F2, 0, "\033OQ" }, | 51 | { XK_F2, XK_NO_MOD, "\033OQ" }, |
| 46 | { XK_F3, 0, "\033OR" }, | 52 | { XK_F3, XK_NO_MOD, "\033OR" }, |
| 47 | { XK_F4, 0, "\033OS" }, | 53 | { XK_F4, XK_NO_MOD, "\033OS" }, |
| 48 | { XK_F5, 0, "\033[15~" }, | 54 | { XK_F5, XK_NO_MOD, "\033[15~" }, |
| 49 | { XK_F6, 0, "\033[17~" }, | 55 | { XK_F6, XK_NO_MOD, "\033[17~" }, |
| 50 | { XK_F7, 0, "\033[18~" }, | 56 | { XK_F7, XK_NO_MOD, "\033[18~" }, |
| 51 | { XK_F8, 0, "\033[19~" }, | 57 | { XK_F8, XK_NO_MOD, "\033[19~" }, |
| 52 | { XK_F9, 0, "\033[20~" }, | 58 | { XK_F9, XK_NO_MOD, "\033[20~" }, |
| 53 | { XK_F10, 0, "\033[21~" }, | 59 | { XK_F10, XK_NO_MOD, "\033[21~" }, |
| 54 | { XK_F11, 0, "\033[23~" }, | 60 | { XK_F11, XK_NO_MOD, "\033[23~" }, |
| 55 | { XK_F12, 0, "\033[24~" }, | 61 | { XK_F12, XK_NO_MOD, "\033[24~" }, |
| 56 | }; | 62 | }; |
| 57 | 63 | ||
| 58 | /* Line drawing characters (sometime specific to each font...) */ | 64 | /* Line drawing characters (sometime specific to each font...) */ |
| @@ -43,6 +43,8 @@ | |||
| 43 | #define ESC_ARG_SIZ 16 | 43 | #define ESC_ARG_SIZ 16 |
| 44 | #define DRAW_BUF_SIZ 1024 | 44 | #define DRAW_BUF_SIZ 1024 |
| 45 | #define UTF_SIZ 4 | 45 | #define UTF_SIZ 4 |
| 46 | #define XK_NO_MOD UINT_MAX | ||
| 47 | #define XK_ANY_MOD 0 | ||
| 46 | 48 | ||
| 47 | #define SERRNO strerror(errno) | 49 | #define SERRNO strerror(errno) |
| 48 | #define MIN(a, b) ((a) < (b) ? (a) : (b)) | 50 | #define MIN(a, b) ((a) < (b) ? (a) : (b)) |
| @@ -1833,9 +1835,12 @@ focus(XEvent *ev) { | |||
| 1833 | char* | 1835 | char* |
| 1834 | kmap(KeySym k, unsigned int state) { | 1836 | kmap(KeySym k, unsigned int state) { |
| 1835 | int i; | 1837 | int i; |
| 1836 | for(i = 0; i < LEN(key); i++) | 1838 | state &= ~Mod2Mask; |
| 1837 | if(key[i].k == k && (key[i].mask == 0 || key[i].mask & state)) | 1839 | for(i = 0; i < LEN(key); i++) { |
| 1840 | unsigned int mask = key[i].mask; | ||
| 1841 | if(key[i].k == k && ((state & mask) == mask || (mask == XK_NO_MOD && !state))) | ||
| 1838 | return (char*)key[i].s; | 1842 | return (char*)key[i].s; |
| 1843 | } | ||
| 1839 | return NULL; | 1844 | return NULL; |
| 1840 | } | 1845 | } |
| 1841 | 1846 | ||
