forked from Mirrors/bubbletea
Catch a bunch of outlier alt-prefixed keystokes + home/end/pgup/pgdown
This commit is contained in:
parent
eefa9c7aa3
commit
0cb138f63d
36
key.go
36
key.go
|
@ -136,6 +136,10 @@ const (
|
||||||
KeyRight
|
KeyRight
|
||||||
KeyLeft
|
KeyLeft
|
||||||
KeyShiftTab
|
KeyShiftTab
|
||||||
|
KeyHome
|
||||||
|
KeyEnd
|
||||||
|
KeyPgUp
|
||||||
|
KeyPgDown
|
||||||
)
|
)
|
||||||
|
|
||||||
// Mapping for control keys to friendly consts
|
// Mapping for control keys to friendly consts
|
||||||
|
@ -181,6 +185,10 @@ var keyNames = map[int]string{
|
||||||
KeyRight: "right",
|
KeyRight: "right",
|
||||||
KeyLeft: "left",
|
KeyLeft: "left",
|
||||||
KeyShiftTab: "shift+tab",
|
KeyShiftTab: "shift+tab",
|
||||||
|
KeyHome: "home",
|
||||||
|
KeyEnd: "end",
|
||||||
|
KeyPgUp: "pgup",
|
||||||
|
KeyPgDown: "pgdown",
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mapping for sequences to consts
|
// Mapping for sequences to consts
|
||||||
|
@ -191,6 +199,26 @@ var sequences = map[string]KeyType{
|
||||||
"\x1b[D": KeyLeft,
|
"\x1b[D": KeyLeft,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Mapping for hex codes to consts. Unclear why these won't register as
|
||||||
|
// sequences.
|
||||||
|
var hexes = map[string]Key{
|
||||||
|
"1b5b5a": Key{Type: KeyShiftTab},
|
||||||
|
"1b0d": Key{Alt: true, Type: KeyEnter},
|
||||||
|
"1b7f": Key{Alt: true, Type: KeyDelete},
|
||||||
|
"1b5b48": Key{Type: KeyHome},
|
||||||
|
"1b5b313b3348": Key{Alt: true, Type: KeyHome},
|
||||||
|
"1b5b46": Key{Type: KeyEnd},
|
||||||
|
"1b5b313b3346": Key{Alt: true, Type: KeyEnd},
|
||||||
|
"1b5b357e": Key{Type: KeyPgUp},
|
||||||
|
"1b5b353b337e": Key{Alt: true, Type: KeyPgUp},
|
||||||
|
"1b5b367e": Key{Type: KeyPgDown},
|
||||||
|
"1b5b363b337e": Key{Alt: true, Type: KeyPgDown},
|
||||||
|
"1b5b313b3341": Key{Alt: true, Type: KeyUp},
|
||||||
|
"1b5b313b3342": Key{Alt: true, Type: KeyDown},
|
||||||
|
"1b5b313b3343": Key{Alt: true, Type: KeyRight},
|
||||||
|
"1b5b313b3344": Key{Alt: true, Type: KeyLeft},
|
||||||
|
}
|
||||||
|
|
||||||
// ReadKey reads keypress input from a TTY and returns a string representation
|
// ReadKey reads keypress input from a TTY and returns a string representation
|
||||||
// of a key
|
// of a key
|
||||||
func ReadKey(r io.Reader) (Key, error) {
|
func ReadKey(r io.Reader) (Key, error) {
|
||||||
|
@ -202,9 +230,11 @@ func ReadKey(r io.Reader) (Key, error) {
|
||||||
return Key{}, err
|
return Key{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Shift+tab needs some very special handling
|
hex := fmt.Sprintf("%x", buf[:numBytes])
|
||||||
if "1b5b5a" == fmt.Sprintf("%x", buf[:numBytes]) {
|
|
||||||
return Key{Type: KeyShiftTab}, nil
|
// Some of these need special handling
|
||||||
|
if k, ok := hexes[hex]; ok {
|
||||||
|
return k, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get unicode value
|
// Get unicode value
|
||||||
|
|
Loading…
Reference in New Issue