diff options
Diffstat (limited to 'crates/dinggerd/src/main.rs')
| -rw-r--r-- | crates/dinggerd/src/main.rs | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/crates/dinggerd/src/main.rs b/crates/dinggerd/src/main.rs index e43f9a7..b97471c 100644 --- a/crates/dinggerd/src/main.rs +++ b/crates/dinggerd/src/main.rs @@ -13,6 +13,7 @@ mod tmux; mod watcher; use clap::{Parser, Subcommand}; +use std::io::IsTerminal; use tracing_subscriber::EnvFilter; #[derive(Parser)] @@ -128,7 +129,14 @@ fn main() { let cli = Cli::parse(); // The daemon logs its work; commands print their own output and only // log problems. - let default_level = if matches!(cli.command, Command::Watch { .. }) { "info" } else { "warn" }; + // tmux shows whatever its hooks print, and a non-zero exit, as a + // message: the commands tmux runs are silent unless run by hand. + let by_tmux = matches!(cli.command, Command::Terminal { .. }) && !std::io::stderr().is_terminal(); + let default_level = match cli.command { + Command::Watch { .. } => "info", + _ if by_tmux => "off", + _ => "warn", + }; tracing_subscriber::fmt() .with_env_filter(EnvFilter::try_from_default_env().unwrap_or_else(|_| default_level.into())) .init(); @@ -197,9 +205,12 @@ fn main() { TerminalAction::Focused { client } => terminals::learn(client), TerminalAction::Raise { client } => terminals::raise(client), }; + // Best effort, run by tmux (the focus hook, a raise): an outcome + // like "focus moved on" or "terminal gone" is not a failure. if let Err(err) = result { - eprintln!("dingger: {err}"); - std::process::exit(1); + if !by_tmux { + eprintln!("dingger: {err}"); + } } } // Never fails the agent: exits 0, prints nothing. |
