Commit 6d7bbd2
authored
Add file explorer sidebar with SSH support, git status, and visual styles (#1963)
* Add Finder-like file explorer sidebar with SSH support
Adds a right-side file explorer panel toggled via Cmd-Shift-E or a
titlebar button. Uses native NSOutlineView for Finder-like disclosure,
rounded row selection, alternating backgrounds, and 13pt medium text.
Local workspaces use FileManager, SSH workspaces use ssh commands via
the existing connection. Root paths display with ~ for home-relative
paths. Expanded nodes persist across provider changes so SSH nodes
re-hydrate when the connection becomes available.
Includes configurable keyboard shortcut (KeyboardShortcutSettings),
localized strings (EN/JA), and unit tests for path resolution and
store hydration behavior.
* Fix titlebar accessory constraint loop crash
The FileExplorerTitlebarAccessoryViewController triggered an infinite
Auto Layout loop by calling invalidateIntrinsicContentSize during
viewDidLayout, causing NSGenericException. Replaced with a one-shot
size computation in init + a single re-measure in viewDidAppear.
* Add file explorer features: git status, context menu, drag, hidden files, FS watching
- Wire FileExplorerView into right panel with resize handle
- Reactive CWD sync via Combine (no polling)
- Git status colors (modified/added/deleted/renamed/untracked) for local and SSH
- Context menu: Open in Default Editor, Reveal in Finder, Copy Path, Copy Relative Path
- Drag file to terminal pastes path
- Hidden files toggle (eye icon in header)
- DispatchSource-based directory watching with 300ms debounce
- Footer folder icon toggle button
- Shortcut changed to Cmd+Option+B
- Fix SSH pipe deadlock (read before waitUntilExit)
- Fix SSH infinite reload loop (guard hydrateExpandedNodes on path change)
- Debug logging for file explorer state changes
* DRY resizer, AppKit refactor, style debug window, no animations
* File explorer: DRY titlebar hints, child NSPanel, no-animation fix
- Move file explorer button into trailing NSTitlebarAccessoryVC (right-aligned)
- Share modifier state via .titlebarShortcutHintsVisibilityChanged notification
from TitlebarShortcutHintModifierMonitor (same timing, same delay as left hints)
- Render hint pill in child NSPanel (borderless, nonactivating, ignoresMouseEvents)
to float above terminal portal z-order
- Extract ShortcutHintPill as shared component (sidebar tabs, left titlebar, explorer)
- Fix animation: DispatchQueue.main.async in performKeyEquivalent to escape AppKit's
implicit NSAnimationContext; .transition(.identity) on panel views; always-in-tree
rendering with width=0 when hidden instead of conditional insertion
- Show hidden files by default, remove toggle button from header
- Increase disclosure triangle leading margin via frameOfOutlineCell/frameOfCell
- Add .fullScreenAuxiliary + .ignoresCycle to hint panel
- Style debug window in Debug > Debug Windows > File Explorer Style Debug
* Feature flag: KVO observation for live toggle
* Feature flag: notification-based toggle sync
* Remove feature flag and titlebar button, Cmd+Option+B always enabled
---------
Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>1 parent 165cf6e commit 6d7bbd2
12 files changed
Lines changed: 2461 additions & 49 deletions
File tree
- GhosttyTabs.xcodeproj
- Resources
- Sources
- Update
- cmuxTests
- vendor
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
10 | 14 | | |
11 | 15 | | |
12 | 16 | | |
| |||
205 | 209 | | |
206 | 210 | | |
207 | 211 | | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
208 | 216 | | |
209 | 217 | | |
210 | 218 | | |
| |||
518 | 526 | | |
519 | 527 | | |
520 | 528 | | |
| 529 | + | |
| 530 | + | |
521 | 531 | | |
522 | 532 | | |
523 | 533 | | |
| |||
612 | 622 | | |
613 | 623 | | |
614 | 624 | | |
| 625 | + | |
| 626 | + | |
615 | 627 | | |
616 | 628 | | |
617 | 629 | | |
| |||
841 | 853 | | |
842 | 854 | | |
843 | 855 | | |
844 | | - | |
845 | | - | |
846 | | - | |
| 856 | + | |
| 857 | + | |
| 858 | + | |
| 859 | + | |
| 860 | + | |
847 | 861 | | |
848 | 862 | | |
849 | 863 | | |
| |||
912 | 926 | | |
913 | 927 | | |
914 | 928 | | |
| 929 | + | |
| 930 | + | |
915 | 931 | | |
916 | 932 | | |
917 | 933 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
69323 | 69323 | | |
69324 | 69324 | | |
69325 | 69325 | | |
| 69326 | + | |
| 69327 | + | |
| 69328 | + | |
| 69329 | + | |
| 69330 | + | |
| 69331 | + | |
| 69332 | + | |
| 69333 | + | |
| 69334 | + | |
| 69335 | + | |
| 69336 | + | |
| 69337 | + | |
| 69338 | + | |
| 69339 | + | |
| 69340 | + | |
| 69341 | + | |
| 69342 | + | |
| 69343 | + | |
| 69344 | + | |
| 69345 | + | |
| 69346 | + | |
| 69347 | + | |
| 69348 | + | |
| 69349 | + | |
| 69350 | + | |
| 69351 | + | |
| 69352 | + | |
| 69353 | + | |
| 69354 | + | |
| 69355 | + | |
| 69356 | + | |
| 69357 | + | |
| 69358 | + | |
| 69359 | + | |
| 69360 | + | |
| 69361 | + | |
| 69362 | + | |
| 69363 | + | |
| 69364 | + | |
| 69365 | + | |
| 69366 | + | |
| 69367 | + | |
| 69368 | + | |
| 69369 | + | |
| 69370 | + | |
| 69371 | + | |
| 69372 | + | |
| 69373 | + | |
| 69374 | + | |
| 69375 | + | |
| 69376 | + | |
| 69377 | + | |
| 69378 | + | |
| 69379 | + | |
| 69380 | + | |
| 69381 | + | |
| 69382 | + | |
| 69383 | + | |
| 69384 | + | |
| 69385 | + | |
| 69386 | + | |
| 69387 | + | |
| 69388 | + | |
| 69389 | + | |
| 69390 | + | |
| 69391 | + | |
| 69392 | + | |
| 69393 | + | |
| 69394 | + | |
| 69395 | + | |
| 69396 | + | |
| 69397 | + | |
| 69398 | + | |
| 69399 | + | |
| 69400 | + | |
| 69401 | + | |
| 69402 | + | |
| 69403 | + | |
| 69404 | + | |
| 69405 | + | |
| 69406 | + | |
| 69407 | + | |
| 69408 | + | |
| 69409 | + | |
| 69410 | + | |
69326 | 69411 | | |
69327 | 69412 | | |
69328 | 69413 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2275 | 2275 | | |
2276 | 2276 | | |
2277 | 2277 | | |
| 2278 | + | |
2278 | 2279 | | |
2279 | 2280 | | |
2280 | 2281 | | |
| |||
7100 | 7101 | | |
7101 | 7102 | | |
7102 | 7103 | | |
| 7104 | + | |
| 7105 | + | |
7103 | 7106 | | |
7104 | 7107 | | |
7105 | 7108 | | |
7106 | 7109 | | |
7107 | 7110 | | |
| 7111 | + | |
7108 | 7112 | | |
7109 | 7113 | | |
7110 | 7114 | | |
| |||
11065 | 11069 | | |
11066 | 11070 | | |
11067 | 11071 | | |
| 11072 | + | |
| 11073 | + | |
| 11074 | + | |
| 11075 | + | |
| 11076 | + | |
| 11077 | + | |
| 11078 | + | |
| 11079 | + | |
| 11080 | + | |
11068 | 11081 | | |
11069 | 11082 | | |
11070 | 11083 | | |
| |||
0 commit comments