mirror of
https://github.com/jesseduffield/lazygit.git
synced 2026-04-05 19:10:09 +02:00
Change working tree files and commit files panels to use filtering (reducing the list) instead of search (highlighting matches). This matches the behavior of other filterable views. The text filter matches against the full file path, not just the filename, which is more useful for navigating large directory trees. When toggling a directory for a custom patch while a text filter is active, only the visible filtered files in the directory are affected, consistent with how staging a directory in the files panel works. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
100 lines
2.8 KiB
Go
100 lines
2.8 KiB
Go
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"
|
|
"github.com/jesseduffield/lazygit/pkg/gui/presentation/icons"
|
|
"github.com/jesseduffield/lazygit/pkg/gui/style"
|
|
"github.com/jesseduffield/lazygit/pkg/gui/types"
|
|
"github.com/samber/lo"
|
|
)
|
|
|
|
type CommitFilesContext struct {
|
|
*filetree.CommitFileTreeViewModel
|
|
*ListContextTrait
|
|
*DynamicTitleBuilder
|
|
}
|
|
|
|
var (
|
|
_ types.IListContext = (*CommitFilesContext)(nil)
|
|
_ types.DiffableContext = (*CommitFilesContext)(nil)
|
|
_ types.IFilterableContext = (*CommitFilesContext)(nil)
|
|
)
|
|
|
|
func NewCommitFilesContext(c *ContextCommon) *CommitFilesContext {
|
|
viewModel := filetree.NewCommitFileTreeViewModel(
|
|
func() []*models.CommitFile { return c.Model().CommitFiles },
|
|
c.Common,
|
|
c.UserConfig().Gui.ShowFileTree,
|
|
)
|
|
|
|
getDisplayStrings := func(_ int, _ int) [][]string {
|
|
if viewModel.Len() == 0 {
|
|
return [][]string{{style.FgRed.Sprint("(none)")}}
|
|
}
|
|
|
|
showFileIcons := icons.IsIconEnabled() && c.UserConfig().Gui.ShowFileIcons
|
|
lines := presentation.RenderCommitFileTree(viewModel, c.Git().Patch.PatchBuilder, showFileIcons, &c.UserConfig().Gui.CustomIcons)
|
|
return lo.Map(lines, func(line string, _ int) []string {
|
|
return []string{line}
|
|
})
|
|
}
|
|
|
|
ctx := &CommitFilesContext{
|
|
CommitFileTreeViewModel: viewModel,
|
|
DynamicTitleBuilder: NewDynamicTitleBuilder(c.Tr.CommitFilesDynamicTitle),
|
|
ListContextTrait: &ListContextTrait{
|
|
Context: NewSimpleContext(
|
|
NewBaseContext(NewBaseContextOpts{
|
|
View: c.Views().CommitFiles,
|
|
WindowName: "commits",
|
|
Key: COMMIT_FILES_CONTEXT_KEY,
|
|
Kind: types.SIDE_CONTEXT,
|
|
Focusable: true,
|
|
Transient: true,
|
|
}),
|
|
),
|
|
ListRenderer: ListRenderer{
|
|
list: viewModel,
|
|
getDisplayStrings: getDisplayStrings,
|
|
},
|
|
c: c,
|
|
},
|
|
}
|
|
|
|
return ctx
|
|
}
|
|
|
|
func (self *CommitFilesContext) GetDiffTerminals() []string {
|
|
return []string{self.GetRef().RefName()}
|
|
}
|
|
|
|
func (self *CommitFilesContext) RefForAdjustingLineNumberInDiff() string {
|
|
if refs := self.GetRefRange(); refs != nil {
|
|
return refs.To.RefName()
|
|
}
|
|
return self.GetRef().RefName()
|
|
}
|
|
|
|
func (self *CommitFilesContext) GetFromAndToForDiff() (string, string) {
|
|
if refs := self.GetRefRange(); refs != nil {
|
|
return refs.From.ParentRefName(), refs.To.RefName()
|
|
}
|
|
ref := self.GetRef()
|
|
return ref.ParentRefName(), ref.RefName()
|
|
}
|
|
|
|
func (self *CommitFilesContext) ReInit(ref models.Ref, refRange *types.RefRange) {
|
|
self.SetRef(ref)
|
|
self.SetRefRange(refRange)
|
|
if refRange != nil {
|
|
self.SetTitleRef(fmt.Sprintf("%s-%s", refRange.From.ShortRefName(), refRange.To.ShortRefName()))
|
|
} else {
|
|
self.SetTitleRef(ref.Description())
|
|
}
|
|
self.GetView().Title = self.Title()
|
|
}
|