mirror of
https://github.com/walles/moar.git
synced 2024-12-01 15:03:08 +03:00
daafbcdac4
Ref: https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h3-C1-_8-Bit_-Control-Characters Fixes #138
70 lines
1.4 KiB
Go
70 lines
1.4 KiB
Go
package twin
|
|
|
|
type KeyCode uint16
|
|
|
|
const (
|
|
KeyEscape KeyCode = iota
|
|
KeyEnter
|
|
|
|
KeyBackspace
|
|
KeyDelete
|
|
|
|
KeyUp
|
|
KeyDown
|
|
KeyRight
|
|
KeyLeft
|
|
|
|
KeyAltUp
|
|
KeyAltDown
|
|
KeyAltRight
|
|
KeyAltLeft
|
|
|
|
KeyHome
|
|
KeyEnd
|
|
KeyPgUp
|
|
KeyPgDown
|
|
)
|
|
|
|
// Map incoming escape keystrokes to keycodes, used in consumeEncodedEvent() in
|
|
// screen.go.
|
|
//
|
|
// NOTE: If you put a single ESC character in here ('\x1b') it will be consumed
|
|
// by itself rather than as part of the sequence it belongs to, and parsing of
|
|
// all special sequences starting with ESC will break down.
|
|
//
|
|
// FIXME: Write a test preventing that from happening.
|
|
var escapeSequenceToKeyCode = map[string]KeyCode{
|
|
// NOTE: Please keep this list in the same order as the KeyCode const()
|
|
// section above.
|
|
|
|
// KeyEscape intentionally left out because it's too short, see comment
|
|
// above.
|
|
|
|
// KeyEnter intentionally left out because it's too short, see comment
|
|
// above.
|
|
|
|
"\x7f": KeyBackspace,
|
|
"\x1b[3~": KeyDelete,
|
|
|
|
"\x1b[A": KeyUp,
|
|
"\x1b[B": KeyDown,
|
|
"\x1b[C": KeyRight,
|
|
"\x1b[D": KeyLeft,
|
|
|
|
// Ref: https://github.com/walles/moar/issues/138#issuecomment-1579199274
|
|
"\x1bOA": KeyUp,
|
|
"\x1bOB": KeyDown,
|
|
"\x1bOC": KeyRight,
|
|
"\x1bOD": KeyLeft,
|
|
|
|
"\x1b\x1b[A": KeyAltUp, // Alt + up arrow
|
|
"\x1b\x1b[B": KeyAltDown, // Alt + down arrow
|
|
"\x1b\x1b[C": KeyAltRight, // Alt + right arrow
|
|
"\x1b\x1b[D": KeyAltLeft, // Alt + left arrow
|
|
|
|
"\x1b[H": KeyHome,
|
|
"\x1b[F": KeyEnd,
|
|
"\x1b[5~": KeyPgUp,
|
|
"\x1b[6~": KeyPgDown,
|
|
}
|