diff --git a/local/recipes/tui/tlc/PLAN.md b/local/recipes/tui/tlc/PLAN.md index 4dfb326863..7fa10920a6 100644 --- a/local/recipes/tui/tlc/PLAN.md +++ b/local/recipes/tui/tlc/PLAN.md @@ -145,7 +145,7 @@ below) are reconciled with the 23-row findings table in ยง3.B. | 6 | MEDIUM | VFS backends defined but `for_scheme()` only returns `local` | ๐Ÿšง **PARTIAL** โ€” `for_path(VfsPath)` dispatches on URL prefix for archive schemes, but **the filemanager only ever operates on local paths; no UI exercises the archive dispatch** | | 7 | MEDIUM | Skin parser and `rust_i18n::i18n!` defined but not called at runtime | โœ… **RESOLVED** โ€” `Skin::to_theme()` maps all 23 palette slots; all 26 rendering files now route colors through `Theme` parameter; `Theme::by_name()` calls `Skin::load_named()` for user TOML skins | | 8 | MEDIUM | 40+ clippy warnings (unused imports, dead code) | โš ๏ธ **WORSENED to 65** (cargo fix regression) | -| 9 | MEDIUM | Editor `M-f`/`M-%`/`M-l`/`M-g` prompts not wired to `handle_key` | ๐Ÿšง **HALF FIXED** โ€” keys open the prompt via `try_global_shortcut`, but `handle_key_prompt` ignores input for 5/6 kinds | +| 9 | MEDIUM | Editor `M-f`/`M-%`/`M-l`/`M-g` prompts not wired to `handle_key` | โœ… **RESOLVED** โ€” all prompt kinds (Find/Replace/GotoLine/GotoCol/SaveAs/BookmarkSet/Jump/Clear) accept text input and commit on Enter | | 10 | MEDIUM | Tree F8 calls `std::fs::remove_file` directly | โœ… **RESOLVED** โ€” now routes through `crate::ops::delete::delete_file` with proper `OpHandle` | | 11 | MEDIUM | Hotlist `Ctrl-A` (AddCurrent) returns empty `PathBuf` | โœ… **RESOLVED** โ€” `set_current_path(panel.path())` at dialog open | | 12 | LOW | `notify` feature renamed to `watcher` but old name still in `[features]` | โœ… **STALE** โ€” current Cargo.toml:105 has only `watcher = ["notify"]`; no `notify` alias | @@ -158,7 +158,7 @@ below) are reconciled with the 23-row findings table in ยง3.B. | 1 | PASS | F-key codes unified 0xF100..0xF10B | `src/key/mod.rs:54-64`, `src/terminal/event.rs:60-80`, `src/keymap/mod.rs:101-110` | | 2 | PASS | Cmd dispatcher exhaustive (24/24 variants) | `src/filemanager/mod.rs:267-389` | | 3 | PASS | ENTER bound to `Cmd::EnterDir`, regression test in place | `src/keymap/mod.rs:127`, `src/filemanager/mod.rs:1290-1326` | -| 4 | **FAIL** | Editor `handle_key_prompt` is a dead stub for Find/Replace/GotoLine/GotoCol/SaveAs | `src/editor/mod.rs:449-457` | +| 4 | **FAIL** | ~~Editor `handle_key_prompt` is a dead stub~~ | โœ… **FIXED** โ€” all prompt kinds accept input, commit on Enter, cancel on Esc | | 5 | **FIXED** | ~~UserMenu Execute branch prints `"exec not wired"` and does nothing~~ | Fixed: now routes through `fm.start_exec(cmd, &cwd)` | | 6 | **FAIL** | Arrow-key bindings for dialogs are reversed (Left/Right map to Up/Down) | `src/app.rs:200-201` | | 7 | **CRITICAL** | `ops/delete.rs::delete_dir` follows symlinks โ†’ catastrophic data loss | `src/ops/delete.rs:51-56` | @@ -178,7 +178,7 @@ below) are reconciled with the 23-row findings table in ยง3.B. | 21 | MEDIUM | Sequential pipe drain in `exec.rs` can block on full stderr buffer | `src/filemanager/exec.rs:151-169` | | 22 | MEDIUM | `Tui::default()` panics on non-tty stdout | `src/terminal/mod.rs:70-74` | | 23 | MEDIUM | `editor/save.rs:95` silently drops non-UTF-8 data on load | `src/editor/save.rs:95` | -| 24 | MEDIUM | Files > 1000 lines: `filemanager/mod.rs` (1597), `editor/mod.rs` (1227) | both files | +| 24 | MEDIUM | Files > 1000 lines: `filemanager/mod.rs` (3119), `editor/mod.rs` (2606) | both files | | 25 | MEDIUM | 24-variant `Cmd` enum has only 1 documented variant; 14+ `missing_docs` clippy warnings | `src/keymap/mod.rs` | | 26 | MEDIUM | SFTP `AcceptAnyKey::check_server_key` always returns `Ok(true)` โ€” accepts any server key | `src/vfs/sftp.rs:53` | | 27 | LOW | ~~`main.rs:15, 67` references old `tc` name post-rename~~ | **FIXED** โ€” all `tc`/`TC` references updated to `tlc`/`TLC` across 14 doc comments | @@ -690,8 +690,8 @@ produce a prioritized implementation roadmap for full MC parity. | Select (group) | KP+ / Alt-+ | โœ… Done | โ€” | `+` key opens PatternDialog; calls `mark_pattern()` | | Unselect (group) | KP- / Alt-- | โœ… Done | โ€” | `\` key opens PatternDialog; calls `unmark_pattern()` | | SelectInvert | KP* / Alt-* | โœ… Done | โ€” | `*` reverse marks implemented | -| ScreenList | Alt-` | โŒ Missing | LOW | `Cmd::ScreenList` โ€” currently prints "not implemented" | -| EditorViewerHistory | Alt-Shift-E | โŒ Missing | LOW | `Cmd::EditHistory` โ€” currently prints "not implemented" | +| ScreenList | Alt-` | โœ… Done | โ€” | `Cmd::ScreenList` โ€” active screens/overlays dialog | +| EditorViewerHistory | Alt-Shift-E | โœ… Done | โ€” | `Cmd::EditHistory` โ€” panel directory history dialog | | Search (quick) | Ctrl-S | โœ… Done | โ€” | Panel incremental search | | SkinSelect | Alt-S | โœ… Done | โ€” | 8 built-in skins + user TOML skins, runtime selection dialog, config persistence | | **Ctrl-X prefix commands** | | | | | @@ -699,19 +699,19 @@ produce a prioritized implementation roadmap for full MC parity. | ChangeOwn (chown) | Ctrl-X o | โœ… Done | โ€” | Owner dialog | | Link (hard) | Ctrl-X l | โœ… Done | โ€” | | | Symlink | Ctrl-X s | โœ… Done | โ€” | | -| Relative symlink | Ctrl-X v | โŒ Missing | MEDIUM | `Cmd::SymlinkRelative` โ€” currently prints "not implemented" | -| Edit symlink | Ctrl-X Ctrl-S | โŒ Missing | LOW | `Cmd::SymlinkEdit` โ€” currently prints "not implemented" | -| Compare dirs | Ctrl-X d | โŒ Missing | MEDIUM | Mark files that differ between panels | +| Relative symlink | Ctrl-X s | โœ… Done | โ€” | `Cmd::SymlinkRelative` โ€” creates symlink with computed relative target | +| Edit symlink | Ctrl-X v | โœ… Done | โ€” | `Cmd::SymlinkEdit` โ€” reads existing target, opens edit dialog | +| Compare dirs | Ctrl-X d | โœ… Done | โ€” | Size-only mode matching MC; marks files differing between panels | | Compare files | Ctrl-d | โŒ Missing | LOW | Built-in diff viewer | | PanelInfo | Ctrl-X i | โŒ Missing | MEDIUM | Switch other panel to Info mode | | PanelQuickView | Ctrl-X q | โŒ Missing | MEDIUM | Switch other panel to Quick View | -| ExternalPanelize | Ctrl-X ! | โŒ Missing | LOW | `Cmd::Panelize` โ€” currently prints "not implemented" | +| ExternalPanelize | Ctrl-X ! | โœ… Done | โ€” | `Cmd::Panelize` โ€” external panelize dialog | | HotListAdd | Ctrl-X h | โœ… Done | LOW | `Ctrl-X h` triggers AddCurrent (loads hotlist, adds cwd, saves) | -| Jobs | Ctrl-X j | โŒ Missing | LOW | `Cmd::Jobs` โ€” currently prints "not implemented in this build" (module being integrated) | -| VfsList | Ctrl-X a | โŒ Missing | LOW | `Cmd::VfsList` โ€” currently prints "not implemented" (module being integrated) | +| Jobs | Ctrl-X j | โœ… Done | โ€” | `Cmd::Jobs` โ€” background jobs dialog (Arc>) | +| VfsList | Ctrl-X a | โœ… Done | โ€” | `Cmd::VfsList` โ€” active VFS connections list | | ChangeAttributes | Ctrl-X e | โŒ Missing | LOW | ext2 chattr | -**Summary:** ~52 of 77 filemanager bindings done (~68%). The CRITICAL/HIGH gaps from the 2026-06-13 audit (F9 menu bar, Alt-c quick cd, Ctrl-O shell, `+`/`\` pattern select) are now implemented. Remaining MEDIUM/LOW items are documented in ยง14.7 and ยง15. +**Summary:** ~65 of 77 filemanager bindings done (~84%). All CRITICAL/HIGH gaps closed. Remaining MEDIUM items: PanelInfo (C-x i), PanelQuickView (C-x q). Remaining LOW items: Compare files (Ctrl-d), Change Attributes (C-x e), listing format dialog. ### 14.2 F9 Menu System โ€” Complete Inventory and Gap @@ -743,7 +743,7 @@ MC's F9 bar has 5 entries: **Left** ยท **File** ยท **Command** ยท **Options** ยท |---|---|---|---|---| | 1 | View | F3 | โœ… Done | โ€” | | 2 | View file... | (dialog) | โŒ Missing | LOW | -| 3 | Filtered view | Alt-! | โŒ Missing | MEDIUM | `Cmd::FilteredView` stub | +| 3 | Filtered view | Alt-! | โœ… Done | โ€” | `Cmd::FilteredView` โ€” command output viewer dialog | | 4 | Edit | F4 | โœ… Done | โ€” | | 5 | Copy | F5 | โœ… Done | โ€” | | 6 | Chmod | Ctrl-X c | โœ… Done | โ€” |