Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit f6fb370

Browse filesBrowse files
FractalWirejustinmk
authored andcommitted
keymap: add more (keypad) keycodes #9793
- K_KORIGIN instead of K_KCENTER: This name is similar to what is used by xev. Alternative could be K_KBEGIN as hinted here: https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-PC-Style-Function-Keys But I find Begin and Home too similar, and it might induced some confusion. The naming looked related to some old keyboard configuration. - keymap.c: alias KPPeriod to kDel instead of kPoint. This might seems weird, but this is actually the behaviour that should be expected. libtermkey produces "KPPeriod" when num lock is off. To fix this would need to change this name in termkey. closes #9780 closes #9793
1 parent 33f9943 commit f6fb370
Copy full SHA for f6fb370

File tree

Expand file treeCollapse file tree

6 files changed

+148
-42
lines changed
Filter options
Expand file treeCollapse file tree

6 files changed

+148
-42
lines changed

‎runtime/doc/intro.txt

Copy file name to clipboardExpand all lines: runtime/doc/intro.txt
+9Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,10 +359,16 @@ notation meaning equivalent decimal value(s) ~
359359
<End> end *end*
360360
<PageUp> page-up *page_up* *page-up*
361361
<PageDown> page-down *page_down* *page-down*
362+
<kUp> keypad cursor-up *keypad-cursor-up*
363+
<kDown> keypad cursor-down *keypad-cursor-down*
364+
<kLeft> keypad cursor-left *keypad-cursor-left*
365+
<kRight> keypad cursor-right *keypad-cursor-right*
362366
<kHome> keypad home (upper left) *keypad-home*
363367
<kEnd> keypad end (lower left) *keypad-end*
368+
<kOrigin> keypad origin (middle) *keypad-origin*
364369
<kPageUp> keypad page-up (upper right) *keypad-page-up*
365370
<kPageDown> keypad page-down (lower right) *keypad-page-down*
371+
<kDel> keypad delete *keypad-delete*
366372
<kPlus> keypad + *keypad-plus*
367373
<kMinus> keypad - *keypad-minus*
368374
<kMultiply> keypad * *keypad-multiply*
@@ -392,6 +398,9 @@ recognized as the non-keypad code. For example, when <kHome> sends the same
392398
code as <Home>, when pressing <kHome> Vim will think <Home> was pressed.
393399
Mapping <kHome> will not work then.
394400

401+
Note: If numlock is on, the |TUI| receives plain ASCII values, so
402+
mappings to <k0> - <k9> and <kPoint> will not work.
403+
395404
*<>*
396405
Examples are often given in the <> notation. Sometimes this is just to make
397406
clear what you need to type, but often it can be typed literally, e.g., with

‎src/nvim/getchar.c

