rmux-server 0.10.0

Tokio daemon and request dispatcher for the RMUX terminal multiplexer.
Documentation
use rmux_core::command_parser::CommandParser;
use rmux_proto::OptionName;

use crate::pane_terminals::HandlerState;

pub(in crate::handler) fn command_parser_from_state(state: &HandlerState) -> CommandParser {
    let parser = CommandParser::new().with_environment_store(&state.environment);

    #[cfg(windows)]
    let parser = match windows_home_dir(&state.environment) {
        Some(home_dir) => parser.with_home_dir(home_dir),
        None => parser,
    };

    parser.with_command_aliases(
        state
            .options
            .resolve_array_values(None, OptionName::CommandAlias),
    )
}

#[cfg(windows)]
fn windows_home_dir(environment: &rmux_core::EnvironmentStore) -> Option<&str> {
    environment
        .global_value("HOME")
        .filter(|home| !home.is_empty())
        .or_else(|| {
            environment
                .global_value("USERPROFILE")
                .filter(|home| !home.is_empty())
        })
}