Commit Graph
165 Commits
Author SHA1 Message Date
Abdessamad Derraz 39c2809a4b fix: polish the screens audit 11 named
Long messages scroll with their position, a small window says why the
questions come line by line, one bar rule per width, the folder a
config names sits under it and wraps whole, the help while typing a
filter lists what does not type, the plan names --core and --region,
pc finds the computer setups, rows keep sizes near their names, a
partial result counts once, a quit is said as one, the WSL browser
names drives by letter and No connection names the pack.
2026-10-27 16:27:47 +01:00
Abdessamad Derraz 0fb1047231 feat: count game data apart from BIOS files
The installer knew BIOS files from game data and no count showed it.
The plan, the line menu and the result count them apart for a list that
marks game data, the plan gets a game data row and the menu a g key,
each toggling it in one press, and one sentence says what game data is.
2026-10-27 16:03:25 +01:00
Abdessamad Derraz 992bc8ce70 fix: keep paths whole and spelled one way
A Termux run named /sdcard and /storage/emulated/0 for one storage, read
saves/<core> as a folder, split a backup path and the restore command
inside their words and named no folder for missing game data. Paths are
spelled as the BIOS folder was named, folders per core are said in
words, the result keeps paths and commands whole, and the game data line
names the folder it goes in.
2026-10-27 15:50:51 +01:00
Abdessamad Derraz 2ab01d3eec fix: ignore Ctrl-Z when no shell can resume
Started with no job-control shell, a Ctrl-Z stopped the screen and its
launcher for good. The key now stops it only when its process group is
a shell's job, and the bar says why otherwise.
2026-10-27 15:39:50 +01:00
Abdessamad Derraz 0fa4552dae fix: refuse only the axis a list lacks
The MinUI family's lists record cores and regions and no system: every
narrowing was refused with a remedy that fetched the same list. Each
option is now refused by the axis missing, with what works, and a pack
names its platform's list only when that list records the axis. Line
mode names what c chooses and skips a question with one answer, and
Options leaves out parallel downloads when nothing is downloaded.
2026-10-27 15:37:24 +01:00
Abdessamad Derraz 5704dd6793 fix: offer a drive by the folder its system reads
RetroArch's folder question numbered a Batocera SHARE drive and filled
its root. A drive is now offered by its own system's BIOS folder, one
nothing names by its bios folder, and another system's is left out and
named with the options that reach it. A list or pack card setups read
too opens on those setups, in both modes.
2026-10-27 15:19:03 +01:00
Abdessamad Derraz 19bd88131d fix: show outside text, never obey it
Pack and list paths with a control character are refused, the names a
list records, card labels, folders and events pass one filter, and a
folder a configuration names with one is not taken.
2026-10-27 14:46:14 +01:00
Abdessamad Derraz a334ace439 fix: name cards by files no menu rewrites
A KNULLI card renamed in its menu was read as a Batocera SHARE drive.
KNULLI is now named by about.info first, Batocera by its own hostname,
and a drive two systems fit is said instead of guessed. Runs without
questions see mounted cards as the screen does and stop on two setups.
The card marker table of the wiki is generated.
2026-10-27 14:40:28 +01:00
Abdessamad Derraz 6fd831fc67 fix: keep pack system names out of the terminal
A pack's system titles, names and ids are read only without control
characters, and the systems list and the same-choice line go through
screen_text. The --yes row of the option table says it implies
--no-input.
2026-10-27 12:36:15 +01:00
Abdessamad Derraz 31c574aab0 fix: line mode and screen share one decision
Answers code_audit_17 and tui_audit_10: the folder found after o, SHARE
drive roots, one same-choice command, a counted confirm step in line
mode, counts from the narrowed list, read-only advice without sudo,
systems recorded in packs, Ctrl-Z stopping the whole job, and the
wording, layout and docs items.
2026-10-27 12:24:26 +01:00
Abdessamad Derraz 77bdf7c206 fix: line mode answers in the merged tests
The TERM probe test answers the setup question, first-install keeps
its button name on one line and under 400 words, and --page of the
installer doc script is named on the page.
2026-10-27 10:19:37 +01:00
Abdessamad Derraz 8c1887fd0c chore: merge main into the audit answers 2026-10-27 09:57:16 +01:00
Abdessamad Derraz 559494ae43 fix: line mode reads the screen's decisions
Answers code_audit_16 and tui_audit_9: share drives give their bios
folder, card markers stop at mount points, a model finds its family,
the folder question quits on q, pages move by the rows drawn, and a
folder the installer proposed is created without the guard.
2026-10-27 09:55:50 +01:00
Abdessamad Derraz 9cf0f9177d chore: merge installer tables from code
# Conflicts:
#	install.ps1
#	install.sh
#	install/launchers/index.json
#	scripts/measurement_records.py
#	tests/test_install_tui.py
#	wiki/installer.md
2026-10-27 09:48:44 +01:00
Abdessamad Derraz 47ed945b4a feat: write installer tables from install.py
scripts/generate_installer_doc.py rewrites the marked tables of
wiki/installer.md: options from build_parser(), events from EVENT_KEYS,
exit codes from the sys.exit calls, RETROBIOS_PAD values and the keys of
each route from TUI_ROUTES, the one table the bar, the help and the stop
line now read. Prose cells are kept, a row the code gains stops the
script until its text is written, and --check runs in the tests. The
site drops the markers.

