"Mark as read" exists only for rail folders (ServerRail.tsx:663-666). The server tile menu has only Mute/Browse/Leave (252-283); channel rows have no Mark as read ("Mark as unread" is Matrix-only, BufferList.tsx:961); category headings have no menu unless custom (284). store.markBuffersRead already exists (state/store.ts:3964).
Fix: Mark as read on channel rows (every service), category headings and server tiles; Esc marks the current channel read and jumps to the bottom when no popup is open; Shift+Esc marks the whole server read (Discord's shortcuts).
Part of the v1.0 UI pass.
"Mark as read" exists only for rail folders (ServerRail.tsx:663-666). The server tile menu has only Mute/Browse/Leave (252-283); channel rows have no Mark as read ("Mark as unread" is Matrix-only, BufferList.tsx:961); category headings have no menu unless custom (284). `store.markBuffersRead` already exists (state/store.ts:3964).
**Fix:** Mark as read on channel rows (every service), category headings and server tiles; Esc marks the current channel read and jumps to the bottom when no popup is open; Shift+Esc marks the whole server read (Discord's shortcuts).
_Part of the v1.0 UI pass._
Salastil
added this to the v1.0 milestone 2026-10-07 20:43:03 -04:00
Before (left) and after (right), from scripts/ui-shots.mjs.
Category heading - right-click ANIMALS. Before: nothing opened, because only headings you made had a menu. After:
Server tile - right-click a server in the rail. Mark as read now leads the menu (greyed out when nothing is waiting):
Also in this change:
Channel rows and the conversation header's menu offer Mark as read while something is waiting there (for every service; Mark as unread is still Matrix-only).
Escape reads the conversation you are in and jumps to its end; Shift+Escape reads every conversation in the server. It works from the message box, where you nearly always are, but not when a menu, dialog, picker or full-page panel is open, or another field has focus; the box's own Escapes (closing a suggestion list) still win because they handle the key first.
Checked in the isolated test copy with real key events: Esc from the message box cleared the open channel (5 → 0) and left the others alone; with a dialog open it did nothing; Shift+Esc cleared the other unread channels in the server. The rail's folder menu already had Mark Folder As Read.
Finished: [2745a2f](https://git.salastil.com/Salastil/moho/commit/2745a2f5322d01086d648e261eca428f21527993).
Before (left) and after (right), from `scripts/ui-shots.mjs`.
**Category heading** - right-click `ANIMALS`. Before: nothing opened, because only headings you made had a menu. After:

**Server tile** - right-click a server in the rail. Mark as read now leads the menu (greyed out when nothing is waiting):

Also in this change:
- **Channel rows** and the conversation header's menu offer *Mark as read* while something is waiting there (for every service; *Mark as unread* is still Matrix-only).
- **Escape** reads the conversation you are in and jumps to its end; **Shift+Escape** reads every conversation in the server. It works from the message box, where you nearly always are, but not when a menu, dialog, picker or full-page panel is open, or another field has focus; the box's own Escapes (closing a suggestion list) still win because they handle the key first.
Checked in the isolated test copy with real key events: Esc from the message box cleared the open channel (5 → 0) and left the others alone; with a dialog open it did nothing; Shift+Esc cleared the other unread channels in the server. The rail's folder menu already had *Mark Folder As Read*.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
"Mark as read" exists only for rail folders (ServerRail.tsx:663-666). The server tile menu has only Mute/Browse/Leave (252-283); channel rows have no Mark as read ("Mark as unread" is Matrix-only, BufferList.tsx:961); category headings have no menu unless custom (284).
store.markBuffersReadalready exists (state/store.ts:3964).Fix: Mark as read on channel rows (every service), category headings and server tiles; Esc marks the current channel read and jumps to the bottom when no popup is open; Shift+Esc marks the whole server read (Discord's shortcuts).
Part of the v1.0 UI pass.
Finished: 2745a2f.
Before (left) and after (right), from
scripts/ui-shots.mjs.Category heading - right-click
ANIMALS. Before: nothing opened, because only headings you made had a menu. After:Server tile - right-click a server in the rail. Mark as read now leads the menu (greyed out when nothing is waiting):
Also in this change:
Checked in the isolated test copy with real key events: Esc from the message box cleared the open channel (5 → 0) and left the others alone; with a dialog open it did nothing; Shift+Esc cleared the other unread channels in the server. The rail's folder menu already had Mark Folder As Read.