Copy file name to clipboardExpand all lines: src/nvim/getchar.c
+45-42Lines changed: 45 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1425,49 +1425,52 @@ int vgetc(void)
14251425
/* a keypad or special function key was not mapped, use it like
14261426
* its ASCII equivalent */
14271427
switch (c) {
1428-
case K_KPLUS: c = '+'; break;
1429-
case K_KMINUS: c = '-'; break;
1430-
case K_KDIVIDE: c = '/'; break;
1431-
case K_KMULTIPLY: c = '*'; break;
1432-
case K_KENTER: c = CAR; break;
1433-
case K_KPOINT:
1434-
c = '.'; break;
1435-
case K_K0: c = '0'; break;
1436-
case K_K1: c = '1'; break;
1437-
case K_K2: c = '2'; break;
1438-
case K_K3: c = '3'; break;
1439-
case K_K4: c = '4'; break;
1440-
case K_K5: c = '5'; break;
1441-
case K_K6: c = '6'; break;
1442-
case K_K7: c = '7'; break;
1443-
case K_K8: c = '8'; break;
1444-
case K_K9: c = '9'; break;
1445-
1446-
case K_XHOME:
1447-
case K_ZHOME: if (mod_mask == MOD_MASK_SHIFT) {
1448-
c = K_S_HOME;
1449-
mod_mask = 0;
1450-
} else if (mod_mask == MOD_MASK_CTRL) {
1451-
c = K_C_HOME;
1452-
mod_mask = 0;
1453-
} else
1454-
c = K_HOME;
1455-
break;
1456-
case K_XEND:
1457-
case K_ZEND: if (mod_mask == MOD_MASK_SHIFT) {
1458-
c = K_S_END;
1459-
mod_mask = 0;
1460-
} else if (mod_mask == MOD_MASK_CTRL) {
1461-
c = K_C_END;
1462-
mod_mask = 0;
1463-
} else
1464-
c = K_END;
1465-
break;
1428+
case K_KPLUS: c = '+'; break;
1429+
case K_KMINUS: c = '-'; break;
1430+
case K_KDIVIDE: c = '/'; break;
1431+
case K_KMULTIPLY: c = '*'; break;
1432+
case K_KENTER: c = CAR; break;
1433+
case K_KPOINT: c = '.'; break;
1434+
case K_K0: c = '0'; break;
1435+
case K_K1: c = '1'; break;
1436+
case K_K2: c = '2'; break;
1437+
case K_K3: c = '3'; break;
1438+
case K_K4: c = '4'; break;
1439+
case K_K5: c = '5'; break;
1440+
case K_K6: c = '6'; break;
1441+
case K_K7: c = '7'; break;
1442+
case K_K8: c = '8'; break;
1443+
case K_K9: c = '9'; break;
1444+
1445+
case K_XHOME:
1446+
case K_ZHOME:
1447+
if (mod_mask == MOD_MASK_SHIFT) {
1448+
c = K_S_HOME;
1449+
mod_mask = 0;
1450+
} else if (mod_mask == MOD_MASK_CTRL) {
1451+
c = K_C_HOME;
1452+
mod_mask = 0;
1453+
} else {
1454+
c = K_HOME;
1455+
}
1456+
break;
1457+
case K_XEND:
1458+
case K_ZEND:
1459+
if (mod_mask == MOD_MASK_SHIFT) {
1460+
c = K_S_END;
1461+
mod_mask = 0;
1462+
} else if (mod_mask == MOD_MASK_CTRL) {
1463+
c = K_C_END;
1464+
mod_mask = 0;
1465+
} else {
1466+
c = K_END;
1467+
}
1468+
break;
14661469

1467-
case K_XUP: c = K_UP; break;
1468-
case K_XDOWN: c = K_DOWN; break;
1469-
case K_XLEFT: c = K_LEFT; break;
1470-
case K_XRIGHT: c = K_RIGHT; break;
1470+
case K_XUP: c = K_UP; break;
1471+
case K_XDOWN: c = K_DOWN; break;
1472+
case K_XLEFT: c = K_LEFT; break;
1473+
case K_XRIGHT: c = K_RIGHT; break;
14711474
}
14721475

14731476
/* For a multi-byte character get all the bytes and return the

‎src/nvim/keymap.c

Copy file name to clipboardExpand all lines: src/nvim/keymap.c
+21Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ static const struct key_name_entry {
163163
{ K_DEL, "Del" },
164164
{ K_DEL, "Delete" }, // Alternative name
165165
{ K_KDEL, "kDel" },
166+
{ K_KDEL, "KPPeriod" }, // libtermkey name
166167
{ K_UP, "Up" },
167168
{ K_DOWN, "Down" },
168169
{ K_LEFT, "Left" },
@@ -171,6 +172,14 @@ static const struct key_name_entry {
171172
{ K_XDOWN, "xDown" },
172173
{ K_XLEFT, "xLeft" },
173174
{ K_XRIGHT, "xRight" },
175+
{ K_KUP, "kUp" },
176+
{ K_KUP, "KP8" },
177+
{ K_KDOWN, "kDown" },
178+
{ K_KDOWN, "KP2" },
179+
{ K_KLEFT, "kLeft" },
180+
{ K_KLEFT, "KP4" },
181+
{ K_KRIGHT, "kRight" },
182+
{ K_KRIGHT, "KP6" },
174183

175184
{ K_F1, "F1" },
176185
{ K_F2, "F2" },
@@ -223,24 +232,36 @@ static const struct key_name_entry {
223232
{ K_INS, "Insert" },
224233
{ K_INS, "Ins" }, // Alternative name
225234
{ K_KINS, "kInsert" },
235+
{ K_KINS, "KP0" },
226236
{ K_HOME, "Home" },
227237
{ K_KHOME, "kHome" },
238+
{ K_KHOME, "KP7" },
228239
{ K_XHOME, "xHome" },
229240
{ K_ZHOME, "zHome" },
230241
{ K_END, "End" },
231242
{ K_KEND, "kEnd" },
243+
{ K_KEND, "KP1" },
232244
{ K_XEND, "xEnd" },
233245
{ K_ZEND, "zEnd" },
234246
{ K_PAGEUP, "PageUp" },
235247
{ K_PAGEDOWN, "PageDown" },
236248
{ K_KPAGEUP, "kPageUp" },
249+
{ K_KPAGEUP, "KP9" },
237250
{ K_KPAGEDOWN, "kPageDown" },
251+
{ K_KPAGEDOWN, "KP3" },
252+
{ K_KORIGIN, "kOrigin" },
253+
{ K_KORIGIN, "KP5" },
238254

239255
{ K_KPLUS, "kPlus" },
256+
{ K_KPLUS, "KPPlus" },
240257
{ K_KMINUS, "kMinus" },
258+
{ K_KMINUS, "KPMinus" },
241259
{ K_KDIVIDE, "kDivide" },
260+
{ K_KDIVIDE, "KPDiv" },
242261
{ K_KMULTIPLY, "kMultiply" },
262+
{ K_KMULTIPLY, "KPMult" },
243263
{ K_KENTER, "kEnter" },
264+
{ K_KENTER, "KPEnter" },
244265
{ K_KPOINT, "kPoint" },
245266

246267
{ K_K0, "k0" },

‎src/nvim/keymap.h

Copy file name to clipboardExpand all lines: src/nvim/keymap.h
+5Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,9 +256,13 @@ enum key_extra {
256256
#define K_ZERO TERMCAP2KEY(KS_ZERO, KE_FILLER)
257257

258258
#define K_UP TERMCAP2KEY('k', 'u')
259+
#define K_KUP TERMCAP2KEY('K', 'u') /* keypad up */
259260
#define K_DOWN TERMCAP2KEY('k', 'd')
261+
#define K_KDOWN TERMCAP2KEY('K', 'd') /* keypad down */
260262
#define K_LEFT TERMCAP2KEY('k', 'l')
263+
#define K_KLEFT TERMCAP2KEY('K', 'l') /* keypad left */
261264
#define K_RIGHT TERMCAP2KEY('k', 'r')
265+
#define K_KRIGHT TERMCAP2KEY('K', 'r') /* keypad right */
262266
#define K_S_UP TERMCAP2KEY(KS_EXTRA, KE_S_UP)
263267
#define K_S_DOWN TERMCAP2KEY(KS_EXTRA, KE_S_DOWN)
264268
#define K_S_LEFT TERMCAP2KEY('#', '4')
@@ -367,6 +371,7 @@ enum key_extra {
367371
#define K_PAGEDOWN TERMCAP2KEY('k', 'N')
368372
#define K_KPAGEUP TERMCAP2KEY('K', '3') /* keypad pageup (upper R.) */
369373
#define K_KPAGEDOWN TERMCAP2KEY('K', '5') /* keypad pagedown (lower R.) */
374+
#define K_KORIGIN TERMCAP2KEY('K', '2') /* keypad center */
370375

371376
#define K_KPLUS TERMCAP2KEY('K', '6') /* keypad plus */
372377
#define K_KMINUS TERMCAP2KEY('K', '7') /* keypad minus */

‎test/functional/ui/input_spec.lua

Copy file name to clipboardExpand all lines: test/functional/ui/input_spec.lua
+48Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,22 @@ describe('mappings', function()
3030
add_mapping('<c-s-a-d-up>', '<c-s-a-d-up>')
3131
add_mapping('<c-d-a>', '<c-d-a>')
3232
add_mapping('<d-1>', '<d-1>')
33+
add_mapping('<khome>','<khome>')
34+
add_mapping('<kup>','<kup>')
35+
add_mapping('<kpageup>','<kpageup>')
36+
add_mapping('<kleft>','<kleft>')
37+
add_mapping('<korigin>','<korigin>')
38+
add_mapping('<kright>','<kright>')
39+
add_mapping('<kend>','<kend>')
40+
add_mapping('<kdown>','<kdown>')
41+
add_mapping('<kpagedown>','<kpagedown>')
42+
add_mapping('<kinsert>','<kinsert>')
43+
add_mapping('<kdel>','<kdel>')
44+
add_mapping('<kdivide>','<kdivide>')
45+
add_mapping('<kmultiply>','<kmultiply>')
46+
add_mapping('<kminus>','<kminus>')
47+
add_mapping('<kplus>','<kplus>')
48+
add_mapping('<kenter>','<kenter>')
3349
end)
3450

3551
it('ok', function()
@@ -48,6 +64,38 @@ describe('mappings', function()
4864
check_mapping('<c-d-a>', '<c-d-a>')
4965
check_mapping('<d-c-a>', '<c-d-a>')
5066
check_mapping('<d-1>', '<d-1>')
67+
check_mapping('<khome>','<khome>')
68+
check_mapping('<KP7>','<khome>')
69+
check_mapping('<kup>','<kup>')
70+
check_mapping('<KP8>','<kup>')
71+
check_mapping('<kpageup>','<kpageup>')
72+
check_mapping('<KP9>','<kpageup>')
73+
check_mapping('<kleft>','<kleft>')
74+
check_mapping('<KP4>','<kleft>')
75+
check_mapping('<korigin>','<korigin>')
76+
check_mapping('<KP5>','<korigin>')
77+
check_mapping('<kright>','<kright>')
78+
check_mapping('<KP6>','<kright>')
79+
check_mapping('<kend>','<kend>')
80+
check_mapping('<KP1>','<kend>')
81+
check_mapping('<kdown>','<kdown>')
82+
check_mapping('<KP2>','<kdown>')
83+
check_mapping('<kpagedown>','<kpagedown>')
84+
check_mapping('<KP3>','<kpagedown>')
85+
check_mapping('<kinsert>','<kinsert>')
86+
check_mapping('<KP0>','<kinsert>')
87+
check_mapping('<kdel>','<kdel>')
88+
check_mapping('<KPPeriod>','<kdel>')
89+
check_mapping('<kdivide>','<kdivide>')
90+
check_mapping('<KPDiv>','<kdivide>')
91+
check_mapping('<kmultiply>','<kmultiply>')
92+
check_mapping('<KPMult>','<kmultiply>')
93+
check_mapping('<kminus>','<kminus>')
94+
check_mapping('<KPMinus>','<kminus>')
95+
check_mapping('<kplus>','<kplus>')
96+
check_mapping('<KPPlus>','<kplus>')
97+
check_mapping('<kenter>','<kenter>')
98+
check_mapping('<KPEnter>','<kenter>')
5199
end)
52100
end)
53101

‎test/symbolic/klee/nvim/keymap.c

Copy file name to clipboardExpand all lines: test/symbolic/klee/nvim/keymap.c
+20Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ static const struct key_name_entry {
165165
{ K_DEL, "Del" },
166166
{ K_DEL, "Delete" }, // Alternative name
167167
{ K_KDEL, "kDel" },
168+
{ K_KDEL, "KPPeriod" }, // termkey KPPeriod value
168169
{ K_UP, "Up" },
169170
{ K_DOWN, "Down" },
170171
{ K_LEFT, "Left" },
@@ -173,6 +174,14 @@ static const struct key_name_entry {
173174
{ K_XDOWN, "xDown" },
174175
{ K_XLEFT, "xLeft" },
175176
{ K_XRIGHT, "xRight" },
177+
{ K_KUP, "kUp" },
178+
{ K_KUP, "KP8" },
179+
{ K_KDOWN, "kDown" },
180+
{ K_KDOWN, "KP2" },
181+
{ K_KLEFT, "kLeft" },
182+
{ K_KLEFT, "KP4" },
183+
{ K_KRIGHT, "kRight" },
184+
{ K_KRIGHT, "KP6" },
176185

177186
{ K_F1, "F1" },
178187
{ K_F2, "F2" },
@@ -225,8 +234,10 @@ static const struct key_name_entry {
225234
{ K_INS, "Insert" },
226235
{ K_INS, "Ins" }, // Alternative name
227236
{ K_KINS, "kInsert" },
237+
{ K_KINS, "KP0" },
228238
{ K_HOME, "Home" },
229239
{ K_KHOME, "kHome" },
240+
{ K_KHOME, "KP7" },
230241
{ K_XHOME, "xHome" },
231242
{ K_ZHOME, "zHome" },
232243
{ K_END, "End" },
@@ -236,13 +247,22 @@ static const struct key_name_entry {
236247
{ K_PAGEUP, "PageUp" },
237248
{ K_PAGEDOWN, "PageDown" },
238249
{ K_KPAGEUP, "kPageUp" },
250+
{ K_KPAGEUP, "KP9" },
239251
{ K_KPAGEDOWN, "kPageDown" },
252+
{ K_KPAGEDOWN, "KP3" },
253+
{ K_KORIGIN, "kOrigin" },
254+
{ K_KORIGIN, "KP5" },
240255

241256
{ K_KPLUS, "kPlus" },
257+
{ K_KPLUS, "KPPlus" },
242258
{ K_KMINUS, "kMinus" },
259+
{ K_KMINUS, "KPMinus" },
243260
{ K_KDIVIDE, "kDivide" },
261+
{ K_KDIVIDE, "KPDiv" },
244262
{ K_KMULTIPLY, "kMultiply" },
263+
{ K_KMULTIPLY, "KPMult" },
245264
{ K_KENTER, "kEnter" },
265+
{ K_KENTER, "KPEnter" },
246266
{ K_KPOINT, "kPoint" },
247267

248268
{ K_K0, "k0" },

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.