The full screen falls back to the line questions where the terminal's
terminfo moves no cursor the ANSI way (vt52, glass terminals), and --tui
names why. The line mode draws no escape code with TERM unset, dumb or
such a terminal. Ctrl-Z typed on the screen stops the run as SIGTSTP
does, the terminal handed back and redrawn on fg. A window too small
names 40x12 and its own size.

Pty tests check the modes, the cursor and the main screen after Ctrl-C,
Ctrl-D, SIGTERM, SIGHUP and Ctrl-Z then fg. Tests from a mutmut run over
the device filter, the card bounds and the WSL paths raise its score
from 62/71 to 71/71. The parser lists its options in the page's order,
with NAME, PATH, NAMES and N as arguments.
2026-10-27 09:47:44 +01:00
Abdessamad Derraz 89d148dbea docs: line parity, card refusals and pad keys
First install says where a device name is typed. The key table gives each
pad route its buttons, the --plain claims match the parity work, and the
error event, exit code and --dest rows name the card refusals.
2026-10-27 08:43:11 +01:00
Abdessamad Derraz 6afa9b97d1 docs: card setups, devices and offline endings
installer.md: one card reading, AmberELEC and EmuELEC cards, device names in the setup list and the line menu, the copy browser on the first mounted card, offline endings, the refused --dest in the exit table. first-install.md: a handheld found by its name, Finished with files missing.
2026-10-27 06:10:48 +01:00
Abdessamad Derraz 0c38fd7c13 docs: card setups, Continue and offline codes 2026-10-27 02:55:33 +01:00
Abdessamad Derraz 92ee80f40b docs: describe the card screen and None
The installer page says what a card system named on a computer does
(Where is the SD card?, Look again, the Card root prompt), that Enter on
None unticks every system and Back keeps the ticks, and that Space
continues outside a list of ticks. KNULLI and ROCKNIX no longer have a
computer default. The first-install page names the card screen.
2026-10-27 00:31:40 +01:00
Abdessamad Derraz dc225acb57 chore: merge the last installer items
# Conflicts:
#	install.ps1
#	install.py
#	install.sh
#	install/launchers/index.json
2026-10-26 23:10:30 +01:00
Abdessamad Derraz e919d8478e feat: pick one system in a few presses
A long systems list opens on None. A there unticks every system and
moves to the first one, and A on a system with nothing ticked installs
that one alone, so Enter still continues. Inside muxterm, which keeps
PgUp and PgDn for its scrollback, Left and Right on the D-pad page.

One system of 66 at 40x15 took 17 presses with a pad, 57 in muxterm;
it now takes 12 on both. The pyyaml check of the device lists skips
where pyyaml is not installed.
2026-10-26 22:20:29 +01:00
Abdessamad Derraz 57811270e3 fix: card setups, pager lines, devices, data size
A system that runs from its SD card (Onion, spruceOS, muOS, KNULLI,
MinUI...) named with --platform on a computer no longer takes that
computer's RetroArch folder: one mounted card of that system is used,
at a terminal the card root is asked, without questions the run stops
on the --dest example. The interface opens the card screen with the
mounted cards first.

