Reworking Keymaps
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user