1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-07-30 03:23:08 +03:00

Right-align key labels in menu

I find this makes it look a little nicer
This commit is contained in:
Jesse Duffield
2023-05-21 12:06:22 +10:00
parent 5b933762c2
commit ec3a28df43
8 changed files with 124 additions and 43 deletions

View File

@ -8,20 +8,52 @@ import (
"github.com/samber/lo"
)
type Alignment int
const (
AlignLeft Alignment = iota
AlignRight
)
type ColumnConfig struct {
Width int
Alignment Alignment
}
// WithPadding pads a string as much as you want
func WithPadding(str string, padding int) string {
func WithPadding(str string, padding int, alignment Alignment) string {
uncoloredStr := Decolorise(str)
width := runewidth.StringWidth(uncoloredStr)
if padding < width {
return str
}
return str + strings.Repeat(" ", padding-width)
space := strings.Repeat(" ", padding-width)
if alignment == AlignLeft {
return str + space
} else {
return space + str
}
}
func RenderDisplayStrings(displayStringsArr [][]string) string {
// defaults to left-aligning each column. If you want to set the alignment of
// each column, pass in a slice of Alignment values.
func RenderDisplayStrings(displayStringsArr [][]string, columnAlignments []Alignment) string {
displayStringsArr = excludeBlankColumns(displayStringsArr)
padWidths := getPadWidths(displayStringsArr)
output := getPaddedDisplayStrings(displayStringsArr, padWidths)
columnConfigs := make([]ColumnConfig, len(padWidths))
for i, padWidth := range padWidths {
// gracefully handle when columnAlignments is shorter than padWidths
alignment := AlignLeft
if len(columnAlignments) > i {
alignment = columnAlignments[i]
}
columnConfigs[i] = ColumnConfig{
Width: padWidth,
Alignment: alignment,
}
}
output := getPaddedDisplayStrings(displayStringsArr, columnConfigs)
return output
}
@ -59,23 +91,23 @@ outer:
return displayStringsArr
}
func getPaddedDisplayStrings(stringArrays [][]string, padWidths []int) string {
func getPaddedDisplayStrings(stringArrays [][]string, columnConfigs []ColumnConfig) string {
builder := strings.Builder{}
for i, stringArray := range stringArrays {
if len(stringArray) == 0 {
continue
}
for j, padWidth := range padWidths {
for j, columnConfig := range columnConfigs {
if len(stringArray)-1 < j {
continue
}
builder.WriteString(WithPadding(stringArray[j], padWidth))
builder.WriteString(WithPadding(stringArray[j], columnConfig.Width, columnConfig.Alignment))
builder.WriteString(" ")
}
if len(stringArray)-1 < len(padWidths) {
if len(stringArray)-1 < len(columnConfigs) {
continue
}
builder.WriteString(stringArray[len(padWidths)])
builder.WriteString(stringArray[len(columnConfigs)])
if i < len(stringArrays)-1 {
builder.WriteString("\n")