The result pager scrolls and counts lines, so its last line is
reachable at every size. The setup filter knows the devices each
setup runs on, from the guides and the firmware pages. A new event
kind, data, gives the bytes of the data trees, and the plan shows
them.
2026-10-26 22:01:02 +01:00
Abdessamad Derraz da573fc6f3 chore: merge main into the p3 fixes 2026-10-26 21:19:43 +01:00
Abdessamad Derraz 4ea9ee1712 docs: describe the app put on a card 2026-10-26 21:01:45 +01:00
Abdessamad Derraz 7b49e3bbed chore: merge main into the p3 fixes 2026-10-26 21:01:32 +01:00
Abdessamad Derraz 831e187f84 fix: close idle before an install as a quit 2026-10-24 04:08:23 +02:00
Abdessamad Derraz 3797b482d2 feat: set the save folder from the options 2026-10-24 03:59:21 +02:00
Abdessamad Derraz 378487eca8 fix: tell a default set aside from none at all 2026-10-24 03:53:10 +02:00
Abdessamad Derraz fbe5ba4e3e docs: say the installer opens a full screen
The README, the installer steps, the choice of what to install and platform detection still described the line prompts as what a terminal shows. They now name the full-screen interface first, with --plain for the questions, and say that no default folder is taken where detection was refused.
2026-10-24 03:49:10 +02:00
Abdessamad Derraz d2ba7e18ba fix: search past a folder this user cannot open
One closed folder under HOME (~/.config/EmuDeck at 000) made the whole
detection return nothing: a RetroArch whose retroarch.cfg was readable
was lost and the run fell back to a folder it does not read. Every
detection probe now goes through _exists, _is_dir or _is_file, which
count a refused place as absent, name the closed folder once, and let
the other probes go on. The decorator stays as the last net.

The refusal is an unsearched event before detect. The interface keeps
the line above the list of setups. At HOME or a drive root A goes into
a visible subfolder, never a card or drive row nor .cache, and with
none it stays on Use this folder and says where it is. A default folder
taken because the platform was not found is no longer called detected.
2026-10-24 02:23:57 +02:00
Abdessamad Derraz 6936302133 chore: merge round 5 wiki fixes 2026-10-24 01:30:33 +02:00
Abdessamad Derraz bd1c58b6f0 fix: say why detection cannot look, then go on
HOME kept across su without - made every detection probe raise PermissionError, and the run and the interface ended on a traceback. Detection now finds nothing there, says which folder this user cannot open and how to go on, on the first screen too.
2026-10-24 01:28:43 +02:00
Abdessamad Derraz 50da5970b7 docs: pin the packager route to one commit 2026-10-24 01:01:07 +02:00
Abdessamad Derraz f51bc069d5 fix: refuse a detected folder under a closed one
A system_directory read from retroarch.cfg under a folder this user cannot open ended the run, and the interface before its first screen, on a traceback. It now gets the refusal --dest gets. On a handheld, an idle close on an error screen shows that error for a few seconds instead of waiting for a button that cannot come.
2026-10-24 00:31:40 +02:00
Abdessamad Derraz 2a6a122d56 fix: close an idle error screen with its code
An idle close exited 0 on every screen, an error one too. It now exits with the error's or the result's code and prints that screen's words after the idle line.
2026-10-23 23:29:03 +02:00
Abdessamad Derraz 5c02196b27 fix: refuse a --dest this user cannot reach
Path.exists() raised PermissionError from _missing_dest in line mode and from _choose in the interface. The run now names the folder and exits 1 (error event stage dest), and the interface asks for another folder.
2026-10-23 23:24:36 +02:00
Abdessamad Derraz 14e3923533 chore: merge the round 4 installer fixes 2026-10-23 22:48:24 +02:00
Abdessamad Derraz 3db8ddae2b feat: name the save folder and the pack on screen
The plan and the result now say how many files go to the save folder and
where, from a new saves event. With --from-pack they say the files come
from the pack, not a download. A stop asked for (Start+Select, SIGHUP)
ends on the plain outcome, without the log's last lines.
2026-10-23 22:34:24 +02:00
Abdessamad Derraz e003828e26 fix: ask nothing when the output goes to a file
install.py > log.txt at a terminal wrote the menu into the file and
waited for an answer nobody saw. A question now needs stdin and stdout on
a terminal, otherwise the run goes on as with --no-input and says so.
2026-10-23 22:30:47 +02:00
Abdessamad Derraz 451ca88d7c chore: merge main into the round 4 fixes 2026-10-23 22:25:16 +02:00
Abdessamad Derraz 76da554da9 fix: read retroarch.cfg for cores in a --dest run
A run given --dest, as every interface run is, never read the config
naming libretro_directory, so only installed cores found none where line
mode found them. core_dirs now asks _retroarch_config_for, as the save
directory does, and the advice to drop --dest goes.
2026-10-23 22:12:49 +02:00
Abdessamad Derraz b26ce7cbdc fix: close an idle interface past its first screen
RETROBIOS_IDLE_EXIT only counted while the first screen was up. Given
--platform, the check runs and the plan follows without a key, so the
close never came. It now counts from the end of the last run, as long as
no key has been pressed.
2026-10-23 22:07:31 +02:00
Abdessamad Derraz d1414263fa feat: name the pad inside muxterm
gptokeyb2 owns the pad in muxterm on muOS with PortMaster, and muxterm keeps PgUp and PgDn for its scrollback. The launcher now says so with RETROBIOS_PAD=gptokeyb_muxterm, and the hints name the gptokeyb buttons with no paging key.
2026-10-23 21:47:55 +02:00
Abdessamad Derraz b88f23947a chore: merge main into the round 4 fixes
# Conflicts:
#	wiki/installer.md
2026-10-23 21:37:25 +02:00
Abdessamad Derraz ade4e2b48b docs: say a mounted card is found by itself 2026-10-23 21:34:31 +02:00
Abdessamad Derraz 68349f246c chore: merge main into the launcher fixes 2026-10-23 21:29:54 +02:00
Abdessamad Derraz e7d27a264d fix: hide the pad from muxterm on every muos build
muxterm was allowed vendor and product 0001:0001, the id gpio-keys
gives the H700 pad on muOS before 2026-08-28: muxterm and gptokeyb2
both read it and every button acted twice. The allow-list is now
0000:0001, which SDL never reads back for a device (a vendor of 0 makes
a name GUID, read back as 0:0), so a pad plugged in later stays hidden.

