Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

project_panel: Add Alt/Opt+Click to expand/collapse a directory and all its contents #22896

Open
wants to merge 8 commits into
base: main
Choose a base branch
from

Conversation

0xtimsb
Copy link
Contributor

@0xtimsb 0xtimsb commented Jan 9, 2025

Closes #15966

This PR adds Alt/Opt+Click to expand or collapse a directory and all its contents.

Context:

The current expand_entry scans immediate child subdirectories if they aren’t loaded, while expand_all_for_entry scans the entire subtree. The latter takes longer, so we wait for it to complete to ensure accurate results.

For full directory scan, instead of using refresh_entries_for_paths(vec![path]), which requires specifying all explicit paths to refresh, we use add_path_prefix_to_scan, which eliminates the need to list every path. Both methods internally call reload_entries_for_paths, which invokes should_scan_directory. This determines whether to scan deeper based on a path prefix match between the given directory and its subdirectories, returning true for add_path_prefix_to_scan.

The existing code handles scanning, removing path prefixes after scans complete, and managing ignored directories.

How it works (Expand):

  1. Alt clicking on non-ignored closed directory, expands it and all its subdirectories, except ignored subdirectories. This helps while working on mono repos, where you might not want to expand dirs like node_modules, dist, etc or git submodules, when you expand any root dir.

In example, draft and posts dir are ignored dir.

expand-1.webm
  1. Alt clicking on ignored closed directory, expands it and all its subdirectories. This is when you explicitly want to do it, on dirs like node_modules, dist, etc.

In example, dist dir is ignored dir.

expand-2.webm
  1. In case of auto folded subdirectories, expand all action will take precedence over it. That is, it will unfold all the subdirectories inside clicked dir. This is intentional, as user explicitly wants to reveal as much content as possible. (This is my personal opinion on how it should work).
expand-3.webm

How it works (Collapse):

  1. Alt clicking any opened directory will collapse it and all its children, whether ignored or not. This is when you want to start from a fresh state.

  2. When auto fold is enabled in settings, collapse action will also fold all subdirectories that it can fold. This is to bring it back to its fresh state as mentioned above.

collapse-1-2.webm

Future:

  • Using keybinding to expand/collapse all for selected entry
  • Handle expand/collapse all for folded entry

Todos:

  • Expand entries logic
  • Handle remote worktree for expand
  • Figure out scan complete status
  • Move expansion logic to status update event
  • Collapse entries logic
  • Handle fold/unfold subdirs interaction
  • Do not expand git ignored sub-dirs
  • Tests
  • Test Remote

Release Notes:

  • Added Alt/Opt+Click functionality to expand or collapse a directory and all its contents.

@cla-bot cla-bot bot added the cla-signed The user has signed the Contributor License Agreement label Jan 9, 2025
@0xtimsb 0xtimsb changed the title project_panel: Add recursive expand/collapse for entry project_panel: Adss Alt/Opt+Click to expand/collapse a directory and all its contents Jan 10, 2025
@0xtimsb 0xtimsb changed the title project_panel: Adss Alt/Opt+Click to expand/collapse a directory and all its contents project_panel: Add Alt/Opt+Click to expand/collapse a directory and all its contents Jan 10, 2025
@0xtimsb 0xtimsb marked this pull request as ready for review January 10, 2025 10:21
@0xtimsb
Copy link
Contributor Author

0xtimsb commented Jan 10, 2025

I'm curious why we don't need a UI update event in the case of expand_entry, as it also requests a scan. What happens if the scan completes after the UI has already been updated? Am I missing something?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
cla-signed The user has signed the Contributor License Agreement
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Have alt+clicking on a folder recursively collapse all entries underneath it
1 participant