use crossterm::event::{KeyCode, KeyEvent, KeyModifiers};
pub(super) fn is_copy_shortcut(key: &KeyEvent) -> bool {
let is_c = matches!(key.code, KeyCode::Char('c') | KeyCode::Char('C'));
if !is_c {
return false;
}
if key.modifiers.contains(KeyModifiers::SUPER) {
return true;
}
key.modifiers.contains(KeyModifiers::CONTROL) && key.modifiers.contains(KeyModifiers::SHIFT)
}
pub(super) fn is_file_tree_toggle_shortcut(key: &KeyEvent) -> bool {
let is_shifted_e = matches!(key.code, KeyCode::Char('E'))
|| (matches!(key.code, KeyCode::Char('e')) && key.modifiers.contains(KeyModifiers::SHIFT));
if !is_shifted_e {
return false;
}
let has_forbidden_modifier =
key.modifiers.contains(KeyModifiers::ALT) || key.modifiers.contains(KeyModifiers::SUPER);
let ctrl_shift_e = key.modifiers.contains(KeyModifiers::CONTROL) && !has_forbidden_modifier;
let cmd_shift_e = key.modifiers.contains(KeyModifiers::SUPER)
&& key.modifiers.contains(KeyModifiers::SHIFT)
&& !key.modifiers.contains(KeyModifiers::CONTROL)
&& !key.modifiers.contains(KeyModifiers::ALT);
ctrl_shift_e || cmd_shift_e
}
pub(super) fn tool_details_shortcut_label() -> &'static str {
if cfg!(target_os = "macos") {
"\u{2325}+V"
} else {
"Alt+V"
}
}
pub(super) fn activity_shortcut_label() -> &'static str {
"Ctrl+O"
}
pub(super) fn alt_nav_modifiers(modifiers: KeyModifiers) -> bool {
modifiers.contains(KeyModifiers::ALT)
&& !modifiers.contains(KeyModifiers::CONTROL)
&& !modifiers.contains(KeyModifiers::SUPER)
}
pub(super) fn is_macos_option_v_legacy_key(key: &KeyEvent) -> bool {
is_macos_option_v_legacy_key_for_platform(key, cfg!(target_os = "macos"))
}
pub(super) fn is_macos_option_v_legacy_key_for_platform(key: &KeyEvent, is_macos: bool) -> bool {
is_macos && key.modifiers.is_empty() && matches!(key.code, KeyCode::Char('\u{221A}'))
}
pub(super) fn is_paste_shortcut(key: &KeyEvent) -> bool {
let is_v = matches!(key.code, KeyCode::Char('v') | KeyCode::Char('V'));
let is_legacy_ctrl_v = matches!(key.code, KeyCode::Char('\u{16}'));
if !is_v && !is_legacy_ctrl_v {
return false;
}
if is_legacy_ctrl_v {
return true;
}
if key.modifiers.contains(KeyModifiers::SUPER) {
return true;
}
key.modifiers.contains(KeyModifiers::CONTROL)
}
pub(super) fn is_text_input_key(key: &KeyEvent) -> bool {
if matches!(key.code, KeyCode::Char(c) if c.is_control()) {
return false;
}
!key.modifiers.contains(KeyModifiers::CONTROL)
&& !key.modifiers.contains(KeyModifiers::ALT)
&& !key.modifiers.contains(KeyModifiers::SUPER)
}
pub(super) fn is_ctrl_h_backspace(key: &KeyEvent) -> bool {
matches!(key.code, KeyCode::Char('h'))
&& key.modifiers.contains(KeyModifiers::CONTROL)
&& !key.modifiers.contains(KeyModifiers::ALT)
&& !key.modifiers.contains(KeyModifiers::SUPER)
}