Commit Graph

746 Commits

Author SHA1 Message Date
vasilito 92ff00b6cc tlc: CLI +N argument for tlcedit/tlcview (MC parity)
Both binaries support MC-style +N positional: 'tlcedit +42 file.txt' opens at line 42. tlcview gains line support for the first time. main.rs updated for new open_file(file, start_line) signature.
2026-06-20 10:26:45 +03:00
vasilito 4e4863e122 tlc: FM→editor/viewer handoff with line numbers
FindOutcome::View/Edit now carry Option<u64> line number from FindHit. FileManager gains open_editor_at_line() and open_viewer_at_line() that jump to the target line after opening.
2026-06-20 10:26:28 +03:00
vasilito ca7f22ae34 tlc: start_line plumbing + buttonbar in editor/viewer
Editor gains goto_line(), viewer gains jump_to_line() + open_file(start_line). Both editor and viewer now render the F-key buttonbar at the bottom (1Help 2Save... / 1Help 2Wrap...).
2026-06-20 10:26:04 +03:00
vasilito a351544731 tlc: add shared buttonbar widget — F-key bar renderer
Shared render_buttonbar() function used by both editor and viewer to draw the MC-style function-key bar at the bottom of the screen.
2026-06-20 10:25:43 +03:00
vasilito 3d80ed0a40 tlc: MC parity P1+P2+P3 — 40+ keybindings, viewer parity, feature gaps (1094 tests) 2026-06-20 09:16:38 +03:00
vasilito c55fb91e8f tlc: tlcedit/tlcview full MC parity — E1-E5 (21 features, +2525 lines)
E1 — Wire broken features:
- Auto-indent on Enter (insert_newline_with_indent)
- Shift-Arrow selection bindings (6 keys)
- Ctrl-Home/Ctrl-End document navigation
- Nroff rendering in viewer (man page bold/underline)
- Viewer search (/) and goto-line (g) prompts
- Macro recording/playback (Ctrl-R/Ctrl-P)
- Search history dedup fix + n/N navigation

E2 — Editor visual premium:
- Vertical scrollbar (direct buffer manipulation)
- Accent-bar gutter (brand red stripe)
- Relative line numbers (Ctrl-L toggle)
- Cursor shape modes (Block/Bar/Underline)
- Completion popup with accent highlight

E3 — Functional parity:
- Word-wrap toggle (Alt-W)
- Viewer syntax highlighting (syntect integration)
- OSC 52 clipboard (SSH clipboard sharing)
- Save As prompt (Shift-F2)

E4 — Advanced features:
- Code folding (folding.rs, Ctrl-F1 toggle, gutter markers)
- Tags jump (tags.rs, Ctrl-]/Ctrl-T, TagTable parser)
- Replace per-match state infrastructure

E5 — Premium transitions:
- Dialog slide-in animation ( FileManager dialog_anim)
- Large-file loading indicator (spinner for >1MiB)
- Smooth scroll interpolation (PageUp/PageDown, 25%/tick)

