255 lines
2.6 KiB
Go
255 lines
2.6 KiB
Go
package vnc
|
|
|
|
import "fmt"
|
|
|
|
// Key represents a VNC key press.
|
|
type Key uint32
|
|
|
|
//go:generate stringer -type=Key
|
|
|
|
// Keys is a slice of Key values.
|
|
type Keys []Key
|
|
|
|
var keymap = map[rune]Key{
|
|
'-': Minus,
|
|
'0': Digit0,
|
|
'1': Digit1,
|
|
'2': Digit2,
|
|
'3': Digit3,
|
|
'4': Digit4,
|
|
'5': Digit5,
|
|
'6': Digit6,
|
|
'7': Digit7,
|
|
'8': Digit8,
|
|
'9': Digit9,
|
|
}
|
|
|
|
// IntToKeys returns Keys that represent the key presses required to type an int.
|
|
func IntToKeys(v int) Keys {
|
|
k := Keys{}
|
|
for _, c := range fmt.Sprintf("%d", v) {
|
|
k = append(k, keymap[c])
|
|
}
|
|
return k
|
|
}
|
|
|
|
// Latin 1 (byte 3 = 0)
|
|
// ISO/IEC 8859-1 = Unicode U+0020..U+00FF
|
|
const (
|
|
Space Key = iota + 0x0020
|
|
Exclaim // exclamation mark
|
|
QuoteDbl
|
|
NumberSign
|
|
Dollar
|
|
Percent
|
|
Ampersand
|
|
Apostrophe
|
|
ParenLeft
|
|
ParenRight
|
|
Asterisk
|
|
Plus
|
|
Comma
|
|
Minus
|
|
Period
|
|
Slash
|
|
Digit0
|
|
Digit1
|
|
Digit2
|
|
Digit3
|
|
Digit4
|
|
Digit5
|
|
Digit6
|
|
Digit7
|
|
Digit8
|
|
Digit9
|
|
Colon
|
|
Semicolon
|
|
Less
|
|
Equal
|
|
Greater
|
|
Question
|
|
At
|
|
A
|
|
B
|
|
C
|
|
D
|
|
E
|
|
F
|
|
G
|
|
H
|
|
I
|
|
J
|
|
K
|
|
L
|
|
M
|
|
N
|
|
O
|
|
P
|
|
Q
|
|
R
|
|
S
|
|
T
|
|
U
|
|
V
|
|
W
|
|
X
|
|
Y
|
|
Z
|
|
BracketLeft
|
|
Backslash
|
|
BracketRight
|
|
AsciiCircum
|
|
Underscore
|
|
Grave
|
|
SmallA
|
|
SmallB
|
|
SmallC
|
|
SmallD
|
|
SmallE
|
|
SmallF
|
|
SmallG
|
|
SmallH
|
|
SmallI
|
|
SmallJ
|
|
SmallK
|
|
SmallL
|
|
SmallM
|
|
SmallN
|
|
SmallO
|
|
SmallP
|
|
SmallQ
|
|
SmallR
|
|
SmallS
|
|
SmallT
|
|
SmallU
|
|
SmallV
|
|
SmallW
|
|
SmallX
|
|
SmallY
|
|
SmallZ
|
|
BraceLeft
|
|
Bar
|
|
BraceRight
|
|
AsciiTilde
|
|
)
|
|
|
|
const (
|
|
BackSpace Key = iota + 0xff08
|
|
Tab
|
|
Linefeed
|
|
Clear
|
|
_
|
|
Return
|
|
)
|
|
|
|
const (
|
|
Pause Key = iota + 0xff13
|
|
ScrollLock
|
|
SysReq
|
|
Escape Key = 0xff1b
|
|
Delete Key = 0xffff
|
|
)
|
|
|
|
const ( // Cursor control & motion.
|
|
Home Key = iota + 0xff50
|
|
Left
|
|
Up
|
|
Right
|
|
Down
|
|
PageUp
|
|
PageDown
|
|
End
|
|
Begin
|
|
)
|
|
|
|
const ( // Misc functions.
|
|
Select Key = 0xff60
|
|
Print
|
|
Execute
|
|
Insert
|
|
Undo
|
|
Redo
|
|
Menu
|
|
Find
|
|
Cancel
|
|
Help
|
|
Break
|
|
ModeSwitch Key = 0xff7e
|
|
NumLock Key = 0xff7f
|
|
)
|
|
|
|
const ( // Keypad functions.
|
|
KeypadSpace Key = 0xff80
|
|
KeypadTab Key = 0xff89
|
|
KeypadEnter Key = 0xff8d
|
|
)
|
|
|
|
const ( // Keypad functions cont.
|
|
KeypadF1 Key = iota + 0xff91
|
|
KeypadF2
|
|
KeypadF3
|
|
KeypadF4
|
|
KeypadHome
|
|
KeypadLeft
|
|
KeypadUp
|
|
KeypadRight
|
|
KeypadDown
|
|
KeypadPrior
|
|
KeypadPageUp
|
|
KeypadNext
|
|
KeypadPageDown
|
|
KeypadEnd
|
|
KeypadBegin
|
|
KeypadInsert
|
|
KeypadDelete
|
|
KeypadMultiply
|
|
KeypadAdd
|
|
KeypadSeparator
|
|
KeypadSubtract
|
|
KeypadDecimal
|
|
KeypadDivide
|
|
Keypad0
|
|
Keypad1
|
|
Keypad2
|
|
Keypad3
|
|
Keypad4
|
|
Keypad5
|
|
Keypad6
|
|
Keypad7
|
|
Keypad8
|
|
Keypad9
|
|
KeypadEqual Key = 0xffbd
|
|
)
|
|
|
|
const (
|
|
F1 Key = iota + 0xffbe
|
|
F2
|
|
F3
|
|
F4
|
|
F5
|
|
F6
|
|
F7
|
|
F8
|
|
F9
|
|
F10
|
|
F11
|
|
F12
|
|
)
|
|
|
|
const (
|
|
ShiftLeft Key = iota + 0xffe1
|
|
ShiftRight
|
|
ControlLeft
|
|
ControlRight
|
|
CapsLock
|
|
ShiftLock
|
|
MetaLeft
|
|
MetaRight
|
|
AltLeft
|
|
AltRight
|
|
SuperLeft
|
|
SuperRight
|
|
HyperLeft
|
|
HyperRight
|
|
)
|