Public Access
Every screen's keys are constant tables in lib/core/src/app_keys.h (52 of them, each under an `// id: Title` comment). An App's help() picks the table of the state it is in. site/tools/gen_dev_docs.py reads the same file and writes site/data/keys.toml; the `keys` shortcode shows a screen's tables on its guide page, and /guide/keys/ shows all of them. The Site job fails when the data file is out of date or a page asks for a table that doesn't exist, and now also runs when app_keys.h changes. A key added to an App shows up on the website without anyone editing a page. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EhqxQ49eCju4CzKYNjZzwT
49 lines
3.1 KiB
Markdown
49 lines
3.1 KiB
Markdown
+++
|
|
title = "Gemini"
|
|
description = "Browse Geminispace: follow links, go back, bookmark pages and keep them on the SD card to read offline."
|
|
weight = 4
|
|
[extra]
|
|
tag = "Gemini"
|
|
screens = ["gemini.png"]
|
|
+++
|
|
|
|
[Gemini](https://geminiprotocol.net/) is a small, text-first protocol: pages are plain **gemtext**, served over an encrypted connection, from **capsules** instead of sites. It needs Wi-Fi.
|
|
|
|
## Reading
|
|
|
|
| Key | Does |
|
|
|---|---|
|
|
| <kbd>Tab</kbd> / <kbd>Shift</kbd>+<kbd>Tab</kbd> | Picks the next or previous link |
|
|
| <kbd>Enter</kbd> | Follows the link |
|
|
| <kbd>`</kbd> (Back) | Returns to the previous page, at the place where you scrolled to |
|
|
| Up and down | Scroll a line |
|
|
| <kbd>Space</kbd> | Pages down |
|
|
| <kbd>g</kbd> | Types an address |
|
|
| <kbd>b</kbd> | Bookmarks the page |
|
|
| <kbd>s</kbd> | Saves the page to the card |
|
|
| <kbd>S</kbd> | Saves it with the pages it links to |
|
|
|
|
Headings, lists, quotes and preformatted blocks are drawn as gemtext intends, wrapped to the screen. Links to other protocols show their address and are not followed. A page that asks for input (a search, say) shows a prompt, and a password prompt hides what you type. Characters outside the Latin fonts show as `?`. The history keeps the last 20 pages.
|
|
|
|
## The start page
|
|
|
|
It lists your **bookmarks**, then your **Saved Pages**, then a few starting points: geminiprotocol.net, a search engine and an aggregator. Without a card it shows only the built-in starting points.
|
|
|
|
## Certificates: trust on first use
|
|
|
|
Most capsules sign their own certificate. The first certificate seen for a host is **remembered**; if it later changes, the page is not shown and you are asked whether to trust the new one, with both fingerprints on screen. Expired or self-signed certificates are fine: only a *change* counts. Client certificates are not supported.
|
|
|
|
## Saved Pages
|
|
|
|
<kbd>s</kbd> keeps the page on the card, with the address it came from and when it was saved, and you can read it with no network. <kbd>S</kbd> also saves the pages it links to on the **same capsule**, as text only, up to 30, in the background. On the start page, Saved Pages are listed by capsule, newest first. Inside one, <kbd>r</kbd> **refreshes** it and <kbd>d</kbd> **deletes** it. A link to another saved page opens the saved copy; any other link fetches online if Wi-Fi is up, or says it is not saved. A file that is not text (a picture, say) is saved to `/gemini/downloads/` instead of being shown. The Storage clean-up never offers Saved Pages for deletion.
|
|
|
|
## Big pages and memory
|
|
|
|
With a card, every page streams to the card first, so a page larger than the device's memory still arrives whole and is read from the card as you scroll. Without a card, a page is limited to what fits in memory. If there is not enough free memory to open a secure connection, the fetch says so instead of failing silently; stopping IRC frees the most.
|
|
|
|
## The keys, as the device lists them
|
|
|
|
What <kbd>Fn</kbd> + <kbd>h</kbd> shows on these screens. These tables are generated from the firmware's own lists, so they are always the current ones.
|
|
|
|
{{ keys(scopes=["gemini", "gemini-saved", "gemini-address", "gemini-answer"]) }}
|