New modules: cursor_shape.rs, folding.rs, tags.rs, clipboard_osc52.rs
Tests: 1093 passed (up from 1062)
2026-06-20 02:13:17 +03:00
vasilito b4a0d68f66 tlc: status bar clock + dialog scrollbars on help/jobs/find
Status bar now shows wall clock (HH:MM UTC) and spinner character
right-aligned. Native ratatui scrollbars added to Help, Jobs, and Find
dialogs when content overflows visible area.
2026-06-20 00:07:30 +03:00
vasilito 135439d763 tlc: editor visual polish — current-line highlight, bracket match, modified gutter mark
Current-line highlight (bg lightened by 12 per channel on cursor line),
bracket-match tracking (forward/backward search for ()[]{}<> pairs),
modified-line gutter mark (▌ in warning color when buffer is dirty).
bracket_flash field + find_matching_forward/backward methods on Editor.
2026-06-20 00:07:26 +03:00
vasilito 445edc39db tlc: panel visual polish — rounded borders, scrollbars, alt rows, 3D buttons
Rounded panel borders (BorderType::Rounded), native ratatui scrollbars
on file lists, alternating row colors (even rows lightened), file-size
inline bar in panel footer (█ proportional to largest file), 3D button
effect (▔ top + ▁ bottom rows when focused), and panel switch border
flash (cyan info color for 4 frames on Tab).
2026-06-20 00:07:05 +03:00
vasilito d79dc12af3 tlc: add animation tick loop, popup shadows, and FileManager animation state
100ms poll timeout with frame counter driving spinner/toast ticks.
Popup rendering gains drop shadows (▓), backdrop dim (Modifier::DIM),
and rounded borders. FileManager struct gets spinner, toasts,
frame_count, panel_switch_anim fields plus sync_animations() method.
2026-06-19 23:58:50 +03:00
vasilito 3164d82227 tlc: add spinner + toast widgets and visual Theme methods
Phase 1 animation foundation: braille spinner widget (10 frames),
toast notifications with slide-in animation (25% per frame), and 6 new
derived Theme methods (shadow, current_line_bg, alt_row_bg,
button_highlight, button_shadow, spinner_fg) for all subsequent visual
polish phases. 1041 tests pass.
2026-06-19 23:58:28 +03:00
vasilito d25a19b0cd Fix terminal resize hang: poll stdin with 200ms timeout
Blocking events.next() caused the app to hang indefinitely when the
terminal was resized without any key press — no data arrived on stdin
to wake the blocking read.

Fix: use rustix::event::poll() with 200ms timeout on stdin fd. On
timeout, check terminal size and redraw if changed. On data available,
read events as before.

Added rustix 'stdio' feature for rustix::stdio::stdin() BorrowedFd.
2026-06-19 21:03:58 +03:00
vasilito 48d2b41924 Add subshell.rs tests (9 tests for ShellManager, shell_path, run_command)
Covers: ShellManager::new() empty state, shell_path() env var
resolution and fallback, run_command success/failure/nonzero-exit/
filesystem-write/multiline, pty_login_helper_path resolution.
1031 tests total (was 1022).
2026-06-19 20:38:33 +03:00
vasilito 3d4fe13001 Split editor module: mod.rs 2646→434 non-test lines
Extract impl Editor blocks into submodules following the filemanager
split pattern:
- handlers.rs (551 lines): all key handling methods
- render.rs (571 lines): render method + rendering helpers
- bracket.rs (84 lines): bracket matching free functions

mod.rs retains: struct definition, basic impl, open_file, all tests.
Pure code-move refactoring — no logic changes.
1022 tests pass, 0 new warnings.
2026-06-19 20:35:47 +03:00
vasilito 477b7efc33 Wire 4 orphaned dialogs: chattr (C-x e), filter (Alt-f), encoding (Alt-e), connection (Alt-n)
4 dialog modules existed with full implementations and tests but were
completely unreachable — no Cmd variants, no DialogState variants, no
dispatch arms, no keymap bindings. This commit wires them in:

- ChattrDialog: C-x e — file attribute viewer for cursor file
- FilterDialog: Alt-f — persistent panel glob filter
- EncodingDialog: Alt-e — display encoding selector
- ConnectionDialog: Alt-n — network connection (FTP/SFTP/Shell)

All 4 now have: Cmd variants, DialogState variants, dispatch arms,
handle_dialog_key arms, render routing, apply_finished_dialog no-ops.
1022 tests pass, 0 new warnings.
2026-06-19 20:10:26 +03:00
vasilito 272f098884 tlc: cleanup — remove dead code, debug logging, fix import placement
- Remove two dead pub fn render free functions (render.rs + mod.rs)
- Remove debug_raw_event/should_log_raw_event (always-on /tmp logging)
- Move use std::sync::Arc to top of dispatch.rs
- Fix unused imports from dead code removal
2026-06-19 19:57:36 +03:00
vasilito 4edc3ddd5b tlc: revert to blocking-read event loop — fix terminal resize on Redox
The poll-based event loop (rustix::event::poll with 200ms timeout) broke
terminal size detection on Redox. When tui.size() returned (0,0) via
unwrap_or_default() after a failed dup(1,"winsize"), the size-change
check would clear the screen and render nothing.

