summaryrefslogtreecommitdiffstats
path: root/pkg/gui/searching.go
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2020-02-23 21:53:30 +1100
committerJesse Duffield <jessedduffield@gmail.com>2020-02-24 22:18:04 +1100
commit46be280c921994ba783b8c53232d118f0547ad14 (patch)
tree0f2e637414a54e2dd034081f0fce888346e31655 /pkg/gui/searching.go
parent2a5763a77190a579ae3cb57926a0d907964fcccb (diff)
support searching in side panels
For now we're just doing side panels, because it will take more work to support this in the various main panel contexts
Diffstat (limited to 'pkg/gui/searching.go')
-rw-r--r--pkg/gui/searching.go89
1 files changed, 89 insertions, 0 deletions
diff --git a/pkg/gui/searching.go b/pkg/gui/searching.go
new file mode 100644
index 000000000..6e8cd2f64
--- /dev/null
+++ b/pkg/gui/searching.go
@@ -0,0 +1,89 @@
+package gui
+
+import (
+ "fmt"
+
+ "github.com/jesseduffield/gocui"
+ "github.com/jesseduffield/lazygit/pkg/theme"
+ "github.com/jesseduffield/lazygit/pkg/utils"
+)
+
+func (gui *Gui) handleOpenSearch(g *gocui.Gui, v *gocui.View) error {
+ gui.State.Searching.isSearching = true
+ gui.State.Searching.view = v
+ gui.renderString(gui.g, "search", "")
+ gui.switchFocus(gui.g, v, gui.getSearchView())
+
+ return nil
+}
+
+func (gui *Gui) handleSearch(g *gocui.Gui, v *gocui.View) error {
+ gui.State.Searching.searchString = gui.getSearchView().Buffer()
+ gui.switchFocus(gui.g, nil, gui.State.Searching.view)
+ if err := gui.State.Searching.view.Search(gui.State.Searching.searchString); err != nil {
+ return err
+ }
+
+ return nil
+}
+
+func (gui *Gui) onSelectItemWrapper(innerFunc func(int) error) func(int, int, int) error {
+ return func(y int, index int, total int) error {
+ if total == 0 {
+ gui.renderString(
+ gui.g,
+ "search",
+ fmt.Sprintf(
+ "no matches for '%s' %s",
+ gui.State.Searching.searchString,
+ utils.ColoredString(
+ fmt.Sprintf("%s: exit search mode", gui.getKeyDisplay("universal.return")),
+ theme.OptionsFgColor,
+ ),
+ ),
+ )
+ return nil
+ }
+ gui.renderString(
+ gui.g,
+ "search",
+ fmt.Sprintf(
+ "matches for '%s' (%d of %d) %s",
+ gui.State.Searching.searchString,
+ index+1,
+ total,
+ utils.ColoredString(
+ fmt.Sprintf(
+ "%s: next match, %s: previous match, %s: exit search mode",
+ gui.getKeyDisplay("universal.nextMatch"),
+ gui.getKeyDisplay("universal.prevMatch"),
+ gui.getKeyDisplay("universal.return"),
+ ),
+ theme.OptionsFgColor,
+ ),
+ ),
+ )
+ if err := innerFunc(y); err != nil {
+ return err
+ }
+ return nil
+ }
+}
+
+func (gui *Gui) onSearchEscape() error {
+ gui.State.Searching.isSearching = false
+ gui.State.Searching.view = nil
+ return nil
+}
+
+func (gui *Gui) handleSearchEscape(g *gocui.Gui, v *gocui.View) error {
+ if err := gui.switchFocus(gui.g, nil, gui.State.Searching.view); err != nil {
+ return err
+ }
+
+ if err := gui.onSearchEscape(); err != nil {
+ return err
+ }
+
+ return nil
+}