Public Access
Asteroids is the sixth Game: lean the device to turn, ; for thrust, . to fire, the arrows too for a device on a table. In Pong, 0 switches between the keys and tilting and 9 turns the tilt round, both remembered. Both read the accelerometer through the same smoothing, and take however the device is held at the start as the middle. Played on the device: the default way of Pong's tilt was swapped after trying it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0162FokPdvY2KsS4NBfwyWPk
584 lines
15 KiB
C++
584 lines
15 KiB
C++
#pragma once
|
|
|
|
#include <cstddef>
|
|
#include <vector>
|
|
|
|
#include "key_help.h"
|
|
|
|
// Every key of every screen, as data (issues #69 and #72). The help panel (Fn+h) shows the table of
|
|
// the state an App is in; site/tools/gen_dev_docs.py reads this file to write the website's key
|
|
// tables, so the two can't drift.
|
|
//
|
|
// The format is read by that script, so keep it: a comment `// id: Title`, then one table,
|
|
// inline constexpr KeyHelp kName[] = {
|
|
// {"keys", "what they do"},
|
|
// };
|
|
// with one row a line and plain string literals. `id` is what a guide page asks for.
|
|
namespace roro::keys {
|
|
|
|
template <size_t N>
|
|
inline void add(std::vector<KeyHelp>& out, const KeyHelp (&rows)[N]) {
|
|
out.insert(out.end(), rows, rows + N);
|
|
}
|
|
|
|
// everywhere: Everywhere
|
|
inline constexpr KeyHelp kEverywhere[] = {
|
|
{"`", "back"},
|
|
{"Fn `", "home, the Launcher"},
|
|
{"; . , /", "arrows (Fn+ while typing)"},
|
|
{"Fn h ?", "these keys (? not typing)"},
|
|
{"Fn p", "a screenshot, on the card"},
|
|
};
|
|
|
|
// dialog: A question
|
|
inline constexpr KeyHelp kDialog[] = {
|
|
{", /", "the other answer"},
|
|
{"Enter", "choose it"},
|
|
{"`", "cancel"},
|
|
};
|
|
|
|
// text: A text field
|
|
inline constexpr KeyHelp kText[] = {
|
|
{"Enter", "save"},
|
|
{"`", "cancel"},
|
|
{"Del", "delete backwards"},
|
|
{"Fn , /", "move the cursor"},
|
|
{"opt ' e", "an accent: \xC3\xA9"},
|
|
};
|
|
|
|
// launcher: The Launcher
|
|
inline constexpr KeyHelp kLauncher[] = {
|
|
{"; . , /", "move"},
|
|
{"Enter", "open the App"},
|
|
};
|
|
|
|
// setup: Setup, a step
|
|
inline constexpr KeyHelp kSetup[] = {
|
|
{"Enter", "continue"},
|
|
{"`", "the step before"},
|
|
};
|
|
|
|
// setup-choice: Setup, a choice
|
|
inline constexpr KeyHelp kSetupChoice[] = {
|
|
{"; .", "up, down"},
|
|
{"Enter", "choose it, next step"},
|
|
{"`", "the step before"},
|
|
};
|
|
|
|
// setup-text: Setup, a name
|
|
inline constexpr KeyHelp kSetupText[] = {
|
|
{"Enter", "next step"},
|
|
{"`", "the step before"},
|
|
{"Del", "delete backwards"},
|
|
{"Fn , /", "move the cursor"},
|
|
{"opt ' e", "an accent: \xC3\xA9"},
|
|
};
|
|
|
|
// irc: IRC
|
|
inline constexpr KeyHelp kIrc[] = {
|
|
{"Enter", "send the line"},
|
|
{"Tab", "the next buffer"},
|
|
{"Alt ; .", "scroll back, forward"},
|
|
{"Fn ; .", "lines you sent before"},
|
|
{"Fn , /", "move the cursor"},
|
|
{"Del", "delete backwards"},
|
|
{"/settings", "server, nick, passwords"},
|
|
{"/join #x", "join a channel"},
|
|
{"/part", "leave it"},
|
|
{"/msg nick", "a private chat"},
|
|
{"/me", "an action"},
|
|
{"/nick", "change your nick"},
|
|
{"/topic", "see or set the topic"},
|
|
{"/names", "who is there"},
|
|
{"/quit", "disconnect, and stay so"},
|
|
{"/raw", "a line as it is"},
|
|
{"`", "leave: IRC stays connected"},
|
|
};
|
|
|
|
// irc-settings: IRC settings
|
|
inline constexpr KeyHelp kIrcSettings[] = {
|
|
{"; .", "up, down"},
|
|
{"Enter", "edit, switch, or save"},
|
|
{"`", "leave without saving"},
|
|
};
|
|
|
|
// irc-field: IRC, a setting
|
|
inline constexpr KeyHelp kIrcField[] = {
|
|
{"Enter", "keep it"},
|
|
{"`", "cancel"},
|
|
{"Del", "delete backwards"},
|
|
{"Fn , /", "move the cursor"},
|
|
};
|
|
|
|
// wifi-tools: Wi-Fi Tools
|
|
inline constexpr KeyHelp kWifiTools[] = {
|
|
{"; .", "up, down"},
|
|
{"Enter", "open"},
|
|
};
|
|
|
|
// wifi-networks: Networks nearby
|
|
inline constexpr KeyHelp kWifiNetworks[] = {
|
|
{"; .", "up, down"},
|
|
{"Enter", "track its signal"},
|
|
{"s", "sort: signal, channel, name"},
|
|
{"o", "open networks only"},
|
|
{"h", "hide the hidden ones"},
|
|
{"w", "strong ones only"},
|
|
{"l", "log the scans to the card"},
|
|
};
|
|
|
|
// wifi-tracker: Signal tracker
|
|
inline constexpr KeyHelp kWifiTracker[] = {
|
|
{"m", "clicks on or off"},
|
|
};
|
|
|
|
// gnss: GNSS
|
|
inline constexpr KeyHelp kGnss[] = {
|
|
{"Tab", "position, sky, compass"},
|
|
{"r", "record a Track, or stop it"},
|
|
};
|
|
|
|
// gnss-compass: GNSS, the compass
|
|
inline constexpr KeyHelp kGnssCompass[] = {
|
|
{"Tab", "position, sky, compass"},
|
|
{"m", "mark this place"},
|
|
{"t", "the target: a place"},
|
|
{"s", "aimed at the sun: north"},
|
|
{"r", "record a Track, or stop it"},
|
|
};
|
|
|
|
// gnss-places: GNSS, the places
|
|
inline constexpr KeyHelp kGnssPlaces[] = {
|
|
{"; .", "up, down"},
|
|
{"Enter", "the target"},
|
|
{"d Del", "remove the place"},
|
|
};
|
|
|
|
// gemini: Gemini, a page
|
|
inline constexpr KeyHelp kGemini[] = {
|
|
{"Tab", "the next link"},
|
|
{"Aa Tab", "the link before"},
|
|
{"Enter", "follow the link"},
|
|
{"` Del", "the page before"},
|
|
{"; .", "scroll"},
|
|
{"Space", "a page down"},
|
|
{", /", "sideways, in wide blocks"},
|
|
{"g", "type an address"},
|
|
{"b", "bookmark this page"},
|
|
{"s", "save the page to the card"},
|
|
{"S", "...with the pages it links to"},
|
|
};
|
|
|
|
// gemini-saved: Gemini, a Saved Page
|
|
inline constexpr KeyHelp kGeminiSaved[] = {
|
|
{"Tab", "the next link"},
|
|
{"Aa Tab", "the link before"},
|
|
{"Enter", "follow the link"},
|
|
{"` Del", "the page before"},
|
|
{"; .", "scroll"},
|
|
{"Space", "a page down"},
|
|
{", /", "sideways, in wide blocks"},
|
|
{"g", "type an address"},
|
|
{"b", "bookmark this page"},
|
|
{"r", "refresh this Saved Page"},
|
|
{"d", "delete this Saved Page"},
|
|
};
|
|
|
|
// gemini-address: Gemini, an address
|
|
inline constexpr KeyHelp kGeminiAddress[] = {
|
|
{"Enter", "go there"},
|
|
{"`", "cancel"},
|
|
{"Del", "delete backwards"},
|
|
{"Fn , /", "move the cursor"},
|
|
};
|
|
|
|
// gemini-answer: Gemini, an answer to a page
|
|
inline constexpr KeyHelp kGeminiAnswer[] = {
|
|
{"Enter", "send it"},
|
|
{"`", "cancel"},
|
|
{"Del", "delete backwards"},
|
|
{"Fn , /", "move the cursor"},
|
|
};
|
|
|
|
// lora: LoRa Scanner, the packets
|
|
inline constexpr KeyHelp kLora[] = {
|
|
{"; .", "up, down"},
|
|
{"Enter", "the packet's details"},
|
|
{"p", "pick a preset"},
|
|
{"c", "start a Capture, or stop it"},
|
|
{"Tab", "the Sweep"},
|
|
};
|
|
|
|
// lora-packet: LoRa Scanner, a packet
|
|
inline constexpr KeyHelp kLoraPacket[] = {
|
|
{"; .", "scroll"},
|
|
{"Enter", "back to the list"},
|
|
};
|
|
|
|
// lora-presets: LoRa Scanner, the presets
|
|
inline constexpr KeyHelp kLoraPresets[] = {
|
|
{"; .", "up, down"},
|
|
{"Enter", "listen with this preset"},
|
|
};
|
|
|
|
// lora-sweep: LoRa Scanner, the Sweep
|
|
inline constexpr KeyHelp kLoraSweep[] = {
|
|
{"Tab", "the Sniffer"},
|
|
};
|
|
|
|
// storage: Storage, a folder
|
|
inline constexpr KeyHelp kStorage[] = {
|
|
{"; .", "up, down"},
|
|
{"Enter", "open the folder or the file"},
|
|
{", /", "a page up, down"},
|
|
{"c x", "copy, cut"},
|
|
{"v", "paste here"},
|
|
{"r", "rename"},
|
|
{"d Del", "delete, after asking"},
|
|
{"n", "a new folder"},
|
|
{"i", "details: size, date, type"},
|
|
{"s", "sort: name, date, size"},
|
|
{"m", "Maintenance: clean-up, erase"},
|
|
{"w", "share with a browser"},
|
|
{"`", "the folder above"},
|
|
};
|
|
|
|
// storage-share: Storage, sharing with a browser
|
|
inline constexpr KeyHelp kStorageShare[] = {
|
|
{"`", "stop sharing"},
|
|
};
|
|
|
|
// storage-details: Storage, an item's details
|
|
inline constexpr KeyHelp kStorageDetails[] = {
|
|
{"; .", "scroll"},
|
|
{"Enter", "back to the folder"},
|
|
};
|
|
|
|
// storage-name: Storage, a name
|
|
inline constexpr KeyHelp kStorageName[] = {
|
|
{"Enter", "rename it, or make the folder"},
|
|
{"`", "cancel"},
|
|
{"Del", "delete backwards"},
|
|
{"Fn , /", "move the cursor"},
|
|
};
|
|
|
|
// storage-busy: Storage, while it copies or deletes
|
|
inline constexpr KeyHelp kStorageBusy[] = {
|
|
{"`", "stop the copy or the delete"},
|
|
};
|
|
|
|
// maintenance: Storage, Maintenance
|
|
inline constexpr KeyHelp kMaintenance[] = {
|
|
{"; .", "up, down"},
|
|
{"Enter", "open, or choose"},
|
|
};
|
|
|
|
// viewer-text: A file, as text
|
|
inline constexpr KeyHelp kViewerText[] = {
|
|
{"; .", "a line up, down"},
|
|
{", /", "a page up, down"},
|
|
{"t b", "the top, the end"},
|
|
{"e", "edit it"},
|
|
{"Tab", "the file as hex, or back"},
|
|
};
|
|
|
|
// viewer-hex: A file, as hex
|
|
inline constexpr KeyHelp kViewerHex[] = {
|
|
{"; .", "a line up, down"},
|
|
{", /", "a page up, down"},
|
|
{"t b", "the top, the end"},
|
|
{"Tab", "the file as text, or back"},
|
|
};
|
|
|
|
// viewer-pcap: A Capture
|
|
inline constexpr KeyHelp kViewerPcap[] = {
|
|
{"; .", "up, down"},
|
|
{"Enter", "the packet"},
|
|
{", /", "a page up, down"},
|
|
{"Tab", "the file as hex"},
|
|
};
|
|
|
|
// viewer-packet: A Capture's packet
|
|
inline constexpr KeyHelp kViewerPacket[] = {
|
|
{"; .", "scroll"},
|
|
{"Enter", "back to the packets"},
|
|
};
|
|
|
|
// viewer-gpx: A Track
|
|
inline constexpr KeyHelp kViewerGpx[] = {
|
|
{"Tab", "the file as text"},
|
|
};
|
|
|
|
// viewer-ota: An Update File
|
|
inline constexpr KeyHelp kViewerOta[] = {
|
|
{"Enter", "install it, if it's genuine"},
|
|
{"Tab", "the file as hex"},
|
|
};
|
|
|
|
// viewer-image: A picture
|
|
inline constexpr KeyHelp kViewerImage[] = {
|
|
{"Enter", "its own size, or all of it"},
|
|
{"; . , /", "move around it"},
|
|
{"i", "its size"},
|
|
{"Tab", "the file as hex"},
|
|
};
|
|
|
|
// vpn: Settings, VPN
|
|
inline constexpr KeyHelp kVpn[] = {
|
|
{"Enter", "switch, import, forget"},
|
|
{"; .", "up, down"},
|
|
};
|
|
|
|
// games: Games, the games
|
|
inline constexpr KeyHelp kGames[] = {
|
|
{"Enter", "this game"},
|
|
{", /", "the game before, the next"},
|
|
};
|
|
|
|
// games-pong: Games, Pong
|
|
inline constexpr KeyHelp kGamesPong[] = {
|
|
{"; .", "the paddle, while held"},
|
|
{"0", "steer with the keys, or by tilting"},
|
|
{"9", "tilting the other way up"},
|
|
{"Enter", "start, or start again"},
|
|
{"p", "pause; any key carries on"},
|
|
{"`", "the other games; this one waits"},
|
|
};
|
|
|
|
// games-snake: Games, Snake
|
|
inline constexpr KeyHelp kGamesSnake[] = {
|
|
{"; . , /", "turn"},
|
|
{"Enter", "start, or start again"},
|
|
{"p", "pause; any key carries on"},
|
|
{"`", "the other games; this one waits"},
|
|
};
|
|
|
|
// games-tetris: Games, Tetris
|
|
inline constexpr KeyHelp kGamesTetris[] = {
|
|
{", /", "left, right; held, it repeats"},
|
|
{";", "turn"},
|
|
{"z", "turn the other way"},
|
|
{".", "fall faster, while held"},
|
|
{"1", "drop"},
|
|
{"0", "the music, on or off"},
|
|
{"8 9", "the music, quieter, louder"},
|
|
{"Enter", "start, or start again"},
|
|
{"p", "pause; any key carries on"},
|
|
{"`", "the other games; this one waits"},
|
|
};
|
|
|
|
// games-mines: Games, Minesweeper
|
|
inline constexpr KeyHelp kGamesMines[] = {
|
|
{"; . , /", "move; held, it runs"},
|
|
{"Enter", "dig; on a number, the rest"},
|
|
{"f", "a flag, on or off"},
|
|
{"p", "pause; any key carries on"},
|
|
{"`", "the other games; this one waits"},
|
|
};
|
|
|
|
// games-2048: Games, 2048
|
|
inline constexpr KeyHelp kGames2048[] = {
|
|
{"; . , /", "slide every tile that way"},
|
|
{"Enter", "start, or start again"},
|
|
{"`", "the other games; this one waits"},
|
|
};
|
|
|
|
// games-asteroids: Games, Asteroids
|
|
inline constexpr KeyHelp kGamesAsteroids[] = {
|
|
{"lean", "turn: left or right"},
|
|
{", /", "turn, while held"},
|
|
{";", "thrust, while held"},
|
|
{".", "fire"},
|
|
{"Enter", "start, or start again"},
|
|
{"p", "pause; any key carries on"},
|
|
{"`", "the other games; this one waits"},
|
|
};
|
|
|
|
// ssh: SSH, the hosts
|
|
inline constexpr KeyHelp kSsh[] = {
|
|
{"Enter", "connect, open"},
|
|
{"; .", "up, down"},
|
|
{"n", "a new connection"},
|
|
{"d", "forget this host"},
|
|
};
|
|
|
|
// ssh-terminal: SSH, the terminal
|
|
inline constexpr KeyHelp kSshTerminal[] = {
|
|
{"`", "Esc"},
|
|
{"Alt `", "a backtick"},
|
|
{"Fn ; . , /", "the arrows"},
|
|
{"Fn Shift ; .", "Page Up, Page Down"},
|
|
{"Ctrl a..z", "Ctrl+C and the rest"},
|
|
{"Alt ; .", "scroll back, forward"},
|
|
{"Ctrl + -", "larger, smaller text"},
|
|
{"Ctrl Alt q", "disconnect"},
|
|
{"Fn `", "leave it running"},
|
|
};
|
|
|
|
// ssh-key: SSH, this device's key
|
|
inline constexpr KeyHelp kSshKey[] = {
|
|
{"Enter", "make a key, or a new one"},
|
|
{"w", "write the public half to the card"},
|
|
{"`", "back"},
|
|
};
|
|
|
|
// notes: Notes, the list
|
|
inline constexpr KeyHelp kNotes[] = {
|
|
{"; .", "up, down"},
|
|
{"Enter", "open the note"},
|
|
{", /", "a page up, down"},
|
|
{"n", "a new note"},
|
|
{"r", "rename its file"},
|
|
{"d Del", "delete it"},
|
|
{"s", "sort: newest, or by name"},
|
|
};
|
|
|
|
// notes-editor: Notes, the editor
|
|
inline constexpr KeyHelp kNotesEditor[] = {
|
|
{"Enter", "a new line"},
|
|
{"Del", "delete backwards"},
|
|
{"Tab", "two spaces"},
|
|
{"Fn ; . , /", "move the cursor"},
|
|
{"Alt Fn ; .", "a page up, down"},
|
|
{"Ctrl Fn ; .", "start, end of the note"},
|
|
{"Ctrl a e", "start, end of the line"},
|
|
{"opt ' e", "an accent: \xC3\xA9"},
|
|
{"`", "done: it saves by itself"},
|
|
};
|
|
|
|
// notes-name: Notes, a file name
|
|
inline constexpr KeyHelp kNotesName[] = {
|
|
{"Enter", "rename the file"},
|
|
{"`", "cancel"},
|
|
{"Del", "delete backwards"},
|
|
{"Fn , /", "move the cursor"},
|
|
};
|
|
|
|
// shell: Shell
|
|
inline constexpr KeyHelp kShell[] = {
|
|
{"Enter", "run the line"},
|
|
{"Tab", "complete: a command, a path"},
|
|
{"* ?", "several files: /notes/*.txt"},
|
|
{"Fn ; .", "lines you typed before"},
|
|
{"Alt ; .", "scroll back, forward"},
|
|
{"Ctrl b", "your replies only, or all"},
|
|
{"Fn , /", "move the cursor"},
|
|
{"Del", "delete backwards"},
|
|
{"help", "every command"},
|
|
{"clear", "an empty screen"},
|
|
{"Notes", "an App, by its name"},
|
|
{"rm -rf", "delete without being asked"},
|
|
{"quit `", "leave the Shell"},
|
|
};
|
|
|
|
// system: System, any view
|
|
inline constexpr KeyHelp kSystem[] = {
|
|
{"Tab", "the next view"},
|
|
{"Aa Tab", "the view before"},
|
|
};
|
|
|
|
// system-tasks: System, the tasks
|
|
inline constexpr KeyHelp kSystemTasks[] = {
|
|
{"Tab", "the next view"},
|
|
{"Aa Tab", "the view before"},
|
|
{"; .", "scroll"},
|
|
{"s", "sort: cpu, stack, name"},
|
|
};
|
|
|
|
// system-system: System, the system view
|
|
inline constexpr KeyHelp kSystemSystem[] = {
|
|
{"Tab", "the next view"},
|
|
{"Aa Tab", "the view before"},
|
|
{"; .", "scroll"},
|
|
};
|
|
|
|
// settings: Settings
|
|
inline constexpr KeyHelp kSettings[] = {
|
|
{"; .", "up, down"},
|
|
{"Enter", "open the group or the page, or edit"},
|
|
{", /", "change a switch or a slider"},
|
|
{"`", "back to the groups"},
|
|
};
|
|
|
|
// settings-choice: Settings, a choice
|
|
inline constexpr KeyHelp kSettingsChoice[] = {
|
|
{"; .", "up, down"},
|
|
{"Enter", "choose it"},
|
|
};
|
|
|
|
// wifi: Settings, Wi-Fi
|
|
inline constexpr KeyHelp kWifi[] = {
|
|
{"; .", "up, down"},
|
|
{"Enter", "open, or change"},
|
|
{", /", "switch Wi-Fi on or off"},
|
|
};
|
|
|
|
// wifi-servers: Settings, DNS and NTP
|
|
inline constexpr KeyHelp kWifiServers[] = {
|
|
{"; .", "up, down"},
|
|
{"Enter", "edit"},
|
|
{", /", "Always use my DNS: on, off"},
|
|
};
|
|
|
|
// wifi-network: Settings, a saved network
|
|
inline constexpr KeyHelp kWifiNetwork[] = {
|
|
{"; .", "up, down"},
|
|
{"Enter", "edit, or forget"},
|
|
{", /", "Automatic or Fixed"},
|
|
};
|
|
|
|
// wifi-status: Settings, the Wi-Fi status
|
|
inline constexpr KeyHelp kWifiStatus[] = {
|
|
{"Enter", "back"},
|
|
};
|
|
|
|
// wifi-scan: Settings, adding a network
|
|
inline constexpr KeyHelp kWifiScan[] = {
|
|
{"; .", "up, down"},
|
|
{"Enter", "choose this network"},
|
|
};
|
|
|
|
// wifi-name: Settings, a hidden network's name
|
|
inline constexpr KeyHelp kWifiName[] = {
|
|
{"Enter", "next: the password"},
|
|
{"`", "cancel"},
|
|
{"Del", "delete backwards"},
|
|
{"Fn , /", "move the cursor"},
|
|
};
|
|
|
|
// firmware: Settings, Firmware
|
|
inline constexpr KeyHelp kFirmware[] = {
|
|
{"; .", "up, down"},
|
|
{"Enter", "check, open, or install"},
|
|
{"c", "look for a newer release"},
|
|
};
|
|
|
|
// firmware-release: Settings, a release
|
|
inline constexpr KeyHelp kFirmwareRelease[] = {
|
|
{"; .", "scroll"},
|
|
{"Enter", "install it"},
|
|
{"c", "check again"},
|
|
};
|
|
|
|
// firmware-older: Settings, older releases
|
|
inline constexpr KeyHelp kFirmwareOlder[] = {
|
|
{"; .", "up, down"},
|
|
{"Enter", "its details"},
|
|
{"c", "read the list again"},
|
|
};
|
|
|
|
// debug-console: Settings, Debug Console
|
|
inline constexpr KeyHelp kDebugConsole[] = {
|
|
{"; .", "up, down"},
|
|
{"Enter", "switch, or open"},
|
|
{", /", "switch the console on or off"},
|
|
};
|
|
|
|
// demo: The widget demo
|
|
inline constexpr KeyHelp kDemo[] = {
|
|
{"; .", "up, down"},
|
|
{"Enter", "try the widget"},
|
|
};
|
|
|
|
} // namespace roro::keys
|