use crate::ported::bindings::tmux::get_tmux_output;
pub fn attached_clients(pl: &(), minimum: i32) -> Option<String> {
let session_output = get_tmux_output(pl, &["list-panes", "-F", "#{session_name}"])?;
if session_output.is_empty() {
return None; }
let session_name = session_output
.trim_end()
.split('\n')
.next()
.map(String::from)?;
let attached_clients_output = get_tmux_output(pl, &["list-clients", "-t", &session_name])?;
let attached_count = attached_clients_output.trim_end().split('\n').count() as i32;
if attached_count < minimum {
None
} else {
Some(attached_count.to_string())
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::ported::bindings::tmux::POWERLINE_TMUX_EXE_ENV_LOCK;
#[test]
fn attached_clients_safe_when_tmux_unavailable() {
let _guard = POWERLINE_TMUX_EXE_ENV_LOCK
.lock()
.unwrap_or_else(|p| p.into_inner());
std::env::set_var("POWERLINE_TMUX_EXE", "/nonexistent/tmux-powerliners-test");
let r = attached_clients(&(), 1);
std::env::remove_var("POWERLINE_TMUX_EXE");
assert!(r.is_none());
}
}