From f8881e0874377f34fd8e9c0da6735030b6f7560d Mon Sep 17 00:00:00 2001
From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com>
Date: Tue, 27 Oct 2026 16:30:24 +0100
Subject: [PATCH] docs: describe runs without questions and offline
The options and environment tables say what --no-input finds and when
it stops, and how the words name RETROBIOS_INSTALL_OFFLINE. A test holds
the options screen to leave out parallel downloads offline.
---
tests/test_install_tui.py | 9 +++++++++
wiki/installer.md | 10 ++++++----
2 files changed, 15 insertions(+), 4 deletions(-)
diff --git a/tests/test_install_tui.py b/tests/test_install_tui.py
index a90dea87e..74304a784 100644
--- a/tests/test_install_tui.py
+++ b/tests/test_install_tui.py
@@ -9194,6 +9194,15 @@ class AuditEighteenAndEleven(_CardFixtures, unittest.TestCase):
self.assertNotIn("choose another one", text)
self.assertEqual(effects, [("run", "check")])
+ def test_options_offer_no_downloads_when_nothing_is_downloaded(self):
+ """P3-16: Parallel downloads offered for an install from a pack."""
+ state = checked_state()
+ state.stack.append("options")
+ with mock.patch.dict(os.environ, {install.OFFLINE_VARIABLE: ""}):
+ self.assertIn("jobs", [row.action for row in install.tui_rows(state)])
+ with mock.patch.dict(os.environ, {install.OFFLINE_VARIABLE: "1"}):
+ self.assertNotIn("jobs", [row.action for row in install.tui_rows(state)])
+
def test_nothing_installable_focuses_the_copy(self):
"""tui_audit_11 P3-8: offline with nothing to copy, the plan focused
Choose systems, whose systems need the internet too."""
diff --git a/wiki/installer.md b/wiki/installer.md
index f18fe30b4..f5ac09f70 100644
--- a/wiki/installer.md
+++ b/wiki/installer.md
@@ -176,7 +176,7 @@ install starts.
| Back | Esc, Backspace | B, Select (B alone with muxterm's own keys, where Select shows its keyboard) |
| Options | `o`, Tab | Y |
| Filter a long list | `/` then type, Enter on a lone match chooses it | muxterm: Select shows a keyboard. Elsewhere none (the setup list puts the SD cards after RetroArch) |
-| Keys of the screen | `?`, F1 | |
+| Keys of the screen | `?`, F1 (F1 alone while typing a filter, where the help lists the keys that do not type) | |
| Stop an install | Esc, `q`, Ctrl+C | B, Select+Start (B alone with muxterm's own keys) |
| Quit | `q`, Ctrl+C | B on the first screen |
| Pause, back with `fg` (Linux, macOS) | Ctrl+Z | |
@@ -205,7 +205,9 @@ folder was named, the backup folder and the save directory included
(`/sdcard/RetroArch` on Android, not the `/storage/emulated/0` it links to).
It opens only for an install, at a terminal of at least 40 columns and 12 rows
-(a smaller window says so, with its size) whose `TERM` is set, is not `dumb`
+(a smaller window says so, with its size, before the first question:
+`The window is 39x12: questions come line by line (40x12 for the full
+screen).`) whose `TERM` is set, is not `dumb`
and can draw it: where the terminal's description
(terminfo) has no way to move the cursor, or moves it with other sequences
than the ANSI ones the screen writes (`TERM=vt52`), the questions come line by
@@ -775,7 +777,7 @@ what the options name, everything by default.
| `--list-cores` | Print the cores whose extra files a platform installs |
| `--list-emulators` | Print every name `--emulator` accepts, each buildbot name beside the emulator it stands for |
| `--romm-firmware TEMPLATE` | RomM: where each platform's firmware goes in the library, as `filesystem.structure.firmware` in RomM's `config.yml` says (`{platform}/bios` for a library laid out as `{platform}/roms`). Read from `config.yml` beside the library when it is there. See [RomM firmware layout](#romm-firmware-layout) |
-| `--no-input` | Never ask a question, even at a terminal. A run whose output goes to a file or a pipe asks nothing either, and says so on stderr |
+| `--no-input` | Never ask a question, even at a terminal. A run whose output goes to a file or a pipe asks nothing either, and says so on stderr. It finds the setups and the mounted cards the screen finds: one is taken, as Enter takes it, and two stop the run with an `error` event (`stage` `detect`, `reason` `conflict`) naming each with its `--platform` and `--dest` |
| `--check` | Report and exit without writing |
| `--dry-run` | Show what would be downloaded, the totals first, then by system and with sizes, without writing anything. A plan taller than the screen names the ten largest systems, and `--verbose` lists every system and file |
| `--yes`, `-y` | Do not ask before a download of 1 GB or more, nor anything else. Implies `--no-input`, so a run that needs an answer (nothing found here, two setups found) stops on what to name instead |
@@ -1576,7 +1578,7 @@ RetroArch folder that holds only `scph5501.bin`, in the order written:
|----------|--------|
| `RETROBIOS_REF` | Branch or tag the file list and the files committed to the repository are read from. Defaults to `main`. Files the manifest marks `release_asset` always come from the `large-files` release, whatever the ref, and that release replaces an asset in place when it is rebuilt. Each release deletes the previous release tags, so a tag holds a file list until the next release. For contributors: [release process](release-process.md#cutting-a-release) |
| `RETROBIOS_BASE_URL` | Base URL for the manifest and the files it declares. HTTPS only, plain HTTP allowed to loopback for end-to-end tests. Whoever controls this base controls the expected hashes, hence the check. A file list that cannot be fetched names the address, and this variable when it is set |
-| `RETROBIOS_INSTALL_OFFLINE` | Set to anything but `0`: no network request, as with `--offline`. The runs the full-screen interface starts inherit it. `RETROBIOS_OFFLINE` is the build scripts' own and leaves the installer alone |
+| `RETROBIOS_INSTALL_OFFLINE` | Set to anything but `0`: no network request, as with `--offline`. The runs the full-screen interface starts inherit it. The words then name the variable (`not fetched (RETROBIOS_INSTALL_OFFLINE=1)`, `run it with RETROBIOS_INSTALL_OFFLINE unset`), and `--offline` where the option was given. `RETROBIOS_OFFLINE` is the build scripts' own and leaves the installer alone |
| `RETROBIOS_OS` | Names the host outright (`linux`, `wsl`, `windows`, `darwin`, `android`) instead of detecting it |
| `EXTERNAL_STORAGE` | Android only, the shared storage root RetroArch builds its default directories from. Defaults to `/storage/emulated/0` |
| `RETROBIOS_INSTALL_URL` | Where the bootstrap fetches `install.py`. HTTPS only |