diff options
| author | Igor Soarez <igor@soarez.org> | 2026-10-23 19:11:23 +0300 |
|---|---|---|
| committer | Igor Soarez <igor@soarez.org> | 2026-10-23 19:11:23 +0300 |
| commit | e4d3bc242bd3d18aa83a76f25dcbe5cb7a2ced78 (patch) | |
| tree | 70b7631a0558829fb53814f3fb5a1ad32977149f /packaging/launchd | |
| parent | b4f45632debe6b8dc2f44ca6cc1b003d9093ad33 (diff) | |
raise the terminal window that holds the tmux client
a jump (any click, a shortcut, search) activated the terminal app, which
raised whichever window was used last. now:
- the client: the named one (a status-line click), else one already on a
session holding the agent's window (several terminal windows can show
one session; it shows the agent without switching, and keeps its own
session in a session group), else any; the focused one first, then the
one used last (its last input or focus).
- Ghostty (1.3+, scriptable by terminal id, not by tty): dingger learns
which terminal holds each client when it gains focus. tmux's
client-focus-in hook runs `dingger terminal focused`, which asks Ghostty
for its focused terminal and records it in @dingger_terminal_<tty>, but
only if the client is still focused once Ghostty answered (a fast switch
must not pair the wrong terminal); a terminal holds one client, so an
older pairing with it is dropped. `focus` raises the exact terminal
(window, tab, split) through `tmux run-shell`: Apple Events from the tmux
server count as Ghostty's own, so no permission prompt. a terminal that
is gone is forgotten and the app activated, as without a pairing.
- in a hook, #{client_name} can be another client (the previous event's);
the snippet's hook uses #{hook_client}.
e2e step 20: two nested clients on one session, focused by typing focus
reports into their outer panes, a fake osascript as Ghostty, a fake open
(tests never activate a real app); it loads the snippet's own hook line.
each rule has a negative control that fails.
Diffstat (limited to 'packaging/launchd')
0 files changed, 0 insertions, 0 deletions