- muxterm keeps PgUp and PgDn for its scrollback: in muxterm L1 and R1
  send nothing, and the README and wiki stop promising paging there.
- The offline detection runs with RETROBIOS_INSTALL_OFFLINE=1 instead
  of a closed loopback URL.
- Every launcher sets RETROBIOS_IDLE_EXIT=300 for the interface.
- ROCKNIX: control.ini's -sudokill goes through a sudo stub that runs
  nothing, so the mapper starts with -1.
- The sentinel ends with its launcher, a closed terminal app writes its
  status, a mapper lost mid-run is said and named (gptokeyb2 included),
  and the unwritable-card message stays in view.
- Tests: an SDL GUID model, a gptokeyb2 that outlives its kill, an
  interface that ignores SIGTERM, a zombie, a SIGHUP to the inner run,
  arrow bytes at the question, ROCKNIX's sudo.
2026-10-23 21:29:48 +02:00
Abdessamad Derraz 49b2a69567 docs: exit 129, offline refusals and pad variables
The exit status names 129 for a closed window and the --offline
refusals of --target and --list-targets, and the events say a crash
leaves no end line. RETROBIOS_PAD and RETROBIOS_IDLE_EXIT join the
environment table, muxterm's missing paging and the save directory
found under --dest are said, and the options at a glance list
--declared-only and --offline. The first install page no longer
promises a controller on a computer, and gives the RetroPie command
for Windows too.
2026-10-23 21:11:45 +02:00
Abdessamad Derraz 8a8931e4c6 feat: write the options glance from the parser
The glance on the installer page is written from install.py's argument parser when the page is built, grouped by GLANCE_GROUPS. An option no group names lands under Other, so a new option cannot be left off the page.
2026-10-23 20:19:26 +02:00
Abdessamad Derraz db0065e4f5 chore: merge main into the round 4 fixes
# Conflicts:
#	tests/test_audit_regressions.py
2026-10-23 20:04:42 +02:00