KeyMap Expansion
This commit is contained in:
62
keymap.go
62
keymap.go
@@ -23,27 +23,69 @@ package widgets
|
||||
|
||||
import "github.com/gdamore/tcell"
|
||||
|
||||
type KeyMap map[tcell.Key]func() bool
|
||||
type KeyMap struct {
|
||||
Keys map[tcell.Key]func(*tcell.EventKey) bool
|
||||
Runes map[rune]func(*tcell.EventKey) bool
|
||||
}
|
||||
|
||||
func BlankKeyMap() KeyMap {
|
||||
return KeyMap(make(map[tcell.Key]func() bool))
|
||||
return KeyMap{
|
||||
Keys: make(map[tcell.Key]func(*tcell.EventKey) bool),
|
||||
Runes: make(map[rune]func(*tcell.EventKey) bool),
|
||||
}
|
||||
}
|
||||
|
||||
func NewKeyMap(m map[tcell.Key]func() bool) KeyMap {
|
||||
return KeyMap(m)
|
||||
func NewKeyMap(m map[tcell.Key]func(*tcell.EventKey) bool) KeyMap {
|
||||
return KeyMap{
|
||||
Keys: m,
|
||||
Runes: make(map[rune]func(*tcell.EventKey) bool),
|
||||
}
|
||||
}
|
||||
|
||||
func (m KeyMap) Add(k tcell.Key, do func() bool) { m[k] = do }
|
||||
func NewRuneMap(m map[rune]func(*tcell.EventKey) bool) KeyMap {
|
||||
return KeyMap{
|
||||
Keys: make(map[tcell.Key]func(*tcell.EventKey) bool),
|
||||
Runes: m,
|
||||
}
|
||||
}
|
||||
|
||||
func (m KeyMap) Add(k tcell.Key, do func(*tcell.EventKey) bool) { m.Keys[k] = do }
|
||||
func (m KeyMap) Remove(k tcell.Key) {
|
||||
if _, ok := m[k]; ok {
|
||||
delete(m, k)
|
||||
if _, ok := m.Keys[k]; ok {
|
||||
delete(m.Keys, k)
|
||||
}
|
||||
}
|
||||
|
||||
func (m KeyMap) AddAll(all map[tcell.Key]func(*tcell.EventKey) bool) {
|
||||
for k, v := range all {
|
||||
m.Add(k, v)
|
||||
}
|
||||
}
|
||||
func (m KeyMap) AddRune(k rune, do func(*tcell.EventKey) bool) { m.Runes[k] = do }
|
||||
func (m KeyMap) RemoveRune(k rune) {
|
||||
if _, ok := m.Runes[k]; ok {
|
||||
delete(m.Runes, k)
|
||||
}
|
||||
}
|
||||
|
||||
func (m KeyMap) AddRunes(all map[rune]func(*tcell.EventKey) bool) {
|
||||
for k, v := range all {
|
||||
m.AddRune(k, v)
|
||||
}
|
||||
}
|
||||
|
||||
func (m KeyMap) Handle(ev *tcell.EventKey) bool {
|
||||
for k, v := range m {
|
||||
if ev.Key() == k {
|
||||
return v()
|
||||
if ev.Key() == tcell.KeyRune {
|
||||
for k, v := range m.Runes {
|
||||
if ev.Rune() == k {
|
||||
return v(ev)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for k, v := range m.Keys {
|
||||
if ev.Key() == k {
|
||||
return v(ev)
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
|
||||
Reference in New Issue
Block a user