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.rs22
1 files changed, 17 insertions, 5 deletions
diff --git a/crates/dinggerd/src/watcher.rs b/crates/dinggerd/src/watcher.rs
index 46f5ebd..56107d6 100644
--- a/crates/dinggerd/src/watcher.rs
+++ b/crates/dinggerd/src/watcher.rs
@@ -46,13 +46,25 @@ impl Watcher {
}
pub fn run(&mut self) -> Result<(), String> {
- // Fail fast when tmux is unreachable at startup; after that, keep
- // retrying — the server may come back.
- self.tick()?;
info!(interval = self.interval_secs, "watching tmux panes");
+ // dingger is a client of the tmux server, which may not exist yet —
+ // it starts when the first terminal opens one. Wait for it, then
+ // keep watching across server restarts.
+ let mut had_server = false;
loop {
- if let Err(err) = self.tick() {
- warn!(%err, "watch tick failed");
+ match self.tick() {
+ Ok(()) => {
+ if !had_server {
+ info!("tmux server available");
+ had_server = true;
+ }
+ }
+ Err(err) => {
+ if had_server {
+ warn!(%err, "tmux server unavailable; waiting for it to return");
+ }
+ had_server = false;
+ }
}
std::thread::sleep(std::time::Duration::from_secs(self.interval_secs));
}