You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Since 1.10.5, TerminalTextSanitizer strips absolute cursor positioning
from message bodies before the inline reader shows them, so genuine ANSI
art reflows into unreadable text. Add a dedicated full-screen art view
that renders such bodies with cursor positioning intact, while still
removing OSC (title/clipboard), DCS/APC/PM, private-mode sequences and
device-status/answerback queries -- the input-injection and clipboard
vectors stay closed; only in-screen drawing is restored.
- TerminalTextSanitizer::sanitize() gains a POLICY_POSITIONING mode and a
hasPositionedAnsi() detector.
- New AnsiArtViewer (telnet/src/): full-screen render + dismiss prompt;
mode() reads the TERM_ANSI_ART_MODE env setting.
- EchomailHandler / NetmailHandler message viewers detect art on the raw
body, add an 'A' key (viewart) + Ctrl-K help item, and in 'inline' mode
auto-launch the art view once per message open.
- TERM_ANSI_ART_MODE: viewer (default, press A) | inline (auto-launch).
i18n keys for all locales, unit tests, daemon include lists, and docs
(UPGRADING_1.10.6, TerminalServer, TerminalServerDevGuide) updated.
Copy file name to clipboardExpand all lines: docs/TerminalServer.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -101,6 +101,7 @@ Pipe-code rendering for plain bulletins and other ANSI/pipe text shared with the
101
101
- Press `T` in the echomail viewer to download the current message as a plain-text `.txt` file via ZMODEM. The filename is derived from the message subject. Uses the built-in ZMODEM implementation by default; no additional software required.
102
102
- Press `E` in the echomail viewer to forward the current message to the logged-in user's email address. Requires outbound email to be configured on the BBS; an error is shown inline if it is not.
103
103
- Press `F` in the echomail viewer to forward the current message. A dialog prompts the user to choose **Echomail** (forward to another subscribed echoarea — opens compose pre-filled with a `Fwd:` subject, attribution header, and quoted body) or **Netmail** (forward as a netmail to an FTN address — uses the standard netmail compose flow). The source echoarea appears in the attribution header in both cases.
104
+
- Press `A` in the echomail or netmail viewer to open the **ANSI art view** — a full-screen render of the message body with cursor positioning intact. `A` only appears (in the Ctrl-K help overlay) when the body is ANSI art. Message bodies are stripped of cursor-positioning sequences before the normal reader shows them (security hardening in 1.10.5), so art that draws itself with absolute cursor moves reflows into unreadable text there; the art view restores in-screen drawing while still blocking window-title/clipboard writes and answerback queries. The `TERM_ANSI_ART_MODE` setting selects the behaviour: `viewer` (default) is the press-`A` flow just described; `inline` makes the full-screen art view open automatically whenever an ANSI-art message is opened, with any key returning to the normal reader.
104
105
- Press `G` in the echomail viewer to **add an ignore rule** for the current message's sender. A sub-menu offers three options: **By sender name** (hides all future messages from that name), **By FTN address** (hides messages from that name at that address — only shown if the message carries an FTN address), and **Subject keyword** (hides future messages from that sender whose subject contains the given keyword). Options 1 and 2 show a confirmation dialog pre-filled from the message header; option 3 prompts for a keyword string. The rule is saved via `POST /api/messages/echomail/ignore-rules`. `G` is available in the Ctrl-K help overlay only (not the status bar).
105
106
- Press `G` from the **echoarea list** to open the **Ignore Rules** management screen. Rules are fetched from `GET /api/user/echomail-ignore-rules` and displayed in a paginated selectable list. Each row shows the sender name and, where set, the FTN address and subject keyword. Select a rule and press Enter or `D` to delete it after confirmation via `DELETE /api/user/echomail-ignore-rules/{id}`. `G` appears in the Ctrl-K help overlay on the echoarea list.
106
107
- The **echoarea list** (the screen showing your subscribed areas) uses the same navigable list interface as message lists. Arrow Up/Down moves the highlight cursor; Arrow Left/Right (or `n`/`p`) changes pages; Enter selects the highlighted area; typing a number jumps the cursor to that row. A status bar at the bottom shows available actions. Press `/` to filter the list by tag or description, `C` to clear the filter, and (when Interests is enabled) `I` to open the interests browser. The list redraws immediately on terminal resize.
keeps a whitelist of cursor-movement and erase sequences on top of SGR, while
326
+
still removing OSC, DCS/APC/PM, private-mode sequences, device-status/answerback
327
+
queries and C0/C1 bytes — the input-injection and clipboard/title vectors stay
328
+
closed.
329
+
330
+
`AnsiArtViewer::isArt($rawBody)` (a wrapper over
331
+
`TerminalTextSanitizer::hasPositionedAnsi()`) decides whether a message qualifies;
332
+
it must be called on the **raw** body, before strict sanitization. The message
333
+
viewers in `EchomailHandler` and `NetmailHandler` pass the raw body through, add
334
+
an `a => 'viewart'` entry to `$extraKeys` plus a help item, and handle
335
+
`case 'viewart'` by calling `AnsiArtViewer::show()`. `AnsiArtViewer::mode()`
336
+
reads `TERM_ANSI_ART_MODE` (`viewer` default, or `inline` to auto-launch the view
337
+
once per message open).
338
+
320
339
### Status Bar Discipline
321
340
322
341
The bottom status bar has limited width. Keep it to the **most-used primary actions only** — typically scroll, prev/next, reply, and quit. Every other key belongs exclusively in the Ctrl-K help overlay.
0 commit comments