diff options
author | Yaroslav Veremenko <yaroslav@veremenko.info> | 2024-11-01 16:21:09 -0600 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2024-11-12 16:54:24 +1100 |
commit | fdeaf9cea0cbd71f3ed8dbf9a369f78f02d0a3a6 (patch) | |
tree | bc95ea4303ad4a8f90bfc9fcd03c1eeaa4d4643e | |
parent | b0a766cc9529dadde5e5bd51bb1cc5c503213f66 (diff) |
Add new filter to only show tracked files in Files panel
This allows to hide all non-tracked files on large repos
-rw-r--r-- | pkg/gui/controllers/files_controller.go | 7 | ||||
-rw-r--r-- | pkg/gui/filetree/file_tree.go | 3 | ||||
-rw-r--r-- | pkg/gui/filetree/file_tree_test.go | 13 | ||||
-rw-r--r-- | pkg/i18n/english.go | 2 |
4 files changed, 25 insertions, 0 deletions
diff --git a/pkg/gui/controllers/files_controller.go b/pkg/gui/controllers/files_controller.go index 5380c8909..1ea20eeb2 100644 --- a/pkg/gui/controllers/files_controller.go +++ b/pkg/gui/controllers/files_controller.go @@ -696,6 +696,13 @@ func (self *FilesController) handleStatusFilterPressed() error { Key: 'u', }, { + Label: self.c.Tr.FilterTrackedFiles, + OnPress: func() error { + return self.setStatusFiltering(filetree.DisplayTracked) + }, + Key: 't', + }, + { Label: self.c.Tr.ResetFilter, OnPress: func() error { return self.setStatusFiltering(filetree.DisplayAll) diff --git a/pkg/gui/filetree/file_tree.go b/pkg/gui/filetree/file_tree.go index f2108ab28..12780e3ed 100644 --- a/pkg/gui/filetree/file_tree.go +++ b/pkg/gui/filetree/file_tree.go @@ -15,6 +15,7 @@ const ( DisplayAll FileTreeDisplayFilter = iota DisplayStaged DisplayUnstaged + DisplayTracked // this shows files with merge conflicts DisplayConflicted ) @@ -82,6 +83,8 @@ func (self *FileTree) getFilesForDisplay() []*models.File { return self.FilterFiles(func(file *models.File) bool { return file.HasStagedChanges }) case DisplayUnstaged: return self.FilterFiles(func(file *models.File) bool { return file.HasUnstagedChanges }) + case DisplayTracked: + return self.FilterFiles(func(file *models.File) bool { return file.Tracked }) case DisplayConflicted: return self.FilterFiles(func(file *models.File) bool { return file.HasMergeConflicts }) default: diff --git a/pkg/gui/filetree/file_tree_test.go b/pkg/gui/filetree/file_tree_test.go index 856d25f9a..a3cdfd966 100644 --- a/pkg/gui/filetree/file_tree_test.go +++ b/pkg/gui/filetree/file_tree_test.go @@ -41,6 +41,19 @@ func TestFilterAction(t *testing.T) { }, }, { + name: "filter files that are tracked", + filter: DisplayTracked, + files: []*models.File{ + {Name: "dir2/dir2/file4", ShortStatus: "M ", Tracked: true}, + {Name: "dir2/file5", ShortStatus: "M ", Tracked: false}, + {Name: "file1", ShortStatus: "M ", Tracked: true}, + }, + expected: []*models.File{ + {Name: "dir2/dir2/file4", ShortStatus: "M ", Tracked: true}, + {Name: "file1", ShortStatus: "M ", Tracked: true}, + }, + }, + { name: "filter all files", filter: DisplayAll, files: []*models.File{ diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go index e141a614c..fa28130a9 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -87,6 +87,7 @@ type TranslationSet struct { AllFilesDiffCopiedToast string FilterStagedFiles string FilterUnstagedFiles string + FilterTrackedFiles string ResetFilter string MergeConflictsTitle string Checkout string @@ -1075,6 +1076,7 @@ func EnglishTranslationSet() *TranslationSet { AllFilesDiffCopiedToast: "All files diff copied to clipboard", FilterStagedFiles: "Show only staged files", FilterUnstagedFiles: "Show only unstaged files", + FilterTrackedFiles: "Show only tracked files", ResetFilter: "Reset filter", NoChangedFiles: "No changed files", SoftReset: "Soft reset", |