jesseduffield.lazygit/pkg/gui/filetree
Jesse Duffield 615c566ac4 Filter file views rather than search
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>
2026-03-07 20:04:31 +01:00
..
build_tree.go Extract a InternalTreePathForFilePath helper function 2025-10-09 09:58:10 +02:00
build_tree_test.go Add user config gui.addRootItemInFileTree 2025-05-24 18:17:25 +02:00
collapsed_paths.go Collapse/expand all files in tree 2025-01-13 21:13:11 +01:00
commit_file_node.go handle nil properly with file nodes 2022-08-01 20:32:01 +10:00
commit_file_tree.go Filter file views rather than search 2026-03-07 20:04:31 +01:00
commit_file_tree_view_model.go Filter file views rather than search 2026-03-07 20:04:31 +01:00
file_filter.go Filter file views rather than search 2026-03-07 20:04:31 +01:00
file_node.go Rename Name to Path in File and CommitFile 2025-03-20 12:31:34 +01:00
file_node_test.go Make Node.path private 2025-03-20 12:31:34 +01:00
file_tree.go Filter file views rather than search 2026-03-07 20:04:31 +01:00
file_tree_test.go Rename Name to Path in File and CommitFile 2025-03-20 12:31:34 +01:00
file_tree_view_model.go Filter file views rather than search 2026-03-07 20:04:31 +01:00
node.go Fix discarding submodule changes in nested folders 2025-04-07 09:42:19 +02:00
README.md properly resolve cyclic dependency 2022-01-22 10:48:51 +11:00

FileTree Package

This package handles the representation of file trees. There are two ways to render files: one is to render them flat, so something like this:

dir1/file1
dir1/file2
file3

And the other is to render them as a tree

dir1/
  file1
  file2
file3

Internally we represent each of the above as a tree, but with the flat approach there's just a single root node and every path is a direct child of that root. Viewing in 'tree' mode (as opposed to 'flat' mode) allows for collapsing and expanding directories, and lets you perform actions on directories e.g. staging a whole directory. But it takes up more vertical space and sometimes you just want to have a flat view where you can go flick through your files one by one to see the diff.

This package is not concerned about rendering the tree: only representing its internal state.