pub fn is_iterm2() -> bool {
if std::env::var("TERM_PROGRAM").as_deref() == Ok("iTerm.app") {
return true;
}
if std::env::var("ITERM_SESSION_ID").is_ok() {
return true;
}
std::path::Path::new("/Applications/iTerm.app").exists()
}
pub fn open_session_tab(session_id: &str) -> Result<(), String> {
let script = format!(
r#"tell application "iTerm2"
tell current window
create tab with default profile command "tm session attach {session_id}"
end tell
end tell"#
);
let status = std::process::Command::new("osascript")
.arg("-e")
.arg(&script)
.status()
.map_err(|e| format!("osascript spawn failed: {e}"))?;
if status.success() {
Ok(())
} else {
Err(format!("osascript exited with status {status}"))
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn iterm2_detected_via_term_program() {
let old = std::env::var("TERM_PROGRAM").ok();
unsafe { std::env::set_var("TERM_PROGRAM", "iTerm.app") };
assert!(is_iterm2());
match old {
Some(v) => unsafe { std::env::set_var("TERM_PROGRAM", v) },
None => unsafe { std::env::remove_var("TERM_PROGRAM") },
}
}
#[test]
fn iterm2_detected_via_session_id() {
let old = std::env::var("ITERM_SESSION_ID").ok();
unsafe { std::env::set_var("ITERM_SESSION_ID", "w0t0p0:abc123") };
assert!(is_iterm2());
match old {
Some(v) => unsafe { std::env::set_var("ITERM_SESSION_ID", v) },
None => unsafe { std::env::remove_var("ITERM_SESSION_ID") },
}
}
#[test]
fn not_iterm2_without_signals() {
let _result = is_iterm2(); }
}