Ratatui's draw() already calls autoresize() on every frame, which queries
backend.size() and resizes buffers automatically. The manual size check
and poll-based wake-up were redundant and harmful.

Reverted to the original blocking-read approach that worked on Redox:
  stdin.lock().events_and_raw().next()  →  process key  →  render()
Resize is detected on the next keypress via ratatui's built-in autoresize.
2026-06-19 19:06:02 +03:00
vasilito 612732dc39 tlc: clean up unused imports from module split + resize fix
- dispatch.rs: remove 8 unused module imports, 4 unused dialog type imports
- mod.rs: remove unused LinkKind import
- app.rs: remove unused AsFd import and stdin_fd variable
- Clippy back to 2 pre-existing warnings only (mc_ext + compare)
2026-06-19 18:06:31 +03:00
vasilito ac12f9e398 tlc: fix terminal resize detection with poll-based event loop
MC uses SIGWINCH→self-pipe→select(stdin+pipe) for resize detection.
In safe Rust (#![deny(unsafe_code)]), the equivalent is polling stdin
with a 200ms timeout via rustix::event::poll. This wakes the main loop
every 200ms even without key input, allowing terminal size check and
full redraw on resize. Same result as MC's signal-driven approach
without requiring unsafe signal handlers.

Previously the event loop blocked indefinitely on events.next() —
terminal resize was only detected on the next keypress.
2026-06-19 17:49:56 +03:00
vasilito 940e5f55c5 tlc: split filemanager/mod.rs into submodules + comment out mc in configs
- Split filemanager/mod.rs into dispatch.rs, render.rs, dialog_ops.rs,
  format_utils.rs (3567→~1200 lines in mod.rs)
- Comment out mc in redbear-mini.toml and redbear-full.toml per user request
- Enable tlc in redbear-full.toml (was temporarily disabled)
- 1022 tests pass, zero behavior changes
2026-06-19 17:30:28 +03:00
vasilito 035304f15b tlc: implement actual TUI event loops for tlcedit and tlcview
Both open_file() functions were stubs that opened the file but never
launched the terminal interface. tlcedit/tlcview would silently exit
without displaying anything.

- editor::open_file(): create Tui, render editor, run key event loop,
  handle Save/Close/SaveThenClose/DiscardThenClose results
- viewer::open_file(): create Tui, render viewer, run key event loop,
  exit when handle_key returns true
2026-06-19 13:00:22 +03:00
vasilito ab5172c7e0 base: add fbcond to BINS, installs, and /usr/bin copy path — fixes missing console binary 2026-06-19 12:58:33 +03:00
vasilito f555ead47c tlc: fix CTRL+O crash + terminal resize + wire LOW dialog modules
- recipe.toml: stage tlc-pty-login binary alongside tlc/tlcedit/tlcview
  (was missing from ISO, causing CTRL+O subshell spawn failure on Redox)
- app.rs: run_external() catches spawn errors instead of propagating via ?
  (prevents app exit when subshell/command fails to spawn)
- app.rs: add terminal resize detection to event loop
  (tracks last_size, calls terminal.clear() + render() on size change)
- mod.rs: add missing module declarations for chattr_dialog, connection_dialog,
  encoding_dialog, filter_dialog (enables 36 new dialog tests, 1022 total)
2026-06-19 12:45:12 +03:00
vasilito dc68054305 restore lost packages from 0.2.3 + fix overwritten 0.2.4 files
- Restore 29 recipe symlinks (libdrm, qtbase, dbus, sddm, pipewire, etc.)
- Restore 33 patches (KDE, libdrm, mesa, pipewire, sddm, wireplumber)
- Restore 20+ local/scripts (audit, lint, test, build helpers)
- Restore src/cook/scheduler.rs, status.rs, gnu-config/
- Restore scripts/patch-inclusion-gate.sh, run_mini1.sh, validate-collision-log.sh
- Recover TLC source from HEAD (was overwritten by 0.2.3 checkout)
- Recover 11 local/docs plans from HEAD (were overwritten)
- Recover qt6-wayland-smoke symlink from HEAD
- Fix MOTD: remove garbled ASCII art, use clean text
- Update version: 0.2.0 -> 0.2.4 in os-release, motd, config
- Reduce filesystem_size: 1536 -> 512 MiB
- Add ABSOLUTE RULE to AGENTS.md: never delete/ignore packages
- Reduce pcid scheme log verbosity: info -> debug
2026-06-19 12:39:14 +03:00
vasilito ffbe098ef8 config: add tlc to redbear-mini and redbear-full; create recipe symlink
TLC (Twilight Commander) was missing from both ISO configs. Added
tlc = {} to [packages] in redbear-mini.toml and redbear-full.toml.
Created missing symlink: recipes/tui/tlc -> ../../local/recipes/tui/tlc.
2026-06-19 11:47:25 +03:00
vasilito 06b316076f restore driver-manager + pcid service + lost configs from 0.2.3→0.2.4 sync
Root cause: the 0.2.4 upstream sync silently removed driver-manager (our
in-house PCI driver orchestrator) and never added a pcid init service,
leaving /scheme/pci uncreated and breaking all PCI device enumeration.

Changes:
- base-initfs/recipe.toml: restore driver-manager dep, binary copy,
  drivers.d/ config dir, set -eo pipefail
- redbear-device-services.toml: add driver-manager = {} to packages
- redbear-boot-stages.toml: restore from 0.2.3 (109 lines)
- protected-recipes.toml: restore from 0.2.3 (99 lines)
- redbear-mini.toml: add boot-stages to include chain
- driver-manager Cargo.toml: fix pcid path from symlink to physical
- base fork pointer: acdcb183 (adds 35_pcid.service to initfs)
- UPSTREAM-SYNC-PROCEDURE.md: document sync flaw, never-delete rule,
  driver-manager rationale
- PACKAGE-BUILD-QUIRKS.md: document pcid/pcid-spawner architecture,
  Redox flag values, kernel kcall on AcpiScheme

Verified: redbear-mini boots to login prompt in QEMU UEFI with working
PCI enumeration (6 devices), e1000d network driver, DHCP, driver-manager.
2026-06-19 11:39:24 +03:00
vasilito 49f383b386 tlc: README + PLAN — 986 tests, 95% binding parity, compare files done 2026-06-19 10:40:07 +03:00
vasilito 6ade75f02b tlc: compare files (Ctrl-d) — LCS-based diff viewer dialog
New compare.rs module with CompareDialog showing line-by-line diff
of two files (active panel cursor vs other panel cursor). Uses
LCS dynamic programming algorithm for optimal diff.

Color-coded output: context lines (foreground), removed lines
(error/red, bold), added lines (info/green, bold). Supports
scrolling (arrows, PageUp/Down, g/G for Home/End).

Error handling for unreadable files. MAX_LINES=10000 OOM guard.
10 new tests covering diff algorithm edge cases and dialog lifecycle.
986 tests total, 0 failures.
2026-06-19 10:39:25 +03:00
vasilito cc90bb1337 tlc: PLAN.md — 94% binding parity, split ratio + menubar expansion done 2026-06-19 10:27:39 +03:00
vasilito 5a8e33b387 tlc: expand F9 menubar with all implemented commands
Left/Right menus: Quick view, Info, External panelize, Reload added.
File menu: Filtered view, Relative symlink, Edit symlink, Directory
size added.
Command menu: Compare directories, Directory hotlist, Screen list,
View/edit history, External panelize, Active VFS list, Background
jobs added.

Menubar now exposes all 20+ implemented Cmd variants across 5 menus.
2026-06-19 10:26:35 +03:00
vasilito 2bcaba5340 tlc: implement split ratio adjustment (SplitMore/SplitLess)
Alt-Shift-Right grows left panel 5%, Alt-Shift-Left shrinks 5%.
Alt-= resets to 50/50. Range clamped to 10-90%.
panel_areas() uses split_ratio when equal_split is false.
3 new tests. 976 tests total, 0 failures.
2026-06-19 10:23:38 +03:00
vasilito 8aa02e1ed0 tlc: fix QuitQuiet (Shift-F10) to actually quit without confirmation 2026-06-19 10:18:38 +03:00
vasilito 71be82258a tlc: build linux release — 5.0 MB tlc, 973 tests, clippy clean 2026-06-19 10:15:14 +03:00
vasilito 35273ccaca Update base submodule pointer for acpid openat fix 2026-06-19 09:55:31 +03:00
vasilito ba03fa9fc3 Update kernel + base submodule pointers for ACPI kcall + O_RDONLY fixes
Author: vasilito <adminpupkin@gmail.com>
2026-06-19 09:47:38 +03:00
vasilito f44cf75930 tlc: update README + PLAN — 973 tests, 90% binding parity, all MEDIUM gaps closed 2026-06-19 09:06:14 +03:00
vasilito 6f3e129068 tlc: PanelInfo (C-x i) and PanelQuickView (C-x q) modes
PanelInfo: inactive panel shows filesystem summary + cursor file
metadata (size, mode, owner, links, mtime/atime/ctime).
PanelQuickView: inactive panel shows first 30 lines of cursor file
(binary detection via NUL byte scan).

Both modes are toggle-only (not in Alt-L listing cycle). Pressing
the chord again restores normal Full listing.

New ListingMode variants: Info, QuickView.
New Cmd variants: PanelInfo, PanelQuickView.
Ctrl-X dispatcher: 'i' and 'q' follow-up keys wired.
render_info_body and render_quickview_body renderers added.

9 new tests (toggle round-trips, cycle-skip, dispatch integration,
quickview text/binary). 973 tests total, 0 failures.
2026-06-19 09:05:31 +03:00
vasilito ed77278066 tlc: update PLAN.md + README — VFS integration done, clippy clean, 964 tests
PLAN.md §3.A item 6 (VFS): resolved — panel now browses archives in-place
PLAN.md §3.A item 8 (clippy): resolved — all lints clean
PLAN.md §3.B item 18 (clippy): resolved
PLAN.md §14.1 summary: 67/77 bindings (87%), remaining MEDIUM in progress
README: 964 tests, phase 15h file highlighting
2026-06-19 08:57:43 +03:00
vasilito 277b3f0b16 tlc: clippy cleanup — fix all lint warnings
Fixes 19 clippy warnings across 9 files:
- filehighlight.rs: iter().any() → contains()
- info.rs: manual clamp → .clamp()
- jobs.rs: format!("{}",x) → to_string(), clone → from_ref, allow if_same_then_else
- mod.rs: clone → from_ref, Box::new(x::new()) → Box::default(), allow collapsible_match
- panel.rs: io::Error::new(Other,..) → io::Error::other(..), merge identical archive ext branches
- subshell.rs: allow needless_return (cfg-gated false positive)
- tar.rs, cpio.rs: simplify boolean expressions
- macro.rs: allow collapsible_match (guard would change fallthrough semantics)

1 pre-existing warning remains (Include(String) never read in mc_ext.rs).
964 tests pass, 0 failures.
2026-06-19 08:51:10 +03:00
vasilito fde8384189 tlc: VFS archive panel integration — browse archives in-place
Panel now enters archives (.tar, .tar.gz, .tar.bz2, .tar.xz, .zip,
.cpio) when pressing Enter, browsing their contents like directories.
Pressing '..' at the archive root exits back to the local filesystem.

Three new Panel fields: vfs (Box<dyn Vfs> backend), vfs_path (VfsPath
inside archive), vfs_archive (local PathBuf of archive file).

New methods: try_enter_archive(), replace_directory_vfs(),
display_path(), is_in_vfs(), is_archive_extension() helper.

Title bar shows 'archive.tar:/inner/path' when browsing inside an
archive via synthesized display path.

5 new tests for archive extension detection (case-insensitive).
964 tests total, 0 failures.
2026-06-19 08:40:42 +03:00
vasilito ddc95702a0 tlc: update README — 959 tests, phase 15h file highlighting 2026-06-19 08:35:47 +03:00
vasilito 77750b5128 tlc: file highlighting — type-based coloring in panel entries
New filehighlight.rs module categorizes files by extension into 9 types
(Normal, Executable, Archive, Audio, Video, Image, Source, Documentation,
Database). Each type maps to a theme palette color via file_type_color().

entry_style() in mod.rs now applies file type colors for non-directory,
non-symlink files. Executable detection uses permission bits (owner_exec
|| group_exec || other_exec).

13 new unit tests covering all categories, case insensitivity, hidden
files, and edge cases. 959 tests total, 0 failures.
2026-06-19 08:33:22 +03:00
vasilito a8e10e731a tlc: update PLAN.md parity tables — 65/77 bindings done (84%)
Updated statuses for features implemented in recent batches:
- ScreenList (Alt-backtick), EditHistory (Alt-Shift-E) → Done
- SymlinkRelative (C-x s), SymlinkEdit (C-x v) → Done
- CompareDirs (C-x d) → Done
- ExternalPanelize (C-x !), Jobs (C-x j), VfsList (C-x a) → Done
- FilteredView (Alt-!) → Done
- Editor prompts (Find/Replace/GotoLine/GotoCol/SaveAs) → Done
- Updated mod.rs line count (1597→3119)
2026-06-19 08:32:00 +03:00
vasilito a223e2ff67 Fix redbear-mini build: syslog va_list, ps2d, fbcond, acpid, bootstrap, m4, bash
Core fixes to get redbear-mini building and booting via UEFI:

relibc: Use 'VaListImpl as va_list' in syslog so cbindgen outputs va_list
  instead of unknown VaListImpl type (matches stdio pattern). Fixes
  openssl3 and all C consumers of syslog.h.

base fork (f97da5b0): ps2d missing info! import, ps2d dead variable,
  fbcond drm-0.15 API fix, acpid 31 errors (ivrs/mcfg modules, duplicate
  methods, packed fields, dmar copy-paste bug), bootstrap abort_immediate
  removal (feature removed from nightly)

redox-driver-sys: Add PciQuirkFlags re-export for crate-root imports

bash: Regenerate P1-mksyntax-host-headers.patch with proper unified diff

m4: Fix getlocalename_l unsafe wrapper

config: Comment out mc (requires glib-2.0 chain, not needed for mini)

UEFI boot verified in QEMU — boots to RedBear login prompt.

Author: vasilito <adminpupkin@gmail.com>
2026-06-19 08:30:37 +03:00
vasilito ffaaf1a540 tlc: update README stats — 946 tests, phase 15g complete 2026-06-19 06:50:30 +03:00
vasilito 59a4672acd tlc: Ctrl-X chord system, Compare Dirs, SymlinkRelative/Edit, format paragraph, viewer tail-f
- Ctrl-X prefix chord: dispatch_ctrl_x_followup routes 9 follow-up keys
  (d/j/c/o/l/s/v/a/!) to their respective commands
- Compare Dirs (C-x d): size-only mode matching MC behavior, marks
  files that differ between left and right panels
- SymlinkRelative (C-x s): creates symlinks with relative target paths
  via relpath_from() helper
- SymlinkEdit (C-x v): reads existing symlink target, opens edit dialog
  with for_editing() constructor, removes old link before recreating
- ScreenList/EditHistory/FilteredView dialogs wired through dispatcher,
  handle_dialog_key, apply_finished_dialog, and render
- Editor format paragraph (Alt-P): wrap_paragraph + paragraph_range +
  reformat_paragraph_at in format.rs, 29 unit tests
- Viewer growing buffer: toggle_growing/check_growing for tail -f mode,
  detects file growth and appends new content

946 tests pass (default), 964 (all features), 0 failures
2026-06-19 06:49:15 +03:00
vasilito 9c5c5733cc tlc: add screen_list, edit_history, filtered_view dialog modules 2026-06-19 06:34:02 +03:00
vasilito 28b9621f17 fix: uutils-tar build + ncurses patch for ncurses-6.6
uutils-tar (WIP recipe):
- Pin to commit 8ecd8e0 (rust-version 1.85.0, compatible with our
  nightly-2025-10-03 toolchain)
- Fix nix-0.30.1 Redox bug: SaFlags_t declared as c_ulong but libc-0.2.184
  defines SA_*/sa_flags as c_int. Patch SaFlags_t to c_int.
- Enable nix pty module for Redox (relibc has all POSIX PTY functions)
- Add forkpty to libc-0.2.184 Redox module (relibc's pty.h defines it
  but libc crate doesn't expose it)

ncurses:
- Remove obsolete first hunk from redox.patch (cf_includedir lines
  already removed in ncurses-6.6). Keep second hunk (redox* platform
  detection).
2026-06-19 03:35:28 +03:00
vasilito 121ad07561 tlc: comprehensive feature batch — syntax highlighting, jobs/panelize/vfs dialogs, bug fixes
Editor:
- Wire syntect Highlighter into Editor::render() with viewport scroll
  state replay and selection-aware span splitting
  (split_spans_for_selection helper)
- F5/F6 escape sequence fallback parser (parse_unsupported_fkey)
  handles CSI-tilde, SS3, and Linux console F-key encodings
- Arrow key cursor sync (Option B — every move_*/select_* syncs buffer)
- ESC no-op on main screen (MC parity, F10 only exit)

FileManager:
- Background jobs dialog (Cmd::Jobs / C-x j) with Arc<Mutex<JobRegistry>>,
  worker threads, progress bars, retry, dismiss — zero unsafe
- External panelize dialog (Cmd::Panelize / C-x !)
- VFS list dialog (Cmd::VfsList / C-x a)
- Dialog consistency: MkDir/Delete now use render_button_row
- Panel cursor starts on first entry (index 1, not ..)
- Command execution returns immediately (no pause/prompt)
- Confirm dialog, sort dialog modules
- Backspace navigates to parent dir (MC parity, already worked)

Viewer:
- Magic number detection module
- NROFF backspace-overstrike rendering for man pages

Binaries:
- tlcedit (standalone editor, 1.2 MB)
- tlcview (standalone viewer, 661 KB)

Docs:
- PLAN.md §14 parity tables reconciled with comprehensive audit
- README.md updated: 109 files, 43k lines, 902 tests, 3 binaries

Stats: 902 tests pass (default), 920 (all features), 0 failures, 1 pre-existing warning
2026-06-19 03:23:42 +03:00
vasilito 1648147405 docs: add PACKAGE-BUILD-QUIRKS.md, update sync docs with build quirks
- Create local/docs/PACKAGE-BUILD-QUIRKS.md: central reference for all
  known cross-compilation build issues (DYNAMIC_INIT behavior, m4
  CFLAGS/LDFLAGS ordering, ninja-build BUILD_TESTING, general patterns)
- Update UPSTREAM-SYNC-PROCEDURE.md: add m4 LDFLAGS ordering quirk
  (must be set AFTER DYNAMIC_INIT), ninja-build BUILD_TESTING=OFF,
  DYNAMIC_INIT overwrite behavior, source reversion root cause summary
- Update AGENTS.md: reference PACKAGE-BUILD-QUIRKS.md in WHERE TO LOOK
  table, add DYNAMIC_INIT and cross-compilation test conventions
- Fix ninja-build recipe: add cmakeflags=['-DBUILD_TESTING=OFF']
  (tests require host gtest which conflicts with Redox sysroot stdlib.h)
2026-06-19 01:32:06 +03:00