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 | ||