mirror of
https://github.com/jesseduffield/lazygit.git
synced 2026-09-10 07:36:27 -04:00
fixup! Truncate the repo and branch names in the recent repos menu
Count the branch icon towards the maximum width of the branch column, and pad the tooltip labels to the same width no matter which of them the tooltip shows, so that its values don't shift around as the selection moves from one entry to another. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
f5df1354fe
commit
3c4d3920a3
|
|
@ -109,41 +109,40 @@ func (self *ReposHelper) getCurrentBranch(path string) string {
|
|||
// width of its widest entry.
|
||||
const recentReposColumnMaxWidth = 30
|
||||
|
||||
// Spells out the repo name and the branch name of a recent repos menu item,
|
||||
// but only the ones that the menu shows in truncated form.
|
||||
func (self *ReposHelper) recentRepoTooltip(repoName string, branchName string) string {
|
||||
type field struct {
|
||||
label string
|
||||
value string
|
||||
}
|
||||
|
||||
fields := []field{}
|
||||
if utils.StringWidth(repoName) > recentReposColumnMaxWidth {
|
||||
fields = append(fields, field{self.c.Tr.RecentReposRepoLabel, repoName})
|
||||
}
|
||||
if utils.StringWidth(branchName) > recentReposColumnMaxWidth {
|
||||
fields = append(fields, field{self.c.Tr.RecentReposBranchLabel, branchName})
|
||||
}
|
||||
|
||||
labelWidth := utils.MaxFn(fields, func(f field) int { return utils.StringWidth(f.label) })
|
||||
|
||||
return strings.Join(lo.Map(fields, func(f field, _ int) string {
|
||||
return utils.WithPadding(f.label, labelWidth, utils.AlignLeft) + " " + f.value
|
||||
}), "\n")
|
||||
}
|
||||
|
||||
func (self *ReposHelper) recentRepoMenuItem(path string, branchName string) *types.MenuItem {
|
||||
repoName := filepath.Base(path)
|
||||
displayedRepoName := utils.TruncateWithEllipsis(repoName, recentReposColumnMaxWidth)
|
||||
|
||||
displayedBranchName := utils.TruncateWithEllipsis(branchName, recentReposColumnMaxWidth)
|
||||
// The icon is part of the column, so it counts towards the maximum width.
|
||||
branchColumn := branchName
|
||||
if icons.IsIconEnabled() {
|
||||
displayedBranchName = icons.BRANCH_ICON + " " + displayedBranchName
|
||||
branchColumn = icons.BRANCH_ICON + " " + branchName
|
||||
}
|
||||
displayedBranchColumn := utils.TruncateWithEllipsis(branchColumn, recentReposColumnMaxWidth)
|
||||
|
||||
// Spell out whatever the columns show in truncated form. The labels are
|
||||
// padded to the same width no matter which of them appear, so that the
|
||||
// tooltip doesn't shift around as the selection moves.
|
||||
tooltipLines := []string{}
|
||||
labelWidth := utils.MaxFn(
|
||||
[]string{self.c.Tr.RecentReposRepoLabel, self.c.Tr.RecentReposBranchLabel},
|
||||
utils.StringWidth)
|
||||
addTooltipLine := func(label string, value string) {
|
||||
tooltipLines = append(tooltipLines,
|
||||
utils.WithPadding(label, labelWidth, utils.AlignLeft)+" "+value)
|
||||
}
|
||||
|
||||
if displayedRepoName != repoName {
|
||||
addTooltipLine(self.c.Tr.RecentReposRepoLabel, repoName)
|
||||
}
|
||||
if displayedBranchColumn != branchColumn {
|
||||
addTooltipLine(self.c.Tr.RecentReposBranchLabel, branchName)
|
||||
}
|
||||
|
||||
return &types.MenuItem{
|
||||
LabelColumns: []string{
|
||||
utils.TruncateWithEllipsis(repoName, recentReposColumnMaxWidth),
|
||||
style.FgCyan.Sprint(displayedBranchName),
|
||||
displayedRepoName,
|
||||
style.FgCyan.Sprint(displayedBranchColumn),
|
||||
// The last segment of the path is already in the first column, so
|
||||
// showing the directory that contains the repo is enough to tell
|
||||
// repos with the same name apart.
|
||||
|
|
@ -152,7 +151,7 @@ func (self *ReposHelper) recentRepoMenuItem(path string, branchName string) *typ
|
|||
// Filtering matches the full text, including the parts that the columns
|
||||
// above truncate or leave out.
|
||||
FilterColumns: []string{repoName, branchName, path},
|
||||
Tooltip: self.recentRepoTooltip(repoName, branchName),
|
||||
Tooltip: strings.Join(tooltipLines, "\n"),
|
||||
OnPress: func() error {
|
||||
// Check before clearing the stack, so a refused switch doesn't
|
||||
// forget the submodule breadcrumb (which would leave escape
|
||||
|
|
|
|||
Loading…
Reference in a new issue