use crate::core::config::Config;
use std::path::PathBuf;
#[derive(Debug, Clone)]
pub struct PromptContext {
pub cwd: PathBuf,
pub width: usize,
pub exit_code: i32,
pub last_command_duration_ms: Option<u64>,
pub config: std::sync::Arc<Config>,
}
impl PromptContext {
pub fn from_inputs(
cwd: Option<PathBuf>,
width: Option<usize>,
exit_code: i32,
last_command_duration_ms: Option<u64>,
) -> Self {
let cwd =
cwd.unwrap_or_else(|| std::env::current_dir().unwrap_or_else(|_| PathBuf::from(".")));
#[cfg(unix)]
let width = width
.or_else(crate::tmux::get_pane_width)
.unwrap_or_else(|| {
terminal_size::terminal_size()
.map(|(w, _)| w.0 as usize)
.unwrap_or(80)
});
#[cfg(not(unix))]
let width = width.unwrap_or_else(|| {
terminal_size::terminal_size()
.map(|(w, _)| w.0 as usize)
.unwrap_or(80)
});
let last_command_duration_ms = last_command_duration_ms.or_else(read_duration_ms_from_env);
let config = Config::load_cached();
Self {
cwd,
width,
exit_code,
last_command_duration_ms,
config,
}
}
}
fn read_duration_ms_from_env() -> Option<u64> {
let raw = std::env::var("PANESHIP_LAST_CMD_DURATION_MS").ok()?;
raw.trim().parse::<u64>().ok()
}