Reworking Keymaps

This commit is contained in:
2025-10-26 08:47:07 -05:00
parent cf47b5a4e4
commit d63e3a414a
30 changed files with 384 additions and 715 deletions

View File

@@ -44,10 +44,10 @@ type SimpleList struct {
list []string
itemsStyle map[int]tcell.Style
onChange func(int, string) bool
onSelect func(int, string) bool
keyMap, customKeyMap KeyMap
vimMode bool
onChange func(int, string) bool
onSelect func(int, string) bool
keyMap *KeyMap
vimMode bool
logger func(string, ...any)
}
@@ -64,49 +64,48 @@ func (w *SimpleList) Init(id string, style tcell.Style) {
w.id = id
w.style = style
w.focusable = true
w.keyMap = NewKeyMap(map[tcell.Key]func(ev *tcell.EventKey) bool{
tcell.KeyUp: func(_ *tcell.EventKey) bool { return w.MoveUp() },
tcell.KeyDown: func(_ *tcell.EventKey) bool { return w.MoveDown() },
tcell.KeyEnter: func(ev *tcell.EventKey) bool {
w.keyMap = NewKeyMap(
NewKey(BuildEK(tcell.KeyUp), func(_ *tcell.EventKey) bool { return w.MoveUp() }),
NewKey(BuildEK(tcell.KeyDown), func(_ *tcell.EventKey) bool { return w.MoveDown() }),
NewKey(BuildEK(tcell.KeyEnter), func(ev *tcell.EventKey) bool {
if w.onSelect != nil && w.cursor < len(w.list) {
return w.onSelect(w.cursor, w.list[w.cursor])
}
return false
},
tcell.KeyPgDn: func(_ *tcell.EventKey) bool { return w.PageDn() },
tcell.KeyPgUp: func(_ *tcell.EventKey) bool { return w.PageUp() },
})
w.keyMap.AddRune('j', func(ev *tcell.EventKey) bool {
if !w.vimMode {
}),
NewKey(BuildEK(tcell.KeyPgDn), func(_ *tcell.EventKey) bool { return w.PageDn() }),
NewKey(BuildEK(tcell.KeyPgUp), func(_ *tcell.EventKey) bool { return w.PageUp() }),
NewKey(BuildEKr('j'), func(ev *tcell.EventKey) bool {
if !w.vimMode {
return false
}
return w.MoveDown()
}),
NewKey(BuildEKr('k'), func(ev *tcell.EventKey) bool {
if !w.vimMode {
return false
}
return w.MoveUp()
}),
NewKey(BuildEKr('b'), func(ev *tcell.EventKey) bool {
if !w.vimMode {
return false
}
if ev.Modifiers()&tcell.ModCtrl != 0 {
return w.PageUp()
}
return false
}
return w.MoveDown()
})
w.keyMap.AddRune('k', func(ev *tcell.EventKey) bool {
if !w.vimMode {
}),
NewKey(BuildEKr('f'), func(ev *tcell.EventKey) bool {
if !w.vimMode {
return false
}
if ev.Modifiers()&tcell.ModCtrl != 0 {
return w.PageDn()
}
return false
}
return w.MoveUp()
})
w.keyMap.AddRune('b', func(ev *tcell.EventKey) bool {
if !w.vimMode {
return false
}
if ev.Modifiers()&tcell.ModCtrl != 0 {
return w.PageUp()
}
return false
})
w.keyMap.AddRune('f', func(ev *tcell.EventKey) bool {
if !w.vimMode {
return false
}
if ev.Modifiers()&tcell.ModCtrl != 0 {
return w.PageDn()
}
return false
})
w.customKeyMap = BlankKeyMap()
}),
)
w.itemsStyle = make(map[int]tcell.Style)
w.focusable = true
}
@@ -114,29 +113,14 @@ func (w *SimpleList) Init(id string, style tcell.Style) {
func (w *SimpleList) Id() string { return w.id }
func (w *SimpleList) HandleResize(ev *tcell.EventResize) { w.w, w.h = ev.Size() }
func (w *SimpleList) SetKeyMap(km KeyMap, def bool) {
if def {
w.keyMap = km
} else {
w.customKeyMap = km
}
}
func (w *SimpleList) AddToKeyMap(km KeyMap) { w.customKeyMap.Merge(km) }
func (w *SimpleList) RemoveFromKeyMap(km KeyMap) {
for k := range km.Keys {
w.customKeyMap.Remove(k)
}
for r := range km.Runes {
w.customKeyMap.RemoveRune(r)
}
}
func (w *SimpleList) GetKeyMap() *KeyMap { return w.keyMap }
func (w *SimpleList) SetKeyMap(km *KeyMap) { w.keyMap = km }
func (w *SimpleList) HandleKey(ev *tcell.EventKey) bool {
if !w.active || !w.focusable {
return false
}
b1, b2 := w.keyMap.Handle(ev), w.customKeyMap.Handle(ev)
return b1 || b2
return w.keyMap.Handle(ev)
}
func (w *SimpleList) HandleTime(ev *tcell.EventTime) {}
@@ -294,10 +278,10 @@ func (w *SimpleList) PageUp() bool {
func (w *SimpleList) PageDn() bool {
w.cursor += w.h
if len(w.border) > 0 {
w.cursor -= 2
w.cursor -= 1
}
if w.cursor > len(w.list)-2 {
w.cursor = len(w.list) - 2
if w.cursor > len(w.list)-1 {
w.cursor = len(w.list) - 1
}
return true
}