1
1
mirror of https://github.com/wez/wezterm.git synced 2024-09-20 11:17:15 +03:00

window: track phys_code on macos

We don't do anything useful with it yet

refs: https://github.com/wez/wezterm/issues/1483
This commit is contained in:
Wez Furlong 2022-01-01 22:04:59 -07:00
parent b15907f61f
commit d714c5d5b6
6 changed files with 143 additions and 0 deletions

View File

@ -509,6 +509,9 @@ pub struct KeyEvent {
pub raw_modifiers: Modifiers,
pub raw_code: Option<u32>,
/// The physical location of the key on an ANSI-Standard US layout
pub phys_code: Option<PhysKeyCode>,
/// How many times this key repeats
pub repeat_count: u16,

View File

@ -1,5 +1,137 @@
#![allow(non_upper_case_globals)]
#![allow(dead_code)]
use std::collections::HashMap;
use wezterm_input_types::PhysKeyCode;
fn build_map() -> HashMap<u16, PhysKeyCode> {
[
(kVK_ANSI_A, PhysKeyCode::A),
(kVK_ANSI_S, PhysKeyCode::S),
(kVK_ANSI_D, PhysKeyCode::D),
(kVK_ANSI_F, PhysKeyCode::F),
(kVK_ANSI_H, PhysKeyCode::H),
(kVK_ANSI_G, PhysKeyCode::G),
(kVK_ANSI_Z, PhysKeyCode::Z),
(kVK_ANSI_X, PhysKeyCode::X),
(kVK_ANSI_C, PhysKeyCode::C),
(kVK_ANSI_V, PhysKeyCode::V),
(kVK_ANSI_B, PhysKeyCode::B),
(kVK_ANSI_Q, PhysKeyCode::Q),
(kVK_ANSI_W, PhysKeyCode::W),
(kVK_ANSI_E, PhysKeyCode::E),
(kVK_ANSI_R, PhysKeyCode::R),
(kVK_ANSI_Y, PhysKeyCode::Y),
(kVK_ANSI_T, PhysKeyCode::T),
(kVK_ANSI_1, PhysKeyCode::K1),
(kVK_ANSI_2, PhysKeyCode::K2),
(kVK_ANSI_3, PhysKeyCode::K3),
(kVK_ANSI_4, PhysKeyCode::K4),
(kVK_ANSI_6, PhysKeyCode::K6),
(kVK_ANSI_5, PhysKeyCode::K5),
(kVK_ANSI_Equal, PhysKeyCode::Equal),
(kVK_ANSI_9, PhysKeyCode::K9),
(kVK_ANSI_7, PhysKeyCode::K7),
(kVK_ANSI_Minus, PhysKeyCode::Minus),
(kVK_ANSI_8, PhysKeyCode::K8),
(kVK_ANSI_0, PhysKeyCode::K0),
(kVK_ANSI_RightBracket, PhysKeyCode::RightBracket),
(kVK_ANSI_O, PhysKeyCode::O),
(kVK_ANSI_U, PhysKeyCode::U),
(kVK_ANSI_LeftBracket, PhysKeyCode::LeftBracket),
(kVK_ANSI_I, PhysKeyCode::I),
(kVK_ANSI_P, PhysKeyCode::P),
(kVK_ANSI_L, PhysKeyCode::L),
(kVK_ANSI_J, PhysKeyCode::J),
(kVK_ANSI_Quote, PhysKeyCode::Quote),
(kVK_ANSI_K, PhysKeyCode::K),
(kVK_ANSI_Semicolon, PhysKeyCode::Semicolon),
(kVK_ANSI_Backslash, PhysKeyCode::Backslash),
(kVK_ANSI_Comma, PhysKeyCode::Comma),
(kVK_ANSI_Slash, PhysKeyCode::Slash),
(kVK_ANSI_N, PhysKeyCode::N),
(kVK_ANSI_M, PhysKeyCode::M),
(kVK_ANSI_Period, PhysKeyCode::Period),
(kVK_ANSI_Grave, PhysKeyCode::Grave),
(kVK_ANSI_KeypadDecimal, PhysKeyCode::KeypadDecimal),
(kVK_ANSI_KeypadMultiply, PhysKeyCode::KeypadMultiply),
(kVK_ANSI_KeypadPlus, PhysKeyCode::KeypadPlus),
(kVK_ANSI_KeypadClear, PhysKeyCode::KeypadClear),
(kVK_ANSI_KeypadDivide, PhysKeyCode::KeypadDivide),
(kVK_ANSI_KeypadEnter, PhysKeyCode::KeypadEnter),
(kVK_ANSI_KeypadMinus, PhysKeyCode::KeypadMinus),
(kVK_ANSI_KeypadEquals, PhysKeyCode::KeypadEquals),
(kVK_ANSI_Keypad0, PhysKeyCode::Keypad0),
(kVK_ANSI_Keypad1, PhysKeyCode::Keypad1),
(kVK_ANSI_Keypad2, PhysKeyCode::Keypad2),
(kVK_ANSI_Keypad3, PhysKeyCode::Keypad3),
(kVK_ANSI_Keypad4, PhysKeyCode::Keypad4),
(kVK_ANSI_Keypad5, PhysKeyCode::Keypad5),
(kVK_ANSI_Keypad6, PhysKeyCode::Keypad6),
(kVK_ANSI_Keypad7, PhysKeyCode::Keypad7),
(kVK_ANSI_Keypad8, PhysKeyCode::Keypad8),
(kVK_ANSI_Keypad9, PhysKeyCode::Keypad9),
(kVK_Return, PhysKeyCode::Return),
(kVK_Tab, PhysKeyCode::Tab),
(kVK_Space, PhysKeyCode::Space),
(kVK_Delete, PhysKeyCode::Delete),
(kVK_Escape, PhysKeyCode::Escape),
(kVK_Command, PhysKeyCode::LeftWindows),
(kVK_Shift, PhysKeyCode::LeftShift),
(kVK_CapsLock, PhysKeyCode::CapsLock),
(kVK_Option, PhysKeyCode::LeftAlt),
(kVK_Control, PhysKeyCode::LeftControl),
(kVK_RightCommand, PhysKeyCode::RightWindows),
(kVK_RightShift, PhysKeyCode::RightShift),
(kVK_RightOption, PhysKeyCode::RightAlt),
(kVK_RightControl, PhysKeyCode::RightControl),
(kVK_Function, PhysKeyCode::Function),
(kVK_F17, PhysKeyCode::F17),
(kVK_VolumeUp, PhysKeyCode::VolumeUp),
(kVK_VolumeDown, PhysKeyCode::VolumeDown),
(kVK_Mute, PhysKeyCode::Mute),
(kVK_F18, PhysKeyCode::F18),
(kVK_F19, PhysKeyCode::F19),
(kVK_F20, PhysKeyCode::F20),
(kVK_F5, PhysKeyCode::F5),
(kVK_F6, PhysKeyCode::F6),
(kVK_F7, PhysKeyCode::F7),
(kVK_F3, PhysKeyCode::F3),
(kVK_F8, PhysKeyCode::F8),
(kVK_F9, PhysKeyCode::F9),
(kVK_F11, PhysKeyCode::F11),
(kVK_F13, PhysKeyCode::F13),
(kVK_F16, PhysKeyCode::F16),
(kVK_F14, PhysKeyCode::F14),
(kVK_F10, PhysKeyCode::F10),
(kVK_F12, PhysKeyCode::F12),
(kVK_F15, PhysKeyCode::F15),
(kVK_Help, PhysKeyCode::Help),
(kVK_Home, PhysKeyCode::Home),
(kVK_PageUp, PhysKeyCode::PageUp),
(kVK_ForwardDelete, PhysKeyCode::ForwardDelete),
(kVK_F4, PhysKeyCode::F4),
(kVK_End, PhysKeyCode::End),
(kVK_F2, PhysKeyCode::F2),
(kVK_PageDown, PhysKeyCode::PageDown),
(kVK_F1, PhysKeyCode::F1),
(kVK_LeftArrow, PhysKeyCode::LeftArrow),
(kVK_RightArrow, PhysKeyCode::RightArrow),
(kVK_DownArrow, PhysKeyCode::DownArrow),
(kVK_UpArrow, PhysKeyCode::UpArrow),
]
.iter()
.map(|&tuple| tuple)
.collect()
}
lazy_static::lazy_static! {
static ref MAP: HashMap<u16, PhysKeyCode> = build_map();
}
pub fn vkey_to_phys(vkey: u16) -> Option<PhysKeyCode> {
MAP.get(&vkey).copied()
}
pub const kVK_ANSI_A: u16 = 0x00;
pub const kVK_ANSI_S: u16 = 0x01;
pub const kVK_ANSI_D: u16 = 0x02;

View File

@ -1389,6 +1389,7 @@ impl WindowView {
modifiers,
raw_modifiers: Modifiers::NONE,
raw_code: None,
phys_code: None,
repeat_count: 1,
key_is_down: true,
}
@ -1444,6 +1445,7 @@ impl WindowView {
modifiers: Modifiers::NONE,
raw_modifiers: Modifiers::NONE,
raw_code: None,
phys_code: None,
repeat_count: 1,
key_is_down,
}
@ -1949,6 +1951,7 @@ impl WindowView {
modifiers,
raw_modifiers,
raw_code: Some(virtual_key as u32),
phys_code: super::keycodes::vkey_to_phys(virtual_key),
repeat_count: 1,
key_is_down,
}

View File

@ -1300,6 +1300,7 @@ unsafe fn ime_composition(
raw_key: None,
raw_modifiers: Modifiers::NONE,
raw_code: None,
phys_code: None,
modifiers: Modifiers::NONE,
repeat_count: 1,
key_is_down: true,
@ -1855,6 +1856,7 @@ unsafe fn key(hwnd: HWND, msg: UINT, wparam: WPARAM, lparam: LPARAM) -> Option<L
raw_key: None,
raw_modifiers: Modifiers::NONE,
raw_code: Some(wparam as u32),
phys_code: None,
modifiers,
repeat_count: 1,
key_is_down: !releasing,
@ -1957,6 +1959,7 @@ unsafe fn key(hwnd: HWND, msg: UINT, wparam: WPARAM, lparam: LPARAM) -> Option<L
raw_key: if is_composed { raw } else { None },
raw_modifiers,
raw_code: Some(wparam as u32),
phys_code: None,
modifiers,
repeat_count: repeat,
key_is_down: !releasing,

View File

@ -197,6 +197,7 @@ impl Keyboard {
raw_key: None,
raw_modifiers,
raw_code: Some(xcode),
phys_code: None,
repeat_count: 1,
key_is_down: pressed,
})

View File

@ -428,6 +428,7 @@ impl XWindowInner {
raw_key: None,
raw_modifiers: Modifiers::NONE,
raw_code: None,
phys_code: None,
modifiers: Modifiers::NONE,
repeat_count: 1,
key_is_down: true,