in codex-rs/terminal-detection/src/lib.rs [301:388]
fn detect_terminal_info_from_env(env: &dyn Environment) -> TerminalInfo {
let multiplexer = detect_multiplexer(env);
if let Some(term_program) = env.var_non_empty("TERM_PROGRAM") {
if is_tmux_term_program(&term_program)
&& matches!(multiplexer, Some(Multiplexer::Tmux { .. }))
&& let Some(terminal) =
terminal_from_tmux_client_info(env.tmux_client_info(), multiplexer.clone())
{
return terminal;
}
let version = env.var_non_empty("TERM_PROGRAM_VERSION");
let name = terminal_name_from_term_program(&term_program).unwrap_or(TerminalName::Unknown);
return TerminalInfo::from_term_program(name, term_program, version, multiplexer);
}
if env.has("WEZTERM_VERSION") {
let version = env.var_non_empty("WEZTERM_VERSION");
return TerminalInfo::from_name(TerminalName::WezTerm, version, multiplexer);
}
if env.has("ITERM_SESSION_ID") || env.has("ITERM_PROFILE") || env.has("ITERM_PROFILE_NAME") {
return TerminalInfo::from_name(TerminalName::Iterm2, /*version*/ None, multiplexer);
}
if env.has("TERM_SESSION_ID") {
return TerminalInfo::from_name(
TerminalName::AppleTerminal,
/*version*/ None,
multiplexer,
);
}
if env.has("KITTY_WINDOW_ID")
|| env
.var("TERM")
.map(|term| term.contains("kitty"))
.unwrap_or(false)
{
return TerminalInfo::from_name(TerminalName::Kitty, /*version*/ None, multiplexer);
}
if env.has("ALACRITTY_SOCKET")
|| env
.var("TERM")
.map(|term| term == "alacritty")
.unwrap_or(false)
{
return TerminalInfo::from_name(
TerminalName::Alacritty,
/*version*/ None,
multiplexer,
);
}
if env.has("KONSOLE_VERSION") {
let version = env.var_non_empty("KONSOLE_VERSION");
return TerminalInfo::from_name(TerminalName::Konsole, version, multiplexer);
}
if env.has("GNOME_TERMINAL_SCREEN") {
return TerminalInfo::from_name(
TerminalName::GnomeTerminal,
/*version*/ None,
multiplexer,
);
}
if env.has("VTE_VERSION") {
let version = env.var_non_empty("VTE_VERSION");
return TerminalInfo::from_name(TerminalName::Vte, version, multiplexer);
}
if env.has("WT_SESSION") {
return TerminalInfo::from_name(
TerminalName::WindowsTerminal,
/*version*/ None,
multiplexer,
);
}
if let Some(term) = env.var_non_empty("TERM") {
return TerminalInfo::from_term(term, multiplexer);
}
TerminalInfo::unknown(multiplexer)
}