Public Access
Tab used to complete a command's first word only. It now follows the help text word by word: `lora st` gives `lora status`, `gnss track ` lists `start stop`. The words are read from the help text as written, so a new command completes with no table to keep; the Shell's own words are added in the same notation. `*` and `?` in the last part of a path, for ls, du, rm, cp and mv, from the Shell and both consoles. The command runs once for each name matched, lined up and run by the main loop as each finishes; `cancel` empties the line-up. 64 matches at most, refused whole past that. In the Shell, rm with a pattern asks once, with the count. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EhqxQ49eCju4CzKYNjZzwT
452 lines
12 KiB
C++
452 lines
12 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)"},
|
|
};
|
|
|
|
// 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[] = {
|
|
{"; .", "up, down"},
|
|
{"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", "the position, or the sky"},
|
|
{"r", "record a Track, or stop it"},
|
|
};
|
|
|
|
// 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 Meshtastic 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"},
|
|
{"`", "the folder above"},
|
|
};
|
|
|
|
// 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 (up to 16 KB)"},
|
|
{"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"},
|
|
};
|
|
|
|
// 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 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", "edit, or open the page"},
|
|
{", /", "change a switch or a slider"},
|
|
};
|
|
|
|
// 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
|