mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-06-23 00:39:13 +02:00
minor refactor
This commit is contained in:
@ -49,12 +49,11 @@ func (gui *Gui) handleMenuClose(g *gocui.Gui, v *gocui.View) error {
|
|||||||
return gui.returnFocus(g, v)
|
return gui.returnFocus(g, v)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (gui *Gui) handleMenu(g *gocui.Gui, v *gocui.View) error {
|
func (gui *Gui) getBindings(v *gocui.View) []*Binding {
|
||||||
var (
|
var (
|
||||||
bindingsGlobal, bindingsPanel []*Binding
|
bindingsGlobal, bindingsPanel []*Binding
|
||||||
)
|
)
|
||||||
// clear keys slice, so we don't have ghost elements
|
|
||||||
gui.State.Keys = gui.State.Keys[:0]
|
|
||||||
bindings := gui.GetKeybindings()
|
bindings := gui.GetKeybindings()
|
||||||
|
|
||||||
for _, binding := range bindings {
|
for _, binding := range bindings {
|
||||||
@ -71,7 +70,11 @@ func (gui *Gui) handleMenu(g *gocui.Gui, v *gocui.View) error {
|
|||||||
// append dummy element to have a separator between
|
// append dummy element to have a separator between
|
||||||
// panel and global keybindings
|
// panel and global keybindings
|
||||||
bindingsPanel = append(bindingsPanel, &Binding{})
|
bindingsPanel = append(bindingsPanel, &Binding{})
|
||||||
gui.State.Keys = append(bindingsPanel, bindingsGlobal...)
|
return append(bindingsPanel, bindingsGlobal...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (gui *Gui) handleMenu(g *gocui.Gui, v *gocui.View) error {
|
||||||
|
gui.State.Keys = gui.getBindings(v)
|
||||||
|
|
||||||
list, err := utils.RenderList(gui.State.Keys)
|
list, err := utils.RenderList(gui.State.Keys)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -141,35 +141,59 @@ func RenderList(slice interface{}) (string, error) {
|
|||||||
// each item's string representation on its own line, with appropriate horizontal
|
// each item's string representation on its own line, with appropriate horizontal
|
||||||
// padding between the item's own strings
|
// padding between the item's own strings
|
||||||
func renderDisplayableList(items []Displayable) (string, error) {
|
func renderDisplayableList(items []Displayable) (string, error) {
|
||||||
displayStrings := make([][]string, len(items))
|
if len(items) == 0 {
|
||||||
|
|
||||||
for i, item := range items {
|
|
||||||
displayStrings[i] = item.GetDisplayStrings()
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(displayStrings) == 0 {
|
|
||||||
return "", nil
|
return "", nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// use first element to determine how many times to do this
|
stringArrays := getDisplayStringArrays(items)
|
||||||
padWidths := make([]int, len(displayStrings[0]))
|
|
||||||
|
if !displayArraysAligned(stringArrays) {
|
||||||
|
return "", errors.New("Each item must return the same number of strings to display")
|
||||||
|
}
|
||||||
|
|
||||||
|
padWidths := getPadWidths(stringArrays)
|
||||||
|
paddedDisplayStrings := getPaddedDisplayStrings(stringArrays, padWidths)
|
||||||
|
|
||||||
|
return strings.Join(paddedDisplayStrings, "\n"), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func getPadWidths(stringArrays [][]string) []int {
|
||||||
|
padWidths := make([]int, len(stringArrays[0]))
|
||||||
for i, _ := range padWidths {
|
for i, _ := range padWidths {
|
||||||
for _, strings := range displayStrings {
|
for _, strings := range stringArrays {
|
||||||
if len(strings) != len(padWidths) {
|
|
||||||
return "", errors.New("Each item must return the same number of strings to display")
|
|
||||||
}
|
|
||||||
if len(strings[i]) > padWidths[i] {
|
if len(strings[i]) > padWidths[i] {
|
||||||
padWidths[i] = len(strings[i])
|
padWidths[i] = len(strings[i])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return padWidths
|
||||||
|
}
|
||||||
|
|
||||||
paddedDisplayStrings := make([]string, len(displayStrings))
|
func getPaddedDisplayStrings(stringArrays [][]string, padWidths []int) []string {
|
||||||
for i, strings := range displayStrings {
|
paddedDisplayStrings := make([]string, len(stringArrays))
|
||||||
|
for i, stringArray := range stringArrays {
|
||||||
for j, padWidth := range padWidths {
|
for j, padWidth := range padWidths {
|
||||||
paddedDisplayStrings[i] += WithPadding(strings[j], padWidth) + " "
|
paddedDisplayStrings[i] += WithPadding(stringArray[j], padWidth) + " "
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return paddedDisplayStrings
|
||||||
return strings.Join(paddedDisplayStrings, "\n"), nil
|
}
|
||||||
|
|
||||||
|
// displayArraysAligned returns true if every string array returned from our
|
||||||
|
// list of displayables has the same length
|
||||||
|
func displayArraysAligned(stringArrays [][]string) bool {
|
||||||
|
for _, strings := range stringArrays {
|
||||||
|
if len(strings) != len(stringArrays[0]) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func getDisplayStringArrays(displayables []Displayable) [][]string {
|
||||||
|
stringArrays := make([][]string, len(displayables))
|
||||||
|
for i, item := range displayables {
|
||||||
|
stringArrays[i] = item.GetDisplayStrings()
|
||||||
|
}
|
||||||
|
return stringArrays
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user