use crossterm::event::KeyModifiers;
#[cfg(test)]
const ALT_PREFIX: &str = "⌥+";
#[cfg(all(not(test), target_os = "macos"))]
const ALT_PREFIX: &str = "⌥+";
#[cfg(all(not(test), not(target_os = "macos")))]
const ALT_PREFIX: &str = "alt+";
pub fn alt_prefix() -> &'static str {
ALT_PREFIX
}
pub fn has_ctrl_or_alt(mods: KeyModifiers) -> bool {
(mods.contains(KeyModifiers::CONTROL) || mods.contains(KeyModifiers::ALT)) && !is_altgr(mods)
}
#[cfg(windows)]
#[inline]
pub fn is_altgr(mods: KeyModifiers) -> bool {
mods.contains(KeyModifiers::ALT) && mods.contains(KeyModifiers::CONTROL)
}
#[cfg(not(windows))]
#[inline]
pub fn is_altgr(_mods: KeyModifiers) -> bool {
false
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn altgr_only_fires_on_windows() {
let altgr_mods = KeyModifiers::ALT | KeyModifiers::CONTROL;
if cfg!(windows) {
assert!(is_altgr(altgr_mods));
assert!(!has_ctrl_or_alt(altgr_mods));
} else {
assert!(!is_altgr(altgr_mods));
assert!(has_ctrl_or_alt(altgr_mods));
}
assert!(!is_altgr(KeyModifiers::ALT));
assert!(has_ctrl_or_alt(KeyModifiers::ALT));
assert!(!has_ctrl_or_alt(KeyModifiers::NONE));
}
#[test]
fn alt_prefix_uses_deterministic_test_spelling() {
assert_eq!(alt_prefix(), "⌥+");
}
}