1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-07-03 00:57:52 +02:00

continue refactor of menu panel

This commit is contained in:
Jesse Duffield
2020-02-14 22:32:31 +11:00
parent 814a0ea36f
commit 665fdded14
3 changed files with 24 additions and 17 deletions

View File

@ -15,7 +15,7 @@ func (gui *Gui) handleCreateDiscardMenu(g *gocui.Gui, v *gocui.View) error {
menuItems := []*menuItem{ menuItems := []*menuItem{
{ {
displayStrings: []string{gui.Tr.SLocalize("discardAllChanges")}, displayString: gui.Tr.SLocalize("discardAllChanges"),
onPress: func() error { onPress: func() error {
if err := gui.GitCommand.DiscardAllFileChanges(file); err != nil { if err := gui.GitCommand.DiscardAllFileChanges(file); err != nil {
return err return err
@ -27,7 +27,7 @@ func (gui *Gui) handleCreateDiscardMenu(g *gocui.Gui, v *gocui.View) error {
if file.HasStagedChanges && file.HasUnstagedChanges { if file.HasStagedChanges && file.HasUnstagedChanges {
menuItems = append(menuItems, &menuItem{ menuItems = append(menuItems, &menuItem{
displayStrings: []string{gui.Tr.SLocalize("discardUnstagedChanges")}, displayString: gui.Tr.SLocalize("discardUnstagedChanges"),
onPress: func() error { onPress: func() error {
if err := gui.GitCommand.DiscardUnstagedFileChanges(file); err != nil { if err := gui.GitCommand.DiscardUnstagedFileChanges(file); err != nil {
return err return err

View File

@ -9,6 +9,7 @@ import (
) )
type menuItem struct { type menuItem struct {
displayString string
displayStrings []string displayStrings []string
onPress func() error onPress func() error
} }
@ -62,8 +63,12 @@ func (gui *Gui) createMenuNew(title string, items []*menuItem, createMenuOptions
stringArrays := make([][]string, len(items)) stringArrays := make([][]string, len(items))
for i, item := range items { for i, item := range items {
if item.displayStrings == nil {
stringArrays[i] = []string{item.displayString}
} else {
stringArrays[i] = item.displayStrings stringArrays[i] = item.displayStrings
} }
}
list := utils.RenderDisplayStrings(stringArrays) list := utils.RenderDisplayStrings(stringArrays)

View File

@ -3,8 +3,6 @@ package gui
import ( import (
"strings" "strings"
"github.com/go-errors/errors"
"github.com/jesseduffield/gocui" "github.com/jesseduffield/gocui"
"github.com/jesseduffield/lazygit/pkg/utils" "github.com/jesseduffield/lazygit/pkg/utils"
) )
@ -38,19 +36,23 @@ func (gui *Gui) getBindings(v *gocui.View) []*Binding {
func (gui *Gui) handleCreateOptionsMenu(g *gocui.Gui, v *gocui.View) error { func (gui *Gui) handleCreateOptionsMenu(g *gocui.Gui, v *gocui.View) error {
bindings := gui.getBindings(v) bindings := gui.getBindings(v)
handleMenuPress := func(index int) error { menuItems := make([]*menuItem, len(bindings))
if bindings[index].Key == nil {
for i, binding := range bindings {
innerBinding := binding // note to self, never close over loop variables
menuItems[i] = &menuItem{
displayStrings: []string{GetKeyDisplay(innerBinding.Key), innerBinding.Description},
onPress: func() error {
if innerBinding.Key == nil {
return nil return nil
} }
if index >= len(bindings) { if err := gui.handleMenuClose(g, v); err != nil {
return errors.New("Index is greater than size of bindings")
}
err := gui.handleMenuClose(g, v)
if err != nil {
return err return err
} }
return bindings[index].Handler(g, v) return innerBinding.Handler(g, v)
},
}
} }
return gui.createMenu(strings.Title(gui.Tr.SLocalize("menu")), bindings, len(bindings), handleMenuPress) return gui.createMenuNew(strings.Title(gui.Tr.SLocalize("menu")), menuItems, createMenuOptions{})
} }