diff options
| -rw-r--r-- | config.def.h | 34 | ||||
| -rw-r--r-- | st.c | 17 |
2 files changed, 33 insertions, 18 deletions
diff --git a/config.def.h b/config.def.h index 8543ea2..7c55ef2 100644 --- a/config.def.h +++ b/config.def.h | |||
| @@ -62,6 +62,7 @@ static Shortcut shortcuts[] = { | |||
| 62 | { MODKEY|ShiftMask, XK_Prior, xzoom, {.i = +1} }, | 62 | { MODKEY|ShiftMask, XK_Prior, xzoom, {.i = +1} }, |
| 63 | { MODKEY|ShiftMask, XK_Next, xzoom, {.i = -1} }, | 63 | { MODKEY|ShiftMask, XK_Next, xzoom, {.i = -1} }, |
| 64 | { ShiftMask, XK_Insert, selpaste, {.i = 0} }, | 64 | { ShiftMask, XK_Insert, selpaste, {.i = 0} }, |
| 65 | { MODKEY, XK_Num_Lock, numlock, {.i = 0} }, | ||
| 65 | }; | 66 | }; |
| 66 | 67 | ||
| 67 | /* | 68 | /* |
| @@ -73,6 +74,7 @@ static Shortcut shortcuts[] = { | |||
| 73 | * keypad value: | 74 | * keypad value: |
| 74 | * * 0: no value | 75 | * * 0: no value |
| 75 | * * > 0: keypad application mode enabled | 76 | * * > 0: keypad application mode enabled |
| 77 | * * = 2: term.numlock = 1 | ||
| 76 | * * < 0: keypad application mode disabled | 78 | * * < 0: keypad application mode disabled |
| 77 | * cursor value: | 79 | * cursor value: |
| 78 | * * 0: no value | 80 | * * 0: no value |
| @@ -123,24 +125,24 @@ static Key key[] = { | |||
| 123 | { XK_KP_Insert, XK_ANY_MOD, "\033[2~", 0, 0, 0}, | 125 | { XK_KP_Insert, XK_ANY_MOD, "\033[2~", 0, 0, 0}, |
| 124 | { XK_KP_Delete, ShiftMask, "\033[3;2~", 0, 0, 0}, | 126 | { XK_KP_Delete, ShiftMask, "\033[3;2~", 0, 0, 0}, |
| 125 | { XK_KP_Delete, XK_ANY_MOD, "\033[3~", 0, 0, 0}, | 127 | { XK_KP_Delete, XK_ANY_MOD, "\033[3~", 0, 0, 0}, |
| 126 | { XK_KP_Multiply, XK_ANY_MOD, "\033Oj", +1, 0, 0}, | 128 | { XK_KP_Multiply, XK_ANY_MOD, "\033Oj", +2, 0, 0}, |
| 127 | { XK_KP_Add, XK_ANY_MOD, "\033Ok", +1, 0, 0}, | 129 | { XK_KP_Add, XK_ANY_MOD, "\033Ok", +2, 0, 0}, |
| 128 | { XK_KP_Enter, XK_ANY_MOD, "\033OM", +1, 0, 0}, | 130 | { XK_KP_Enter, XK_ANY_MOD, "\033OM", +2, 0, 0}, |
| 129 | { XK_KP_Enter, XK_ANY_MOD, "\r", -1, 0, -1}, | 131 | { XK_KP_Enter, XK_ANY_MOD, "\r", -1, 0, -1}, |
| 130 | { XK_KP_Enter, XK_ANY_MOD, "\r\n", -1, 0, +1}, | 132 | { XK_KP_Enter, XK_ANY_MOD, "\r\n", -1, 0, +1}, |
| 131 | { XK_KP_Subtract, XK_ANY_MOD, "\033Om", +1, 0, 0}, | 133 | { XK_KP_Subtract, XK_ANY_MOD, "\033Om", +2, 0, 0}, |
| 132 | { XK_KP_Decimal, XK_ANY_MOD, "\033On", +1, 0, 0}, | 134 | { XK_KP_Decimal, XK_ANY_MOD, "\033On", +2, 0, 0}, |
| 133 | { XK_KP_Divide, XK_ANY_MOD, "\033Oo", +1, 0, 0}, | 135 | { XK_KP_Divide, XK_ANY_MOD, "\033Oo", +2, 0, 0}, |
| 134 | { XK_KP_0, XK_ANY_MOD, "\033Op", +1, 0, 0}, | 136 | { XK_KP_0, XK_ANY_MOD, "\033Op", +2, 0, 0}, |
| 135 | { XK_KP_1, XK_ANY_MOD, "\033Oq", +1, 0, 0}, | 137 | { XK_KP_1, XK_ANY_MOD, "\033Oq", +2, 0, 0}, |
| 136 | { XK_KP_2, XK_ANY_MOD, "\033Or", +1, 0, 0}, | 138 | { XK_KP_2, XK_ANY_MOD, "\033Or", +2, 0, 0}, |
| 137 | { XK_KP_3, XK_ANY_MOD, "\033Os", +1, 0, 0}, | 139 | { XK_KP_3, XK_ANY_MOD, "\033Os", +2, 0, 0}, |
| 138 | { XK_KP_4, XK_ANY_MOD, "\033Ot", +1, 0, 0}, | 140 | { XK_KP_4, XK_ANY_MOD, "\033Ot", +2, 0, 0}, |
| 139 | { XK_KP_5, XK_ANY_MOD, "\033Ou", +1, 0, 0}, | 141 | { XK_KP_5, XK_ANY_MOD, "\033Ou", +2, 0, 0}, |
| 140 | { XK_KP_6, XK_ANY_MOD, "\033Ov", +1, 0, 0}, | 142 | { XK_KP_6, XK_ANY_MOD, "\033Ov", +2, 0, 0}, |
| 141 | { XK_KP_7, XK_ANY_MOD, "\033Ow", +1, 0, 0}, | 143 | { XK_KP_7, XK_ANY_MOD, "\033Ow", +2, 0, 0}, |
| 142 | { XK_KP_8, XK_ANY_MOD, "\033Ox", +1, 0, 0}, | 144 | { XK_KP_8, XK_ANY_MOD, "\033Ox", +2, 0, 0}, |
| 143 | { XK_KP_9, XK_ANY_MOD, "\033Oy", +1, 0, 0}, | 145 | { XK_KP_9, XK_ANY_MOD, "\033Oy", +2, 0, 0}, |
| 144 | { XK_BackSpace, XK_NO_MOD, "\177", 0, 0, 0}, | 146 | { XK_BackSpace, XK_NO_MOD, "\177", 0, 0, 0}, |
| 145 | { XK_Up, ShiftMask, "\033[1;2A", 0, 0, 0}, | 147 | { XK_Up, ShiftMask, "\033[1;2A", 0, 0, 0}, |
| 146 | { XK_Up, ControlMask, "\033[1;5A", 0, 0, 0}, | 148 | { XK_Up, ControlMask, "\033[1;5A", 0, 0, 0}, |
| @@ -194,6 +194,7 @@ typedef struct { | |||
| 194 | int bot; /* bottom scroll limit */ | 194 | int bot; /* bottom scroll limit */ |
| 195 | int mode; /* terminal mode flags */ | 195 | int mode; /* terminal mode flags */ |
| 196 | int esc; /* escape state flags */ | 196 | int esc; /* escape state flags */ |
| 197 | bool numlock; /* lock numbers in keyboard */ | ||
| 197 | bool *tabs; | 198 | bool *tabs; |
| 198 | } Term; | 199 | } Term; |
| 199 | 200 | ||
| @@ -261,6 +262,7 @@ typedef struct { | |||
| 261 | /* function definitions used in config.h */ | 262 | /* function definitions used in config.h */ |
| 262 | static void xzoom(const Arg *); | 263 | static void xzoom(const Arg *); |
| 263 | static void selpaste(const Arg *); | 264 | static void selpaste(const Arg *); |
| 265 | static void numlock(const Arg *); | ||
| 264 | 266 | ||
| 265 | /* Config.h for applying patches and the configuration. */ | 267 | /* Config.h for applying patches and the configuration. */ |
| 266 | #include "config.h" | 268 | #include "config.h" |
| @@ -1100,6 +1102,7 @@ tnew(int col, int row) { | |||
| 1100 | term.alt [row] = xmalloc(term.col * sizeof(Glyph)); | 1102 | term.alt [row] = xmalloc(term.col * sizeof(Glyph)); |
| 1101 | term.dirty[row] = 0; | 1103 | term.dirty[row] = 0; |
| 1102 | } | 1104 | } |
| 1105 | term.numlock = 1; | ||
| 1103 | memset(term.tabs, 0, term.col * sizeof(*term.tabs)); | 1106 | memset(term.tabs, 0, term.col * sizeof(*term.tabs)); |
| 1104 | /* setup screen */ | 1107 | /* setup screen */ |
| 1105 | treset(); | 1108 | treset(); |
| @@ -2700,6 +2703,12 @@ match(uint mask, uint state) { | |||
| 2700 | return true; | 2703 | return true; |
| 2701 | } | 2704 | } |
| 2702 | 2705 | ||
| 2706 | void | ||
| 2707 | numlock(const Arg *dummy) | ||
| 2708 | { | ||
| 2709 | term.numlock ^= 1; | ||
| 2710 | } | ||
| 2711 | |||
| 2703 | char* | 2712 | char* |
| 2704 | kmap(KeySym k, uint state) { | 2713 | kmap(KeySym k, uint state) { |
| 2705 | uint mask; | 2714 | uint mask; |
| @@ -2725,8 +2734,12 @@ kmap(KeySym k, uint state) { | |||
| 2725 | if(!match(mask, state)) | 2734 | if(!match(mask, state)) |
| 2726 | continue; | 2735 | continue; |
| 2727 | 2736 | ||
| 2728 | if((kp->appkey < 0 && IS_SET(MODE_APPKEYPAD)) || | 2737 | if(kp->appkey > 0) { |
| 2729 | (kp->appkey > 0 && !IS_SET(MODE_APPKEYPAD))) { | 2738 | if(!IS_SET(MODE_APPKEYPAD)) |
| 2739 | continue; | ||
| 2740 | if(term.numlock && kp->appkey == 2) | ||
| 2741 | continue; | ||
| 2742 | } else if (kp->appkey < 0 && IS_SET(MODE_APPKEYPAD)) { | ||
| 2730 | continue; | 2743 | continue; |
| 2731 | } | 2744 | } |
| 2732 | 2745 | ||
