Return the keyboard on Remote shortcuts and announce focus changes

During remote focus a Remote shortcut now ends capture, like F11,
instead of running its command, which would race with the focus change.
The reader announces when the keyboard starts and stops controlling the
remote computer, and the consent wording names the F11 escape.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Chase CichorzandClaude Opus 5.5 committed 2026-11-06 16:06:38 -05:00
1 parent c234cb82a8
commit 477d860fb8
5 files changed
+43 -25

No files matched your search

+8 -6
View File
@@ -61,10 +61,11 @@ Each native transition passes through `RemoteRepeatNormalizer` and
local chord. Keys outside the Remote vocabulary are consumed locally.
Only two things stay local. The core escape, F11 with no modifiers, ends capture
on the X thread without waiting for a Tentacle or the network. Commands whose
IDs start with the requesting Tentacle's `tentacle/<session>/` prefix, as
resolved from current bindings including remaps, are dispatched through the
normal command queue. Lock, secure input, XTerm handoff, learn mode, OCR review,
on the X thread without waiting for a Tentacle or the network. Shortcuts for
commands whose IDs start with the requesting Tentacle's `tentacle/<session>/`
prefix, as resolved from current bindings including remaps, also return the
keyboard here (reason `requested`) without running the command; running it
would race with the focus change. Pressed again under local focus they run. Lock, secure input, XTerm handoff, learn mode, OCR review,
a device hierarchy change, an inconsistent stream or a full 512-event queue end
capture with reason `local`.
@@ -81,8 +82,9 @@ handed off and showing no reader UI. Revocation of the lease ends capture.
A private Xvfb test drives XTEST keys into the real owner with a focused `xev`
window as the local application: plain keys, Shift+Tab and a reader-modifier
chord are forwarded with correct names and pairing; the Remote shortcut stays
local and withdraws its prefix; unsupported keys and F11 are consumed; and the
chord are forwarded with correct names and pairing; the Remote shortcut
withdraws its prefix and ends capture without running; unsupported keys and F11
are consumed; and the
window receives none of the captured keys but does receive input afterwards.
Lock ends capture with a held modifier released remotely. Five repeated runs
passed. App tests with a synthetic owner and a real Go SDK child cover focus