- 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
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.
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.
- 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
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
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.
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.
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.
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.
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>
- 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
- 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)
The build-redbear.sh script was applying patches from local/patches/ to
recipes/core/{kernel,base,relibc,installer}/source/ via apply_patch_dir().
For path= (local fork) components, recipes/core/<comp>/source is a SYMLINK
to local/sources/<comp>. The patches went through the symlink and modified
the fork directly — re-adding old code like SchedPolicy that was already
removed from the fork.
This was the root cause of the kernel source reversion bug that caused
intermittent build failures (V157, V159): old patches re-applying stale
code to the synced fork through symlinks.
Fix:
- Remove apply_patch_dir calls for kernel, base, relibc, installer
(all use path= local fork model — changes are committed to the fork)
- Keep apply_patch_dir for bootloader (still uses git= + patches)
- Remove stash_nested_repo_if_dirty for relibc (no patches to stash)
- Update verify-overlay-integrity.sh expected patch symlinks
- Update apply-patches.sh to not create kernel/base patch symlinks
- Fix 005-qtbase signature marker (wrong path: libs → wip/qt)
- Remove 78 old patch symlinks from recipes/core/kernel/ (cleanup)
The old patch symlinks (P0-*.patch through P17-*.patch, redox.patch,
redbear-consolidated.patch) were leftover from the git+patches model.
With path = "../../../local/sources/kernel", the cookbook creates a
symlink to the local fork and does NOT apply any patches. The patches
are preserved in local/patches/kernel/ for reference only.
Use local/sources/kernel/ as path source instead of git+patches.
The fork is synced to upstream b93260ed and has all Red Bear changes
squash-merged. Old patches preserved in local/patches/kernel/ for
reference only.
Author: vasilito <adminpupkin@gmail.com>
Use local/sources/installer/ as path source instead of git+patch.
The fork is synced to upstream 142b2d6. The ext4/GRUB patch will
be re-applied to the fork as a follow-up.
Author: vasilito <adminpupkin@gmail.com>
Aligns all Red Bear custom recipe dependencies with the syscall 0.8.x
version used by the upstream-synced base and relibc forks.
Author: vasilito <adminpupkin@gmail.com>
The redox arm of acquire_iopl was using 'crate::Result' which is a
1-generic type alias. Use std::result::Result<(), Error> instead.
Also rename unused 'product' param to '_product' in lookup_hid_quirks.
io.rs uses redox_syscall::dup, ::CallFlags, ::ProcSchemeVerb but was
missing the 'use syscall as redox_syscall' alias (was removed earlier
because cargo check passed locally without it, but actual build needs it).
Also fixed: the non-redox arm of acquire_iopl was using crate::Result
which is a 1-generic type alias; std::result::Result with 2 generics
is what's needed here.
Removed leftover cfg attribute and duplicate use crate::Result.