Skip to content

feat: deafen, and a hint bar that fits - #104

Merged
davidborzek merged 1 commit into
mainfrom
feat/deafen-and-hint-bar
Aug 24, 2026
Merged

feat: deafen, and a hint bar that fits#104
davidborzek merged 1 commit into
mainfrom
feat/deafen-and-hint-bar

Conversation

@davidborzek

Copy link
Copy Markdown
Owner

DeafenM / :deafen / ringo ctl deafen mutes the call in both
directions. The speaker side points the call's player at aubridge; local only,
so undoing it needs no renegotiation. It takes the microphone with it, and
restores a microphone that was already muted before.

Hint bar — fifteen hints during a call, most of them global. Now it follows
the state: idle lists where you can go, a call lists what you can do, and ?
reads "more". Fifteen down to five. The contacts/history/log overlays lose their
↑↓ and PgUp/PgDn hints.

h toggles hold both ways, with a label that says which way; r is gone.
The hold/resume commands stay separate for scripting.

Fix: leaving a transfer put you in the dial field. Both exits set
dial.mode = Dial, but entering transfer mode never sets it — it stays Normal.

Four things from one pass over the call UI.

**Deafen.** `M` (or `:deafen`, or `ringo ctl deafen`) turns the call's
audio off in both directions. The speaker side points the call's player at
aubridge — audio still arrives and is still decoded, it just stops
reaching a speaker, so undoing it needs no renegotiation. Undeafening
reads `audio_player` back from the running config rather than restoring a
remembered value, so a device swapped mid-call is not clobbered.

Deafening takes the microphone with it, the way every chat client
resolves this: hearing nothing while still being heard is a trap. The
engine only gains one primitive, `set_speaker_muted`; pairing it with the
mic is the TUI's policy. Muting by hand and then deafening and then
undeafening leaves you muted, which is why the previous mic state is
remembered.

**A hint bar that fits.** Fifteen hints during a call, most of them
global. Now the bar follows the state: idle it lists where you can go, in
a call what you can do, and `?` reads "more" so it is visible that
something was set aside. Fifteen down to five. The overlays lose their
↑↓ and PgUp/PgDn hints too — scrolling a list needs no telling, and the
slots are better spent on what is particular to each overlay.

**Hold on one key.** `h` toggles both ways and the label says which way
it will go; `r` is gone. A call is in exactly one of the two states, so a
separate resume key only ever applied to half of them. The `hold` and
`resume` commands stay separate — for scripting, explicit is right.

**Leaving a transfer dropped you in the dial field.** Both exits set
`dial.mode = Dial`, but entering transfer mode never sets it at all: it
stays Normal. So cancelling or sending a transfer put the user in a mode
they were never in. Now Normal on both paths, blind and attended.
@davidborzek
davidborzek merged commit 30cebb6 into main Aug 24, 2026
13 checks passed
@davidborzek
davidborzek deleted the feat/deafen-and-hint-bar branch August 24, 2026 20:50
@github-actions github-actions Bot mentioned this pull request Aug 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant