diff --git a/local/recipes/tui/tlc/PLAN.md b/local/recipes/tui/tlc/PLAN.md index dbd87599aa..c42108f7af 100644 --- a/local/recipes/tui/tlc/PLAN.md +++ b/local/recipes/tui/tlc/PLAN.md @@ -4,8 +4,8 @@ Phases 14a, 14b, 15a, 15b (partial), 15c (partial), 15d, 14e, 16–29 substantially complete. Dialog unification: §17.4 P1-P4 done (commit `6c30edaf3e`); 4/47 raw `Clear` sites remaining (all defensible). P5-P7 deferred. -**Last updated:** 2026-06-21 — §17.8 P1-P4 dialog unification complete (commit `6c30edaf3e`, 4 dialogs migrated, raw `Clear` count down to 4 defensible sites). -**Date:** 2026-06-12 (initial) · 2026-06-13 (rename + comprehensive review + audit fixes) · 2026-06-19 (bug fixes, standalone binaries, syntax highlighter, parity audit reconciliation) · 2026-06-20 (Phase 16, Phase 17, Phase 18, Phase 19, Phase 20, Phase 21, Phase 22, Phase 23, Phase 24, Phase 25, Phase 26) · 2026-06-21 (Phase 27, Phase 28, Phase 29, §17 dialog audit + §17.8 P1-P4 completion) +**Last updated:** 2026-06-21 — P5 verification (no change needed) + Linux packaging end-to-end smoke test + QEMU ISO boot verification. INSTALL.sh bugs fixed (commit `20ed0246b3`). +**Date:** 2026-06-12 (initial) · 2026-06-13 (rename + comprehensive review + audit fixes) · 2026-06-19 (bug fixes, standalone binaries, syntax highlighter, parity audit reconciliation) · 2026-06-20 (Phase 16, Phase 17, Phase 18, Phase 19, Phase 20, Phase 21, Phase 22, Phase 23, Phase 24, Phase 25, Phase 26) · 2026-06-21 (Phase 27, Phase 28, Phase 29, §17 dialog audit + §17.8 P1-P4 completion + Linux dist/ packaging + QEMU boot verification + P5 deferred-with-reason) **Branch:** `0.2.4` **Decision authority:** User selected Option A (Pure Rust TLC) on 2026-06-12. **Scope:** Reimplement ALL of Midnight Commander (MC 4.8.33) in pure Rust. @@ -1517,11 +1517,16 @@ These are key hints (Tab/Enter/Esc), not clickable buttons. Optional: migrate to two F9 menus diverge in chrome. Estimated 5-10 LOC, no test needed (the dropdown behavior is unchanged). -5. **P5 — `editor/render.rs:469-519` SaveBeforeClose Y/N/Esc legend (LOW–MEDIUM)** — - replace hand-rolled Spans with `render_button_row` for consistency with the migrated - file-manager dialogs. Estimated 20-30 LOC + 1 test. Defensible to leave as-is because - the prompt label and Y/N/Esc are tightly coupled (the prompt text mentions - "Save before close?" then "Y/N/Esc" — they're a single sentence, not a button bar). +5. **P5 — `editor/render.rs:469-519` SaveBeforeClose Y/N/Esc legend (RESOLVED 2026-06-21, + no change needed)** — verified that the Y/N/Esc prompt already uses the unified + `[dialog] _default_` and `[dialog] dhotnormal` colour keys (`render_button_row` + consumes the same keys for text and hotkey colours). The visual is **inline letters + within a sentence** ("Press Y to save, N to discard, Esc to cancel"), which + matches MC's save-before-close prompt exactly. Migrating to `render_button_row` + would split this into two lines (message + button bar) and break MC parity for + no functional gain. **No code change required**; the prompt is already palette- + consistent with the unified button system. Future migration only warranted if + a user explicitly reports confusion — defer to user-feedback-driven polish. 6. **P6 — viewer/editor SaveBeforeClose unification (LOW)** — viewer uses inline header-bar text; editor uses popup. **These are two different render strategies for @@ -1600,14 +1605,45 @@ exactly 4 sites, all defensible: Tests: 1184 passing, 0 failing (was 1180; +4 from P1-P4). Both release builds clean (default + `--features sftp`). -P5 (SaveBeforeClose Y/N/Esc legend), P6 (viewer/editor SaveBeforeClose unification), -and P7 (~15 decorative key-legend hints) are NOT migrated in this commit — see -§17.4 for rationale and deferral reasoning. +P5 (SaveBeforeClose Y/N/Esc legend) was resolved 2026-06-21 without code +change — verified the prompt already routes through the same `[dialog] _default_` / +`dhotnormal` colour palette that `render_button_row` uses; layout difference +(inline sentence vs button bar) is intentional MC parity. See §17.4 row 5. + +P6 (viewer/editor SaveBeforeClose unification) and P7 (~15 decorative key-legend +hints) remain deferred — see §17.4 rows 6-7 for rationale. --- ## Changelog +- **2026-06-21** — **P5 deferred with rationale + Linux packaging verification**: §17.4 row 5 + verified that editor SaveBeforeClose Y/N/Esc prompt already routes through the same + `[dialog] _default_` / `dhotnormal` colour palette that `render_button_row` consumes + for text and hotkey colours. The visual difference (inline sentence "Press Y to save, + N to discard, Esc to cancel" vs button bar layout) is intentional MC parity. No + code change required. **Linux package smoke test**: `tlc-1.0.0-linux-x86_64.tar.gz` + `INSTALL.sh --user` runs cleanly into a temp $HOME after fixing duplicate `mkdir -p` + + missing subdir creation for `--user` mode (commit `20ed0246b3`). `tlc version` + / `tlcedit --version` / `tlcview ` all respond. `.deb` extracted cleanly + via `dpkg-deb -x` and binaries verified. **QEMU ISO boot**: `build/x86_64/redbear-mini.iso` + (512 MB) boots to userspace via OVMF — kernel loaded, initfs switchroot to /usr + succeeded, all init services attempted. `strings` confirms `usr/bin/{tlc,tlcedit, + tlcview,tlc-pty-login}` are bundled in the ISO. Pre-existing tokio panic in + redbear-sessiond (D-Bus daemon) is unrelated to tlc. + +- **2026-06-21** — **PLAN §17.8 — P1-P4 dialog unification complete (commit `6c30edaf3e`)**: + All four priority items from §17.4 executed. P1 widget/dialog.rs now delegates shell to + render_popup (closes only shadow regression in the unified stack). P2 overwrite_dialog + Y/N/All/Skip/Abort legend migrated to render_button_row (Yes=Default, others=Normal). + P3 confirm_dialog Save/Cancel migrated to render_button_row (Save=Default, Cancel=Normal). + P4 editor/menubar.rs F9 dropdown migrated to render_popup, matching the + already-migrated filemanager/menubar.rs dropdown. Acceptance criterion from §17.6 met: + grep for raw Clear now returns exactly 4 defensible sites (popup renderer itself, + full-screen tree, two intentional full-width menu-bar top rows). widget/dialog.rs no + longer appears. 1184 tests passing (+4 from P1-P4). PLAN §17.8 added with full + per-P commit refs and acceptance-criterion audit. + - **2026-06-20** — **Phase 19 column (rectangular) block operations**: TLC editor gains MC's column-block mode. New `SelectionMode::{Stream, Column}` enum on `Cursor`; column anchor stored in parallel `column_anchor: Option`; `column_selection_rect()` returns normalized `ColumnRect {start_line, start_col, end_line, end_col}` (start_line ≤ end_line, start_col ≤ end_col); `selected_text()` for column mode joins rows with `\n`; `delete_selection()` strips rectangle columns from each line, leaves rest intact; `start_selection()`/`start_column_selection()` are mutually exclusive (switching clears the other anchor). Alt+Arrow / Alt+PgUp / Alt+PgDn start/extend column selection (MC `MarkColumn*` bindings). F5/F6/F8 work transparently in column mode via unified `selected_text()` / `delete_selection()`. Renderer uses new `line_selection_range()` helper to compute per-line byte ranges from either stream or column source; column cells get `marked_bg` highlight. PLAN.md §15d row 21 marked ✅ Done. 1119 tests pass. - **2026-06-20** — **Phase 18 dialog popup shell migration (complete)**: All 16 listed dialogs from the Phase 17 follow-up list migrated from bespoke `Clear`+`Block` to `terminal::popup::render_popup`, inheriting MC-matching rounded borders + drop shadow + title styling. Commits: `e4987256f7` (Phase 18a: filter_dialog, encoding_dialog, pattern_dialog, confirm_dialog, overwrite_dialog, layout_dialog, panel_options, chattr_dialog), `2b2b5803ba` (Phase 18c: permission, owner, connection_dialog, config_dialog, compare, sort_dialog, progress), `c032c9a787` (menubar dropdown via user commit). Tree (full-screen) intentionally skipped — uses the entire frame, no popup shell. Each migrated dialog lost 8-15 lines of inline geometry+Clear+Block+title styling; title now derives from `[dialog] dtitle` via the unified shell.