@@ -135,8 +135,9 @@ type csiParamMode struct {
135135}
136136
137137type keyMap struct {
138- Key Key
139- Mod ModMask
138+ Key Key
139+ Mod ModMask
140+ Rune rune
140141}
141142
142143var 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