Add key mapping
This commit is contained in:
parent
347c448da8
commit
b1d9b38a82
254
prompt/key.go
Normal file
254
prompt/key.go
Normal file
@ -0,0 +1,254 @@
|
|||||||
|
package prompt
|
||||||
|
|
||||||
|
type Key int
|
||||||
|
|
||||||
|
const (
|
||||||
|
Escape Key = iota
|
||||||
|
|
||||||
|
ControlA
|
||||||
|
ControlB
|
||||||
|
ControlC
|
||||||
|
ControlD
|
||||||
|
ControlE
|
||||||
|
ControlF
|
||||||
|
ControlG
|
||||||
|
ControlH
|
||||||
|
ControlI
|
||||||
|
ControlJ
|
||||||
|
ControlK
|
||||||
|
ControlL
|
||||||
|
ControlM
|
||||||
|
ControlN
|
||||||
|
ControlO
|
||||||
|
ControlP
|
||||||
|
ControlQ
|
||||||
|
ControlR
|
||||||
|
ControlS
|
||||||
|
ControlT
|
||||||
|
ControlU
|
||||||
|
ControlV
|
||||||
|
ControlW
|
||||||
|
ControlX
|
||||||
|
ControlY
|
||||||
|
ControlZ
|
||||||
|
|
||||||
|
ControlSpace
|
||||||
|
ControlBackslash
|
||||||
|
ControlSquareClose
|
||||||
|
ControlCircumflex
|
||||||
|
ControlUnderscore
|
||||||
|
ControlLeft
|
||||||
|
ControlRight
|
||||||
|
ControlUp
|
||||||
|
ControlDown
|
||||||
|
|
||||||
|
Up
|
||||||
|
Down
|
||||||
|
Right
|
||||||
|
Left
|
||||||
|
|
||||||
|
ShiftLeft
|
||||||
|
ShiftUp
|
||||||
|
ShiftDown
|
||||||
|
ShiftRight
|
||||||
|
|
||||||
|
Home
|
||||||
|
End
|
||||||
|
Delete
|
||||||
|
ShiftDelete
|
||||||
|
ControlDelete
|
||||||
|
PageUp
|
||||||
|
PageDown
|
||||||
|
BackTab
|
||||||
|
Insert
|
||||||
|
Backspace
|
||||||
|
|
||||||
|
// Aliases.
|
||||||
|
Tab
|
||||||
|
Enter
|
||||||
|
// Actually Enter equals ControlM, not ControlJ,
|
||||||
|
// However, in prompt_toolkit, we made the mistake of translating
|
||||||
|
// \r into \n during the input, so everyone is now handling the
|
||||||
|
// enter key by binding ControlJ.
|
||||||
|
|
||||||
|
// From now on, it's better to bind `ASCII_SEQUENCES.Enter` everywhere,
|
||||||
|
// because that's future compatible, and will still work when we
|
||||||
|
// stop replacing \r by \n.
|
||||||
|
|
||||||
|
F1
|
||||||
|
F2
|
||||||
|
F3
|
||||||
|
F4
|
||||||
|
F5
|
||||||
|
F6
|
||||||
|
F7
|
||||||
|
F8
|
||||||
|
F9
|
||||||
|
F10
|
||||||
|
F11
|
||||||
|
F12
|
||||||
|
F13
|
||||||
|
F14
|
||||||
|
F15
|
||||||
|
F16
|
||||||
|
F17
|
||||||
|
F18
|
||||||
|
F19
|
||||||
|
F20
|
||||||
|
F21
|
||||||
|
F22
|
||||||
|
F23
|
||||||
|
F24
|
||||||
|
|
||||||
|
// Matches any key.
|
||||||
|
Any
|
||||||
|
|
||||||
|
// Special
|
||||||
|
CPRResponse
|
||||||
|
Vt100MouseEvent
|
||||||
|
WindowsMouseEvent
|
||||||
|
BracketedPaste
|
||||||
|
|
||||||
|
// Key which is ignored. (The key binding for this key should not do anything.)
|
||||||
|
Ignore
|
||||||
|
)
|
||||||
|
|
||||||
|
type ASCIICode struct {
|
||||||
|
Key Key
|
||||||
|
ASCIICode []byte
|
||||||
|
}
|
||||||
|
|
||||||
|
var ASCII_SEQUENCES []*ASCIICode = []*ASCIICode{
|
||||||
|
&ASCIICode{Key: Escape, ASCIICode: []byte{0x1b}},
|
||||||
|
|
||||||
|
&ASCIICode{Key: ControlSpace, ASCIICode: []byte{0x00}},
|
||||||
|
&ASCIICode{Key: ControlA, ASCIICode: []byte{0x1}},
|
||||||
|
&ASCIICode{Key: ControlB, ASCIICode: []byte{0x2}},
|
||||||
|
&ASCIICode{Key: ControlC, ASCIICode: []byte{0x3}},
|
||||||
|
&ASCIICode{Key: ControlD, ASCIICode: []byte{0x4}},
|
||||||
|
&ASCIICode{Key: ControlE, ASCIICode: []byte{0x5}},
|
||||||
|
&ASCIICode{Key: ControlF, ASCIICode: []byte{0x6}},
|
||||||
|
&ASCIICode{Key: ControlG, ASCIICode: []byte{0x7}},
|
||||||
|
&ASCIICode{Key: ControlH, ASCIICode: []byte{0x8}},
|
||||||
|
&ASCIICode{Key: ControlI, ASCIICode: []byte{0x9}},
|
||||||
|
&ASCIICode{Key: ControlJ, ASCIICode: []byte{0xa}},
|
||||||
|
&ASCIICode{Key: ControlK, ASCIICode: []byte{0xb}},
|
||||||
|
&ASCIICode{Key: ControlL, ASCIICode: []byte{0xc}},
|
||||||
|
&ASCIICode{Key: ControlM, ASCIICode: []byte{0xd}},
|
||||||
|
&ASCIICode{Key: ControlN, ASCIICode: []byte{0xe}},
|
||||||
|
&ASCIICode{Key: ControlO, ASCIICode: []byte{0xf}},
|
||||||
|
&ASCIICode{Key: ControlP, ASCIICode: []byte{0x10}},
|
||||||
|
&ASCIICode{Key: ControlQ, ASCIICode: []byte{0x11}},
|
||||||
|
&ASCIICode{Key: ControlR, ASCIICode: []byte{0x12}},
|
||||||
|
&ASCIICode{Key: ControlS, ASCIICode: []byte{0x13}},
|
||||||
|
&ASCIICode{Key: ControlT, ASCIICode: []byte{0x14}},
|
||||||
|
&ASCIICode{Key: ControlU, ASCIICode: []byte{0x15}},
|
||||||
|
&ASCIICode{Key: ControlV, ASCIICode: []byte{0x16}},
|
||||||
|
&ASCIICode{Key: ControlW, ASCIICode: []byte{0x17}},
|
||||||
|
&ASCIICode{Key: ControlX, ASCIICode: []byte{0x18}},
|
||||||
|
&ASCIICode{Key: ControlY, ASCIICode: []byte{0x19}},
|
||||||
|
&ASCIICode{Key: ControlZ, ASCIICode: []byte{0x1a}},
|
||||||
|
|
||||||
|
&ASCIICode{Key: ControlBackslash, ASCIICode: []byte{0x1c}},
|
||||||
|
&ASCIICode{Key: ControlSquareClose, ASCIICode: []byte{0x1d}},
|
||||||
|
&ASCIICode{Key: ControlCircumflex, ASCIICode: []byte{0x1e}},
|
||||||
|
&ASCIICode{Key: ControlUnderscore, ASCIICode: []byte{0x1f}},
|
||||||
|
&ASCIICode{Key: Backspace, ASCIICode: []byte{0x7f}},
|
||||||
|
|
||||||
|
&ASCIICode{Key: Up, ASCIICode: []byte{0x1b, 0x5b, 0x41}},
|
||||||
|
&ASCIICode{Key: Down, ASCIICode: []byte{0x1b, 0x5b, 0x42}},
|
||||||
|
&ASCIICode{Key: Right, ASCIICode: []byte{0x1b, 0x5b, 0x43}},
|
||||||
|
&ASCIICode{Key: Left, ASCIICode: []byte{0x1b, 0x5b, 0x44}},
|
||||||
|
&ASCIICode{Key: Home, ASCIICode: []byte{0x1b, 0x5b, 0x48}},
|
||||||
|
&ASCIICode{Key: Home, ASCIICode: []byte{0x1b, 0x4f, 0x48}},
|
||||||
|
&ASCIICode{Key: End, ASCIICode: []byte{0x1b, 0x5b, 0x70}},
|
||||||
|
&ASCIICode{Key: End, ASCIICode: []byte{0x1b, 0x4f, 0x70}},
|
||||||
|
|
||||||
|
&ASCIICode{Key: Delete, ASCIICode: []byte{0x1b, 0x5b, 0x33, 0x7e}},
|
||||||
|
&ASCIICode{Key: ShiftDelete, ASCIICode: []byte{0x1b, 0x5b, 0x33, 0x3b, 0x02, 0x7e}},
|
||||||
|
&ASCIICode{Key: ControlDelete, ASCIICode: []byte{0x1b, 0x5b, 0x33, 0x3b, 0x05, 0x7e}},
|
||||||
|
&ASCIICode{Key: Home, ASCIICode: []byte{0x1b, 0x5b, 0x01, 0x7e}},
|
||||||
|
&ASCIICode{Key: End, ASCIICode: []byte{0x1b, 0x5b, 0x04, 0x7e}},
|
||||||
|
&ASCIICode{Key: PageUp, ASCIICode: []byte{0x1b, 0x5b, 0x05, 0x7e}},
|
||||||
|
&ASCIICode{Key: PageDown, ASCIICode: []byte{0x1b, 0x5b, 0x06, 0x7e}},
|
||||||
|
&ASCIICode{Key: Home, ASCIICode: []byte{0x1b, 0x5b, 0x07, 0x7e}},
|
||||||
|
&ASCIICode{Key: End, ASCIICode: []byte{0x1b, 0x5b, 0x09, 0x7e}},
|
||||||
|
&ASCIICode{Key: BackTab, ASCIICode: []byte{0x1b, 0x5b, 0x5a}},
|
||||||
|
&ASCIICode{Key: Insert, ASCIICode: []byte{0x1b, 0x5b, 0x02, 0x7e}},
|
||||||
|
|
||||||
|
&ASCIICode{Key: F1, ASCIICode: []byte{0x1b, 0x4f, 0x50}},
|
||||||
|
&ASCIICode{Key: F2, ASCIICode: []byte{0x1b, 0x4f, 0x51}},
|
||||||
|
&ASCIICode{Key: F3, ASCIICode: []byte{0x1b, 0x4f, 0x52}},
|
||||||
|
&ASCIICode{Key: F4, ASCIICode: []byte{0x1b, 0x4f, 0x53}},
|
||||||
|
|
||||||
|
&ASCIICode{Key: F1, ASCIICode: []byte{0x1b, 0x4f, 0x50, 0x41}}, // Linux console
|
||||||
|
&ASCIICode{Key: F2, ASCIICode: []byte{0x1b, 0x5b, 0x5b, 0x42}}, // Linux console
|
||||||
|
&ASCIICode{Key: F3, ASCIICode: []byte{0x1b, 0x5b, 0x5b, 0x43}}, // Linux console
|
||||||
|
&ASCIICode{Key: F4, ASCIICode: []byte{0x1b, 0x5b, 0x5b, 0x44}}, // Linux console
|
||||||
|
&ASCIICode{Key: F5, ASCIICode: []byte{0x1b, 0x5b, 0x5b, 0x45}}, // Linux console
|
||||||
|
|
||||||
|
&ASCIICode{Key: F1, ASCIICode: []byte{0x1b, 0x5b, 0x11, 0x7e}}, // rxvt-unicode
|
||||||
|
&ASCIICode{Key: F2, ASCIICode: []byte{0x1b, 0x5b, 0x12, 0x7e}}, // rxvt-unicode
|
||||||
|
&ASCIICode{Key: F3, ASCIICode: []byte{0x1b, 0x5b, 0x13, 0x7e}}, // rxvt-unicode
|
||||||
|
&ASCIICode{Key: F4, ASCIICode: []byte{0x1b, 0x5b, 0x14, 0x7e}}, // rxvt-unicode
|
||||||
|
|
||||||
|
&ASCIICode{Key: F5, ASCIICode: []byte{0x1b, 0x5b, 0x31, 0x35, 0x7e}},
|
||||||
|
&ASCIICode{Key: F6, ASCIICode: []byte{0x1b, 0x5b, 0x31, 0x37, 0x7e}},
|
||||||
|
&ASCIICode{Key: F7, ASCIICode: []byte{0x1b, 0x5b, 0x31, 0x38, 0x7e}},
|
||||||
|
&ASCIICode{Key: F8, ASCIICode: []byte{0x1b, 0x5b, 0x31, 0x39, 0x7e}},
|
||||||
|
&ASCIICode{Key: F9, ASCIICode: []byte{0x1b, 0x5b, 0x32, 0x30, 0x7e}},
|
||||||
|
&ASCIICode{Key: F10, ASCIICode: []byte{0x1b, 0x5b, 0x32, 0x31, 0x7e}},
|
||||||
|
&ASCIICode{Key: F11, ASCIICode: []byte{0x1b, 0x5b, 0x32, 0x32, 0x7e}},
|
||||||
|
&ASCIICode{Key: F12, ASCIICode: []byte{0x1b, 0x5b, 0x32, 0x34, 0x7e, 0x8}},
|
||||||
|
&ASCIICode{Key: F13, ASCIICode: []byte{0x1b, 0x5b, 0x25, 0x7e}},
|
||||||
|
&ASCIICode{Key: F14, ASCIICode: []byte{0x1b, 0x5b, 0x26, 0x7e}},
|
||||||
|
&ASCIICode{Key: F15, ASCIICode: []byte{0x1b, 0x5b, 0x28, 0x7e}},
|
||||||
|
&ASCIICode{Key: F16, ASCIICode: []byte{0x1b, 0x5b, 0x29, 0x7e}},
|
||||||
|
&ASCIICode{Key: F17, ASCIICode: []byte{0x1b, 0x5b, 0x31, 0x7e}},
|
||||||
|
&ASCIICode{Key: F18, ASCIICode: []byte{0x1b, 0x5b, 0x32, 0x7e}},
|
||||||
|
&ASCIICode{Key: F19, ASCIICode: []byte{0x1b, 0x5b, 0x33, 0x7e}},
|
||||||
|
&ASCIICode{Key: F20, ASCIICode: []byte{0x1b, 0x5b, 0x34, 0x7e}},
|
||||||
|
|
||||||
|
// Xterm
|
||||||
|
&ASCIICode{Key: F13, ASCIICode: []byte{0x1b, 0x5b, 0x01, 0x3b, 0x02, 0x50}},
|
||||||
|
&ASCIICode{Key: F14, ASCIICode: []byte{0x1b, 0x5b, 0x01, 0x3b, 0x02, 0x51}},
|
||||||
|
// &ASCIICode{Key: F15, ASCIICode: []byte{0x1b, 0x5b, 0x01, 0x3b, 0x02, 0x52}}, // Conflicts with CPR response
|
||||||
|
&ASCIICode{Key: F16, ASCIICode: []byte{0x1b, 0x5b, 0x01, 0x3b, 0x02, 0x52}},
|
||||||
|
&ASCIICode{Key: F17, ASCIICode: []byte{0x1b, 0x5b, 0x15, 0x3b, 0x02, 0x7e}},
|
||||||
|
&ASCIICode{Key: F18, ASCIICode: []byte{0x1b, 0x5b, 0x17, 0x3b, 0x02, 0x7e}},
|
||||||
|
&ASCIICode{Key: F19, ASCIICode: []byte{0x1b, 0x5b, 0x18, 0x3b, 0x02, 0x7e}},
|
||||||
|
&ASCIICode{Key: F20, ASCIICode: []byte{0x1b, 0x5b, 0x19, 0x3b, 0x02, 0x7e}},
|
||||||
|
&ASCIICode{Key: F21, ASCIICode: []byte{0x1b, 0x5b, 0x20, 0x3b, 0x02, 0x7e}},
|
||||||
|
&ASCIICode{Key: F22, ASCIICode: []byte{0x1b, 0x5b, 0x21, 0x3b, 0x02, 0x7e}},
|
||||||
|
&ASCIICode{Key: F23, ASCIICode: []byte{0x1b, 0x5b, 0x23, 0x3b, 0x02, 0x7e}},
|
||||||
|
&ASCIICode{Key: F24, ASCIICode: []byte{0x1b, 0x5b, 0x24, 0x3b, 0x02, 0x7e}},
|
||||||
|
|
||||||
|
&ASCIICode{Key: ControlUp, ASCIICode: []byte{0x1b, 0x5b, 0x01, 0x3b, 0x5a}},
|
||||||
|
&ASCIICode{Key: ControlDown, ASCIICode: []byte{0x1b, 0x5b, 0x01, 0x3b, 0x5b}},
|
||||||
|
&ASCIICode{Key: ControlRight, ASCIICode: []byte{0x1b, 0x5b, 0x01, 0x3b, 0x5c}},
|
||||||
|
&ASCIICode{Key: ControlLeft, ASCIICode: []byte{0x1b, 0x5b, 0x01, 0x3b, 0x5d}},
|
||||||
|
|
||||||
|
&ASCIICode{Key: ShiftUp, ASCIICode: []byte{0x1b, 0x5b, 0x01, 0x2a}},
|
||||||
|
&ASCIICode{Key: ShiftDown, ASCIICode: []byte{0x1b, 0x5b, 0x01, 0x2b}},
|
||||||
|
&ASCIICode{Key: ShiftRight, ASCIICode: []byte{0x1b, 0x5b, 0x01, 0x2c}},
|
||||||
|
&ASCIICode{Key: ShiftLeft, ASCIICode: []byte{0x1b, 0x5b, 0x01, 0x2d}},
|
||||||
|
|
||||||
|
// Tmux sends following keystrokes when control+arrow is pressed, but for
|
||||||
|
// Emacs ansi-term sends the same sequences for normal arrow keys. Consider
|
||||||
|
// it a normal arrow press, because that's more important.
|
||||||
|
&ASCIICode{Key: Up, ASCIICode: []byte{0x1b, 0x4f, 0x41}},
|
||||||
|
&ASCIICode{Key: Down, ASCIICode: []byte{0x1b, 0x4f, 0x42}},
|
||||||
|
&ASCIICode{Key: Right, ASCIICode: []byte{0x1b, 0x4f, 0x43}},
|
||||||
|
&ASCIICode{Key: Left, ASCIICode: []byte{0x1b, 0x4f, 0x44}},
|
||||||
|
|
||||||
|
&ASCIICode{Key: ControlUp, ASCIICode: []byte{0x1b, 0x5b, 0x05, 0x41}},
|
||||||
|
&ASCIICode{Key: ControlDown, ASCIICode: []byte{0x1b, 0x5b, 0x05, 0x42}},
|
||||||
|
&ASCIICode{Key: ControlRight, ASCIICode: []byte{0x1b, 0x5b, 0x05, 0x43}},
|
||||||
|
&ASCIICode{Key: ControlLeft, ASCIICode: []byte{0x1b, 0x5b, 0x05, 0x44}},
|
||||||
|
|
||||||
|
&ASCIICode{Key: ControlRight, ASCIICode: []byte{0x1b, 0x5b, 0x4f, 0x63}}, // rxvt
|
||||||
|
&ASCIICode{Key: ControlLeft, ASCIICode: []byte{0x1b, 0x5b, 0x4f, 0x64}}, // rxvt
|
||||||
|
|
||||||
|
&ASCIICode{Key: Ignore, ASCIICode: []byte{0x1b, 0x5b, 0x45}}, // Xterm
|
||||||
|
&ASCIICode{Key: Ignore, ASCIICode: []byte{0x1b, 0x5b, 0x46}}, // Linux console
|
||||||
|
}
|
16
prompt/key_string.go
Normal file
16
prompt/key_string.go
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
// Code generated by "stringer -type Key key.go"; DO NOT EDIT
|
||||||
|
|
||||||
|
package prompt
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
const _Key_name = "EscapeControlAControlBControlCControlDControlEControlFControlGControlHControlIControlJControlKControlLControlMControlNControlOControlPControlQControlRControlSControlTControlUControlVControlWControlXControlYControlZControlSpaceControlBackslashControlSquareCloseControlCircumflexControlUnderscoreControlLeftControlRightControlUpControlDownUpDownRightLeftShiftLeftShiftUpShiftDownShiftRightHomeEndDeleteShiftDeleteControlDeletePageUpPageDownBackTabInsertBackspaceTabEnterF1F2F3F4F5F6F7F8F9F10F11F12F13F14F15F16F17F18F19F20F21F22F23F24AnyCPRResponseVt100MouseEventWindowsMouseEventBracketedPasteIgnore"
|
||||||
|
|
||||||
|
var _Key_index = [...]uint16{0, 6, 14, 22, 30, 38, 46, 54, 62, 70, 78, 86, 94, 102, 110, 118, 126, 134, 142, 150, 158, 166, 174, 182, 190, 198, 206, 214, 226, 242, 260, 277, 294, 305, 317, 326, 337, 339, 343, 348, 352, 361, 368, 377, 387, 391, 394, 400, 411, 424, 430, 438, 445, 451, 460, 463, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 489, 492, 495, 498, 501, 504, 507, 510, 513, 516, 519, 522, 525, 528, 531, 534, 545, 560, 577, 591, 597}
|
||||||
|
|
||||||
|
func (i Key) String() string {
|
||||||
|
if i < 0 || i >= Key(len(_Key_index)-1) {
|
||||||
|
return fmt.Sprintf("Key(%d)", i)
|
||||||
|
}
|
||||||
|
return _Key_name[_Key_index[i]:_Key_index[i+1]]
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user