KeyMap Expansion

This commit is contained in:
2025-07-31 13:31:14 -05:00
parent 174fab2c6d
commit 9e88799391
7 changed files with 111 additions and 54 deletions

View File

@@ -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