Wonkiness on layout

This commit is contained in:
2025-10-10 16:46:29 -05:00
parent 79a212e601
commit 7a1afd67ac
28 changed files with 362 additions and 156 deletions

View File

@@ -50,7 +50,7 @@ type Searcher struct {
hideOnSelect bool
logger func(string, ...any)
keyMap KeyMap
keyMap, customKeyMap KeyMap
}
var _ Widget = (*Searcher)(nil)
@@ -79,6 +79,7 @@ func (w *Searcher) Init(id string, style tcell.Style) {
tcell.KeyPgDn: w.handleKeyPgDn,
tcell.KeyEnter: w.handleKeyEnter,
})
w.customKeyMap = BlankKeyMap()
w.focusable = true
}
@@ -94,21 +95,29 @@ func (w *Searcher) HandleResize(ev *tcell.EventResize) {
w.search.HandleResize(Coord{X: aW, Y: aH}.ResizeEvent())
}
func (w *Searcher) SetKeyMap(km KeyMap) { w.keyMap = km }
func (w *Searcher) AddToKeyMap(km KeyMap) { w.keyMap.Merge(km) }
func (w *Searcher) SetKeyMap(km KeyMap, def bool) {
if def {
w.keyMap = km
} else {
w.customKeyMap = km
}
}
func (w *Searcher) AddToKeyMap(km KeyMap) { w.customKeyMap.Merge(km) }
func (w *Searcher) RemoveFromKeyMap(km KeyMap) {
for k := range km.Keys {
w.keyMap.Remove(k)
w.customKeyMap.Remove(k)
}
for r := range km.Runes {
w.keyMap.RemoveRune(r)
w.customKeyMap.RemoveRune(r)
}
}
func (w *Searcher) HandleKey(ev *tcell.EventKey) bool {
if !w.active {
return false
} else if ok := w.keyMap.Handle(ev); ok {
}
b1, b2 := w.keyMap.Handle(ev), w.customKeyMap.Handle(ev)
if b1 || b2 {
return true
}
return w.search.HandleKey(ev)
@@ -174,18 +183,18 @@ func (w *Searcher) handleKeyEnter(ev *tcell.EventKey) bool {
if w.hideOnSelect {
w.visible = false
}
if w.selectFunc != nil {
// Figure out our true index
var idx int
selV := w.filteredData[w.cursor]
for i := range w.data {
if w.data[i] == selV {
idx = i
}
}
return w.selectFunc(idx, selV)
if w.selectFunc == nil || len(w.filteredData) <= w.cursor {
return false
}
return false
// Figure out our true index
var idx int
selV := w.filteredData[w.cursor]
for i := range w.data {
if w.data[i] == selV {
idx = i
}
}
return w.selectFunc(idx, selV)
}
func (w *Searcher) HandleTime(ev *tcell.EventTime) { w.search.HandleTime(ev) }