Skip to content

Commit fdeaf9c

Browse files
veremenko-yjesseduffield
authored andcommitted
Add new filter to only show tracked files in Files panel
This allows to hide all non-tracked files on large repos
1 parent b0a766c commit fdeaf9c

File tree

4 files changed

+25
-0
lines changed

4 files changed

+25
-0
lines changed

pkg/gui/controllers/files_controller.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -695,6 +695,13 @@ func (self *FilesController) handleStatusFilterPressed() error {
695695
},
696696
Key: 'u',
697697
},
698+
{
699+
Label: self.c.Tr.FilterTrackedFiles,
700+
OnPress: func() error {
701+
return self.setStatusFiltering(filetree.DisplayTracked)
702+
},
703+
Key: 't',
704+
},
698705
{
699706
Label: self.c.Tr.ResetFilter,
700707
OnPress: func() error {

pkg/gui/filetree/file_tree.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ const (
1515
DisplayAll FileTreeDisplayFilter = iota
1616
DisplayStaged
1717
DisplayUnstaged
18+
DisplayTracked
1819
// this shows files with merge conflicts
1920
DisplayConflicted
2021
)
@@ -82,6 +83,8 @@ func (self *FileTree) getFilesForDisplay() []*models.File {
8283
return self.FilterFiles(func(file *models.File) bool { return file.HasStagedChanges })
8384
case DisplayUnstaged:
8485
return self.FilterFiles(func(file *models.File) bool { return file.HasUnstagedChanges })
86+
case DisplayTracked:
87+
return self.FilterFiles(func(file *models.File) bool { return file.Tracked })
8588
case DisplayConflicted:
8689
return self.FilterFiles(func(file *models.File) bool { return file.HasMergeConflicts })
8790
default:

pkg/gui/filetree/file_tree_test.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,19 @@ func TestFilterAction(t *testing.T) {
4040
{Name: "file1", ShortStatus: "M ", HasStagedChanges: true},
4141
},
4242
},
43+
{
44+
name: "filter files that are tracked",
45+
filter: DisplayTracked,
46+
files: []*models.File{
47+
{Name: "dir2/dir2/file4", ShortStatus: "M ", Tracked: true},
48+
{Name: "dir2/file5", ShortStatus: "M ", Tracked: false},
49+
{Name: "file1", ShortStatus: "M ", Tracked: true},
50+
},
51+
expected: []*models.File{
52+
{Name: "dir2/dir2/file4", ShortStatus: "M ", Tracked: true},
53+
{Name: "file1", ShortStatus: "M ", Tracked: true},
54+
},
55+
},
4356
{
4457
name: "filter all files",
4558
filter: DisplayAll,

pkg/i18n/english.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ type TranslationSet struct {
8787
AllFilesDiffCopiedToast string
8888
FilterStagedFiles string
8989
FilterUnstagedFiles string
90+
FilterTrackedFiles string
9091
ResetFilter string
9192
MergeConflictsTitle string
9293
Checkout string
@@ -1075,6 +1076,7 @@ func EnglishTranslationSet() *TranslationSet {
10751076
AllFilesDiffCopiedToast: "All files diff copied to clipboard",
10761077
FilterStagedFiles: "Show only staged files",
10771078
FilterUnstagedFiles: "Show only unstaged files",
1079+
FilterTrackedFiles: "Show only tracked files",
10781080
ResetFilter: "Reset filter",
10791081
NoChangedFiles: "No changed files",
10801082
SoftReset: "Soft reset",

0 commit comments

Comments
 (0)