aboutsummaryrefslogtreecommitdiff
path: root/crates/dinggerd/src/watcher.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/dinggerd/src/watcher.rs')
-rw-r--r--crates/dinggerd/src/watcher.rs20
1 files changed, 15 insertions, 5 deletions
diff --git a/crates/dinggerd/src/watcher.rs b/crates/dinggerd/src/watcher.rs
index 56107d6..f039456 100644
--- a/crates/dinggerd/src/watcher.rs
+++ b/crates/dinggerd/src/watcher.rs
@@ -113,6 +113,20 @@ impl Watcher {
debug!(target = %pane.target, "observation skipped (viewer screen)");
continue;
};
+
+ // Keep the pane's agent label current even when the state is
+ // unchanged (e.g. an agent swap between two idle panes).
+ let agent_label = pane
+ .agent
+ .map(detect_core::agent_label)
+ .unwrap_or("")
+ .to_string();
+ if pane.written_agent != agent_label {
+ if let Err(err) = tmux::set_agent(&pane.pane_id, pane.agent) {
+ warn!(target = %pane.target, %err, "failed to write @agent");
+ }
+ }
+
if new_state == prev_state {
continue;
}
@@ -123,11 +137,7 @@ impl Watcher {
warn!(target = %pane.target, %err, "failed to write @agent_state");
}
- let agent_label = pane
- .agent
- .map(detect_core::agent_label)
- .unwrap_or("agent")
- .to_string();
+
if let Some(kind) = notification_kind_for_transition(prev_state, new_state) {
if pane.suppresses_notifications() {
debug!(target = %pane.target, "suppressed (active pane)");