lazydocker/pkg/gui/searching.go
2022-11-09 21:21:35 +11:00

60 lines
1.4 KiB
Go

package gui
import (
"github.com/jesseduffield/gocui"
)
func (gui *Gui) handleOpenSearch() error {
panel, ok := gui.currentListPanel()
if !ok {
return nil
}
gui.State.Searching.isSearching = true
gui.State.Searching.panel = panel
return gui.switchFocus(gui.Views.Search)
}
func (gui *Gui) onNewSearchString(value string) error {
// need to refresh the right list panel.
gui.State.Searching.searchString = value
gui.ResetOrigin(gui.State.Searching.panel.View())
return gui.State.Searching.panel.RerenderList()
}
func (gui *Gui) wrapEditor(f func(v *gocui.View, key gocui.Key, ch rune, mod gocui.Modifier) bool) func(v *gocui.View, key gocui.Key, ch rune, mod gocui.Modifier) bool {
return func(v *gocui.View, key gocui.Key, ch rune, mod gocui.Modifier) bool {
matched := f(v, key, ch, mod)
if matched {
// TODO: handle error
_ = gui.onNewSearchString(v.TextArea.GetContent())
}
return matched
}
}
func (gui *Gui) escapeSearchPrompt() error {
if err := gui.clearSearch(); err != nil {
return err
}
return gui.returnFocus()
}
func (gui *Gui) clearSearch() error {
gui.State.Searching.searchString = ""
gui.State.Searching.isSearching = false
panel := gui.State.Searching.panel
gui.State.Searching.panel = nil
gui.Views.Search.ClearTextArea()
gui.ResetOrigin(panel.View())
return panel.RerenderList()
}
// returns to the list view with the filter still applied
func (gui *Gui) commitSearch() error {
return gui.returnFocus()
}