summaryrefslogtreecommitdiffstats
path: root/pkg/gui/stash_panel.go
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2018-12-06 22:18:17 +1100
committerJesse Duffield <jessedduffield@gmail.com>2018-12-08 11:51:47 +1100
commitca3afa2a3905365ec79624e0c9b08865e9ab27ae (patch)
tree47add13ed3819ddc9ed89c16c12cb9aab22ad1cd /pkg/gui/stash_panel.go
parent99a8b1ae8bb93565df8acbe168749278dc768979 (diff)
standardising how list panels deal with cursor movement
Diffstat (limited to 'pkg/gui/stash_panel.go')
-rw-r--r--pkg/gui/stash_panel.go67
1 files changed, 44 insertions, 23 deletions
diff --git a/pkg/gui/stash_panel.go b/pkg/gui/stash_panel.go
index 196a33a08..ef54ef997 100644
--- a/pkg/gui/stash_panel.go
+++ b/pkg/gui/stash_panel.go
@@ -8,19 +8,46 @@ import (
"github.com/jesseduffield/lazygit/pkg/utils"
)
+// list panel functions
+
+func (gui *Gui) getSelectedStashEntry(v *gocui.View) *commands.StashEntry {
+ selectedLine := gui.State.Panels.Stash.SelectedLine
+ if selectedLine == -1 {
+ return nil
+ }
+
+ return gui.State.StashEntries[selectedLine]
+}
+
+func (gui *Gui) handleStashEntrySelect(g *gocui.Gui, v *gocui.View) error {
+ stashEntry := gui.getSelectedStashEntry(v)
+ if stashEntry == nil {
+ return gui.renderString(g, "main", gui.Tr.SLocalize("NoStashEntries"))
+ }
+ if err := gui.focusPoint(0, gui.State.Panels.Stash.SelectedLine, v); err != nil {
+ return err
+ }
+ go func() {
+ // doing this asynchronously cos it can take time
+ diff, _ := gui.GitCommand.GetStashEntryDiff(stashEntry.Index)
+ gui.renderString(g, "main", diff)
+ }()
+ return nil
+}
+
func (gui *Gui) refreshStashEntries(g *gocui.Gui) error {
g.Update(func(g *gocui.Gui) error {
- v, err := g.View("stash")
- if err != nil {
- panic(err)
- }
gui.State.StashEntries = gui.GitCommand.GetStashEntries()
- v.Clear()
+ gui.refreshSelectedLine(&gui.State.Panels.Stash.SelectedLine, len(gui.State.StashEntries))
+
list, err := utils.RenderList(gui.State.StashEntries)
if err != nil {
return err
}
+
+ v := gui.getStashView(gui.g)
+ v.Clear()
fmt.Fprint(v, list)
return gui.resetOrigin(v)
@@ -28,28 +55,22 @@ func (gui *Gui) refreshStashEntries(g *gocui.Gui) error {
return nil
}
-func (gui *Gui) getSelectedStashEntry(v *gocui.View) *commands.StashEntry {
- if len(gui.State.StashEntries) == 0 {
- return nil
- }
- stashView, _ := gui.g.View("stash")
- lineNumber := gui.getItemPosition(stashView)
- return gui.State.StashEntries[lineNumber]
+func (gui *Gui) handleStashNextLine(g *gocui.Gui, v *gocui.View) error {
+ panelState := gui.State.Panels.Stash
+ gui.changeSelectedLine(&panelState.SelectedLine, len(gui.State.StashEntries), false)
+
+ return gui.handleStashEntrySelect(gui.g, v)
}
-func (gui *Gui) handleStashEntrySelect(g *gocui.Gui, v *gocui.View) error {
- go func() {
- stashEntry := gui.getSelectedStashEntry(v)
- if stashEntry == nil {
- gui.renderString(g, "main", gui.Tr.SLocalize("NoStashEntries"))
- return
- }
- diff, _ := gui.GitCommand.GetStashEntryDiff(stashEntry.Index)
- gui.renderString(g, "main", diff)
- }()
- return nil
+func (gui *Gui) handleStashPrevLine(g *gocui.Gui, v *gocui.View) error {
+ panelState := gui.State.Panels.Stash
+ gui.changeSelectedLine(&panelState.SelectedLine, len(gui.State.StashEntries), true)
+
+ return gui.handleStashEntrySelect(gui.g, v)
}
+// specific functions
+
func (gui *Gui) handleStashApply(g *gocui.Gui, v *gocui.View) error {
return gui.stashDo(g, v, "apply")
}