mirror of
https://github.com/jesseduffield/lazydocker.git
synced 2026-07-21 23:01:03 +00:00
80 lines
1.7 KiB
Go
80 lines
1.7 KiB
Go
package gui
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/jesseduffield/gocui"
|
|
)
|
|
|
|
func (gui *Gui) handleOpenFilter() error {
|
|
panel, ok := gui.currentListPanel()
|
|
if !ok {
|
|
return nil
|
|
}
|
|
|
|
if panel.IsFilterDisabled() {
|
|
return nil
|
|
}
|
|
|
|
gui.State.Filter.active = true
|
|
gui.State.Filter.panel = panel
|
|
|
|
return gui.switchFocus(gui.Views.Filter)
|
|
}
|
|
|
|
func (gui *Gui) onNewFilterNeedle(value string) error {
|
|
gui.State.Filter.needle = value
|
|
gui.ResetOrigin(gui.State.Filter.panel.View())
|
|
return gui.State.Filter.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 {
|
|
if err := gui.onNewFilterNeedle(v.TextArea.GetContent()); err != nil {
|
|
gui.Log.Error(err)
|
|
}
|
|
}
|
|
return matched
|
|
}
|
|
}
|
|
|
|
func (gui *Gui) escapeFilterPrompt() error {
|
|
if err := gui.clearFilter(); err != nil {
|
|
return err
|
|
}
|
|
|
|
return gui.returnFocus()
|
|
}
|
|
|
|
func (gui *Gui) clearFilter() error {
|
|
gui.State.Filter.needle = ""
|
|
gui.State.Filter.active = false
|
|
panel := gui.State.Filter.panel
|
|
gui.State.Filter.panel = nil
|
|
gui.Views.Filter.ClearTextArea()
|
|
|
|
if panel == nil {
|
|
return nil
|
|
}
|
|
|
|
gui.ResetOrigin(panel.View())
|
|
|
|
return panel.RerenderList()
|
|
}
|
|
|
|
// returns to the list view with the filter still applied
|
|
func (gui *Gui) commitFilter() error {
|
|
if gui.State.Filter.needle == "" {
|
|
if err := gui.clearFilter(); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return gui.returnFocus()
|
|
}
|
|
|
|
func (gui *Gui) filterPrompt() string {
|
|
return fmt.Sprintf("%s: ", gui.Tr.FilterPrompt)
|
|
}
|