summaryrefslogtreecommitdiffstats
path: root/pkg/gui/stash_panel.go
diff options
context:
space:
mode:
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")
}