Add support for ctrl+, ctrl+shift+ for home/end keys

This commit is contained in:
Raphael 'kena' Poss 2022-08-19 14:28:56 +02:00 committed by Christian Muehlhaeuser
parent 5f76c2036d
commit d9b2889cf4
1 changed files with 47 additions and 9 deletions

56
key.go
View File

@ -205,14 +205,20 @@ const (
KeyCtrlDown KeyCtrlDown
KeyCtrlRight KeyCtrlRight
KeyCtrlLeft KeyCtrlLeft
KeyCtrlHome
KeyCtrlEnd
KeyShiftUp KeyShiftUp
KeyShiftDown KeyShiftDown
KeyShiftRight KeyShiftRight
KeyShiftLeft KeyShiftLeft
KeyShiftHome
KeyShiftEnd
KeyCtrlShiftUp KeyCtrlShiftUp
KeyCtrlShiftDown KeyCtrlShiftDown
KeyCtrlShiftLeft KeyCtrlShiftLeft
KeyCtrlShiftRight KeyCtrlShiftRight
KeyCtrlShiftHome
KeyCtrlShiftEnd
KeyF1 KeyF1
KeyF2 KeyF2
KeyF3 KeyF3
@ -282,6 +288,12 @@ var keyNames = map[KeyType]string{
KeyShiftTab: "shift+tab", KeyShiftTab: "shift+tab",
KeyHome: "home", KeyHome: "home",
KeyEnd: "end", KeyEnd: "end",
KeyCtrlHome: "ctrl+home",
KeyCtrlEnd: "ctrl+end",
KeyShiftHome: "shift+home",
KeyShiftEnd: "shift+end",
KeyCtrlShiftHome: "ctrl+shift+home",
KeyCtrlShiftEnd: "ctrl+shift+end",
KeyPgUp: "pgup", KeyPgUp: "pgup",
KeyPgDown: "pgdown", KeyPgDown: "pgdown",
KeyDelete: "delete", KeyDelete: "delete",
@ -392,16 +404,42 @@ var sequences = map[string]Key{
"\x1b\x1b[6~": {Type: KeyPgDown, Alt: true}, // urxvt "\x1b\x1b[6~": {Type: KeyPgDown, Alt: true}, // urxvt
"\x1b[1~": {Type: KeyHome}, "\x1b[1~": {Type: KeyHome},
"\x1b[H": {Type: KeyHome}, // vt100 "\x1b[H": {Type: KeyHome}, // xterm, lxterm
"\x1b[1;3H": {Type: KeyHome, Alt: true}, // vt100 "\x1b[1;3H": {Type: KeyHome, Alt: true}, // xterm, lxterm
"\x1b[4~": {Type: KeyEnd}, "\x1b[1;5H": {Type: KeyCtrlHome}, // xterm, lxterm
"\x1b[F": {Type: KeyEnd}, // vt100 "\x1b[1;7H": {Type: KeyCtrlHome, Alt: true}, // xterm, lxterm
"\x1b[1;3F": {Type: KeyEnd, Alt: true}, // vt100 "\x1b[1;2H": {Type: KeyShiftHome}, // xterm, lxterm
"\x1b[1;4H": {Type: KeyShiftHome, Alt: true}, // xterm, lxterm
"\x1b[1;6H": {Type: KeyCtrlShiftHome}, // xterm, lxterm
"\x1b[1;8H": {Type: KeyCtrlShiftHome, Alt: true}, // xterm, lxterm
"\x1b[7~": {Type: KeyHome}, // urxvt "\x1b[4~": {Type: KeyEnd},
"\x1b\x1b[7~": {Type: KeyHome, Alt: true}, // urxvt "\x1b[F": {Type: KeyEnd}, // xterm, lxterm
"\x1b[8~": {Type: KeyEnd}, // urxvt "\x1b[1;3F": {Type: KeyEnd, Alt: true}, // xterm, lxterm
"\x1b\x1b[8~": {Type: KeyEnd, Alt: true}, // urxvt "\x1b[1;5F": {Type: KeyCtrlEnd}, // xterm, lxterm
"\x1b[1;7F": {Type: KeyCtrlEnd, Alt: true}, // xterm, lxterm
"\x1b[1;2F": {Type: KeyShiftEnd}, // xterm, lxterm
"\x1b[1;4F": {Type: KeyShiftEnd, Alt: true}, // xterm, lxterm
"\x1b[1;6F": {Type: KeyCtrlShiftEnd}, // xterm, lxterm
"\x1b[1;8F": {Type: KeyCtrlShiftEnd, Alt: true}, // xterm, lxterm
"\x1b[7~": {Type: KeyHome}, // urxvt
"\x1b\x1b[7~": {Type: KeyHome, Alt: true}, // urxvt
"\x1b[7^": {Type: KeyCtrlHome}, // urxvt
"\x1b\x1b[7^": {Type: KeyCtrlHome, Alt: true}, // urxvt
"\x1b[7$": {Type: KeyShiftHome}, // urxvt
"\x1b\x1b[7$": {Type: KeyShiftHome, Alt: true}, // urxvt
"\x1b[7@": {Type: KeyCtrlShiftHome}, // urxvt
"\x1b\x1b[7@": {Type: KeyCtrlShiftHome, Alt: true}, // urxvt
"\x1b[8~": {Type: KeyEnd}, // urxvt
"\x1b\x1b[8~": {Type: KeyEnd, Alt: true}, // urxvt
"\x1b[8^": {Type: KeyCtrlEnd}, // urxvt
"\x1b\x1b[8^": {Type: KeyCtrlEnd, Alt: true}, // urxvt
"\x1b[8$": {Type: KeyShiftEnd}, // urxvt
"\x1b\x1b[8$": {Type: KeyShiftEnd, Alt: true}, // urxvt
"\x1b[8@": {Type: KeyCtrlShiftEnd}, // urxvt
"\x1b\x1b[8@": {Type: KeyCtrlShiftEnd, Alt: true}, // urxvt
// Function keys, Linux console // Function keys, Linux console
"\x1b[[A": {Type: KeyF1}, // linux console "\x1b[[A": {Type: KeyF1}, // linux console