aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config.def.h34
-rw-r--r--st.c17
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},
diff --git a/st.c b/st.c
index 1647cbd..671b386 100644
--- a/st.c
+++ b/st.c
@@ -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 */
262static void xzoom(const Arg *); 263static void xzoom(const Arg *);
263static void selpaste(const Arg *); 264static void selpaste(const Arg *);
265static 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
2706void
2707numlock(const Arg *dummy)
2708{
2709 term.numlock ^= 1;
2710}
2711
2703char* 2712char*
2704kmap(KeySym k, uint state) { 2713kmap(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