feat: toggle hidden directories in cd-browser with . key

This commit is contained in:
2026-04-02 16:28:21 +02:00
parent 9688ed0974
commit ab689cfbb4
6 changed files with 69 additions and 13 deletions

View File

@@ -13,28 +13,41 @@ class DirectoryEntry:
has_children: bool
def list_directories(path: Path) -> list[DirectoryEntry]:
def list_directories(path: Path, show_hidden: bool = False) -> list[DirectoryEntry]:
"""Return direct child directories sorted by name."""
directory_path = path.expanduser().resolve()
entries: list[DirectoryEntry] = []
for child in directory_path.iterdir():
if child.is_dir():
entries.append(
DirectoryEntry(
name=child.name,
path=child,
has_children=has_subdirectories(child),
)
if not child.is_dir():
continue
if not show_hidden and child.name.startswith("."):
continue
entries.append(
DirectoryEntry(
name=child.name,
path=child,
has_children=has_subdirectories(child, show_hidden=show_hidden),
)
)
return sorted(entries, key=lambda entry: entry.name.casefold())
def has_subdirectories(path: Path) -> bool:
def has_subdirectories(path: Path, show_hidden: bool = False) -> bool:
"""Return whether the directory contains at least one subdirectory."""
directory_path = path.expanduser().resolve()
return any(child.is_dir() for child in directory_path.iterdir())
for child in directory_path.iterdir():
if not child.is_dir():
continue
if not show_hidden and child.name.startswith("."):
continue
return True
return False