feat: show actual file count in files panel footer

In tree mode, the files panel footer shows "X of Y" where Y includes
directory nodes. This can be confusing since it doesn't match the
actual number of changed files (as shown by git status).

Add a file count suffix to the footer so it reads e.g. "1 of 39 | 23
changes", making the true number of changed files visible at a glance
while keeping the tree navigation counter intact.

This is implemented via a generic footerExtra callback on
ListContextTrait, so other contexts can add footer info in the future
without modifying the shared setFooter logic.
This commit is contained in:
PeterTimCousins 2026-04-03 14:32:05 +01:00
parent 4c2c0ce32d
commit 026b434c6f
2 changed files with 20 additions and 1 deletions

View file

@ -28,6 +28,9 @@ type ListContextTrait struct {
// true if we're inside the OnSearchSelect call; in that case we don't want to update the search
// result index.
inOnSearchSelect bool
// Optional function to append extra info to the footer (e.g. file count in tree view)
footerExtra func() string
}
func (self *ListContextTrait) IsListContext() {}
@ -81,7 +84,13 @@ func (self *ListContextTrait) refreshViewport() {
}
func (self *ListContextTrait) setFooter() {
self.GetViewTrait().SetFooter(formatListFooter(self.list.GetSelectedLineIdx(), self.list.Len()))
footer := formatListFooter(self.list.GetSelectedLineIdx(), self.list.Len())
if self.footerExtra != nil {
if extra := self.footerExtra(); extra != "" {
footer += " | " + extra
}
}
self.GetViewTrait().SetFooter(footer)
}
func formatListFooter(selectedLineIdx int, length int) string {

View file

@ -1,6 +1,8 @@
package context
import (
"fmt"
"github.com/jesseduffield/lazygit/pkg/commands/models"
"github.com/jesseduffield/lazygit/pkg/gui/filetree"
"github.com/jesseduffield/lazygit/pkg/gui/presentation"
@ -50,6 +52,14 @@ func NewWorkingTreeContext(c *ContextCommon) *WorkingTreeContext {
getDisplayStrings: getDisplayStrings,
},
c: c,
footerExtra: func() string {
fileCount := len(viewModel.GetAllFiles())
label := "changes"
if fileCount == 1 {
label = "change"
}
return fmt.Sprintf("%d %s", fileCount, label)
},
},
}