Skip to content

Commit aa43d8f

Browse files
committed
fix: Convert text keypad keys from their CSI-u codes to their text values (fixes #981)
1 parent d79dec6 commit aa43d8f

File tree

1 file changed

+69
-39
lines changed

1 file changed

+69
-39
lines changed

input.go

Lines changed: 69 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -135,8 +135,9 @@ type csiParamMode struct {
135135
}
136136

137137
type keyMap struct {
138-
Key Key
139-
Mod ModMask
138+
Key Key
139+
Mod ModMask
140+
Rune rune
140141
}
141142

142143
var csiAllKeys = map[csiParamMode]keyMap{
@@ -275,41 +276,70 @@ var csiAllKeys = map[csiParamMode]keyMap{
275276
}
276277

277278
// keys reported using Kitty csi-u protocol
278-
var csiUKeys = map[int]Key{
279-
27: KeyESC,
280-
9: KeyTAB,
281-
13: KeyEnter,
282-
127: KeyBS,
283-
57358: KeyCapsLock,
284-
57359: KeyScrollLock,
285-
57360: KeyNumLock,
286-
57361: KeyPrint,
287-
57362: KeyPause,
288-
57363: KeyMenu,
289-
57376: KeyF13,
290-
57377: KeyF14,
291-
57378: KeyF15,
292-
57379: KeyF16,
293-
57380: KeyF17,
294-
57381: KeyF18,
295-
57382: KeyF19,
296-
57383: KeyF20,
297-
57384: KeyF21,
298-
57385: KeyF22,
299-
57386: KeyF23,
300-
57387: KeyF24,
301-
57388: KeyF25,
302-
57389: KeyF26,
303-
57390: KeyF27,
304-
57391: KeyF28,
305-
57392: KeyF29,
306-
57393: KeyF30,
307-
57394: KeyF31,
308-
57395: KeyF32,
309-
57396: KeyF33,
310-
57397: KeyF34,
311-
57398: KeyF35,
312-
// TODO: KP keys
279+
var csiUKeys = map[int]keyMap{
280+
27: {Key: KeyESC},
281+
9: {Key: KeyTAB},
282+
13: {Key: KeyEnter},
283+
127: {Key: KeyBS},
284+
57358: {Key: KeyCapsLock},
285+
57359: {Key: KeyScrollLock},
286+
57360: {Key: KeyNumLock},
287+
57361: {Key: KeyPrint},
288+
57362: {Key: KeyPause},
289+
57363: {Key: KeyMenu},
290+
57376: {Key: KeyF13},
291+
57377: {Key: KeyF14},
292+
57378: {Key: KeyF15},
293+
57379: {Key: KeyF16},
294+
57380: {Key: KeyF17},
295+
57381: {Key: KeyF18},
296+
57382: {Key: KeyF19},
297+
57383: {Key: KeyF20},
298+
57384: {Key: KeyF21},
299+
57385: {Key: KeyF22},
300+
57386: {Key: KeyF23},
301+
57387: {Key: KeyF24},
302+
57388: {Key: KeyF25},
303+
57389: {Key: KeyF26},
304+
57390: {Key: KeyF27},
305+
57391: {Key: KeyF28},
306+
57392: {Key: KeyF29},
307+
57393: {Key: KeyF30},
308+
57394: {Key: KeyF31},
309+
57395: {Key: KeyF32},
310+
57396: {Key: KeyF33},
311+
57397: {Key: KeyF34},
312+
57398: {Key: KeyF35},
313+
57399: {Key: KeyRune, Rune: '0'}, // KP 0
314+
57400: {Key: KeyRune, Rune: '1'}, // KP 1
315+
57401: {Key: KeyRune, Rune: '2'}, // KP 2
316+
57402: {Key: KeyRune, Rune: '3'}, // KP 3
317+
57403: {Key: KeyRune, Rune: '4'}, // KP 4
318+
57404: {Key: KeyRune, Rune: '5'}, // KP 5
319+
57405: {Key: KeyRune, Rune: '6'}, // KP 6
320+
57406: {Key: KeyRune, Rune: '7'}, // KP 7
321+
57407: {Key: KeyRune, Rune: '8'}, // KP 8
322+
57408: {Key: KeyRune, Rune: '9'}, // KP 9
323+
57409: {Key: KeyRune, Rune: '.'}, // KP_DECIMAL
324+
57410: {Key: KeyRune, Rune: '/'}, // KP_DIVIDE
325+
57411: {Key: KeyRune, Rune: '*'}, // KP_MULTIPLY
326+
57412: {Key: KeyRune, Rune: '-'}, // KP_SUBTRACT
327+
57413: {Key: KeyRune, Rune: '+'}, // KP_ADD
328+
57414: {Key: KeyEnter}, // KP_ENTER
329+
57415: {Key: KeyRune, Rune: '='}, // KP_EQUAL
330+
57416: {Key: KeyClear}, // KP_SEPARATOR
331+
57417: {Key: KeyLeft}, // KP_LEFT
332+
57418: {Key: KeyRight}, // KP_RIGHT
333+
57419: {Key: KeyUp}, // KP_UP
334+
57420: {Key: KeyDown}, // KP_DOWN
335+
57421: {Key: KeyPgUp}, // KP_PG_UP
336+
57422: {Key: KeyPgDn}, // KP_PG_DN
337+
57423: {Key: KeyHome}, // KP_HOME
338+
57424: {Key: KeyEnd}, // KP_END
339+
57425: {Key: KeyInsert}, // KP_INSERT
340+
57426: {Key: KeyDelete}, // KP_DELETE
341+
// 57427: {Key: KeyBegin}, // KP_BEGIN
342+
313343
// TODO: Media keys
314344
}
315345

@@ -791,8 +821,8 @@ func (ip *inputProcessor) handleCsi(mode rune, params []byte, intermediate []byt
791821
key := KeyRune
792822
chr := rune(0)
793823
if k1, ok := csiUKeys[P0]; ok {
794-
key = k1
795-
chr = 0
824+
key = k1.Key
825+
chr = k1.Rune
796826
} else {
797827
chr = rune(P0)
798828
}

0 commit comments

Comments
 (0)