summaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md16
1 files changed, 10 insertions, 6 deletions
diff --git a/README.md b/README.md
index 42148f6..b9d15ee 100644
--- a/README.md
+++ b/README.md
@@ -21,18 +21,22 @@ RSVP is an optional **focus mode**, not a comprehension or speed promise.
"ctrl+s" = "/rsvp"
```
-3. Restart panto. Run `/rsvp` or Ctrl+S while idle to start the next unread paragraph.
+3. Restart panto. Run `/rsvp` or Ctrl+S while idle to open the focus view. **Playback does not start on activation**; press Ctrl+S again to start the next unread paragraph.
If `[extensions]` or `[keys]` already exists, add these entries to the existing tables rather than declaring them twice.
## Controls
-- Ctrl+S: play the next unread paragraph while waiting; ignored during playback.
+- Ctrl+S: enter the focus view when idle; once open, start the next unread paragraph. Ignored during playback.
- Space: pause or resume. Resume gives the current word a fresh interval.
-- `-` / `+`: adjust speed; changes apply to the next word interval.
+- `-` / `+`: adjust speed; changes apply to the next word interval and are saved to `ext.state` when changed.
- Esc: leave. An unfinished paragraph remains unread and restarts on the next activation.
-The current word stays centered above the input, with speed and paragraph progress. Text arriving while a paragraph is playing does not change that paragraph's word snapshot. Progress resets on session replacement and is not persisted.
+The view opens idle, with stationary `|` markers above and below the focus column; no playback timer runs until the second Ctrl+S. The focus column is `floor(viewport width / 2) + 1`, fixed for idle and playback. Word length excludes ASCII and common Unicode punctuation (which remains displayed and counts toward visual offset): lengths 1 target character 1; 2–5 target 2; 6–9 target 3; 10–13 target 4; 14+ target 5. Punctuation-only tokens fall back to their first visible character. ANSI styling is ignored for counting and retained for display; combining marks do not add a character, and host display widths account for Unicode glyph widths and clipping. Unicode punctuation recognition and complex grapheme clusters are approximate, and rendering remains bounded in narrow viewports.
+
+The word-length buckets follow the [Spritz-style rule documented by Stanford](https://nifty.stanford.edu/2015/posera-speed-reader/speed_reader.html); the [Spritz patent, Table I](https://patents.google.com/patent/US20140016867A1/en), excludes punctuation when counting word characters. This is an alignment heuristic, not a demonstrated comprehension benefit.
+
+The current word stays above the input, with speed and paragraph progress. Text arriving while a paragraph is playing does not change that paragraph's word snapshot. Progress resets on session replacement and is not persisted.
## Settings
@@ -47,11 +51,11 @@ min_wpm = 50
| Setting | Default | Meaning |
| --- | ---: | --- |
-| `wpm` | `250` | Initial words per minute; values below `min_wpm` start at the lower bound. |
+| `wpm` | `250` | Fallback words per minute; values below `min_wpm` start at the lower bound. A saved `rsvp.wpm` value overrides this fallback when it is finite and positive. |
| `wpm_step` | `25` | Change per `-` or `+`. |
| `min_wpm` | `50` | Lowest speed; `-` stops here. |
-All three values must be finite positive numbers. Theme changes re-render the active paragraph using the current Markdown display style.
+The extension restores and saves speed through `ext.state.get("rsvp.wpm")` / `ext.state.set("rsvp.wpm", speed)`; it does not access state files directly. Missing or invalid saved values use the configured `wpm`; restored speeds are clamped to `min_wpm`. Read/write failures are shown in the focus view without stopping playback or discarding an in-memory speed change. All three configuration values must be finite positive numbers. Theme changes re-render the active paragraph using the current Markdown display style.
## Development