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

window: track phys_code on Windows

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:43:12 -07:00
parent d714c5d5b6
commit 45631389c3
3 changed files with 136 additions and 2 deletions

View File

@ -0,0 +1,133 @@
use std::collections::HashMap;
use wezterm_input_types::PhysKeyCode;
use winapi::shared::minwindef::WPARAM;
use winapi::um::winuser::*;
fn build_map() -> HashMap<WPARAM, PhysKeyCode> {
[
(0x41, PhysKeyCode::A),
(0x53, PhysKeyCode::S),
(0x44, PhysKeyCode::D),
(0x46, PhysKeyCode::F),
(0x48, PhysKeyCode::H),
(0x47, PhysKeyCode::G),
(0x5a, PhysKeyCode::Z),
(0x58, PhysKeyCode::X),
(0x43, PhysKeyCode::C),
(0x56, PhysKeyCode::V),
(0x42, PhysKeyCode::B),
(0x51, PhysKeyCode::Q),
(0x57, PhysKeyCode::W),
(0x45, PhysKeyCode::E),
(0x52, PhysKeyCode::R),
(0x59, PhysKeyCode::Y),
(0x54, PhysKeyCode::T),
(0x31, PhysKeyCode::K1),
(0x32, PhysKeyCode::K2),
(0x33, PhysKeyCode::K3),
(0x34, PhysKeyCode::K4),
(0x36, PhysKeyCode::K6),
(0x35, PhysKeyCode::K5),
(VK_OEM_PLUS, PhysKeyCode::Equal),
(0x39, PhysKeyCode::K9),
(0x37, PhysKeyCode::K7),
(VK_OEM_MINUS, PhysKeyCode::Minus),
(0x38, PhysKeyCode::K8),
(0x30, PhysKeyCode::K0),
(VK_OEM_6, PhysKeyCode::RightBracket),
(0x4f, PhysKeyCode::O),
(0x55, PhysKeyCode::U),
(VK_OEM_4, PhysKeyCode::LeftBracket),
(0x49, PhysKeyCode::I),
(0x50, PhysKeyCode::P),
(0x4c, PhysKeyCode::L),
(0x4a, PhysKeyCode::J),
(VK_OEM_7, PhysKeyCode::Quote),
(0x4b, PhysKeyCode::K),
(VK_OEM_1, PhysKeyCode::Semicolon), // FIXME: OEM "can vary by keyboard!"
(VK_OEM_5, PhysKeyCode::Backslash),
(VK_OEM_COMMA, PhysKeyCode::Comma),
(VK_OEM_2, PhysKeyCode::Slash),
(0x4e, PhysKeyCode::N),
(0x4d, PhysKeyCode::M),
(VK_OEM_PERIOD, PhysKeyCode::Period),
(VK_OEM_3, PhysKeyCode::Grave),
(VK_DECIMAL, PhysKeyCode::KeypadDecimal),
(VK_MULTIPLY, PhysKeyCode::KeypadMultiply),
(VK_ADD, PhysKeyCode::KeypadPlus),
(VK_CLEAR, PhysKeyCode::KeypadClear),
(VK_DIVIDE, PhysKeyCode::KeypadDivide),
// (kVK_ANSI_KeypadEnter, PhysKeyCode::KeypadEnter),
(VK_SUBTRACT, PhysKeyCode::KeypadMinus),
// (kVK_ANSI_KeypadEquals, PhysKeyCode::KeypadEquals),
(VK_NUMPAD0, PhysKeyCode::Keypad0),
(VK_NUMPAD1, PhysKeyCode::Keypad1),
(VK_NUMPAD2, PhysKeyCode::Keypad2),
(VK_NUMPAD3, PhysKeyCode::Keypad3),
(VK_NUMPAD4, PhysKeyCode::Keypad4),
(VK_NUMPAD5, PhysKeyCode::Keypad5),
(VK_NUMPAD6, PhysKeyCode::Keypad6),
(VK_NUMPAD7, PhysKeyCode::Keypad7),
(VK_NUMPAD8, PhysKeyCode::Keypad8),
(VK_NUMPAD9, PhysKeyCode::Keypad9),
(VK_RETURN, PhysKeyCode::Return),
(VK_TAB, PhysKeyCode::Tab),
(VK_SPACE, PhysKeyCode::Space),
(VK_BACK, PhysKeyCode::Delete),
(VK_ESCAPE, PhysKeyCode::Escape),
(VK_LWIN, PhysKeyCode::LeftWindows),
(VK_LSHIFT, PhysKeyCode::LeftShift),
(VK_CAPITAL, PhysKeyCode::CapsLock),
(VK_LMENU, PhysKeyCode::LeftAlt),
(VK_LCONTROL, PhysKeyCode::LeftControl),
(VK_RWIN, PhysKeyCode::RightWindows),
(VK_RSHIFT, PhysKeyCode::RightShift),
(VK_RMENU, PhysKeyCode::RightAlt),
(VK_RCONTROL, PhysKeyCode::RightControl),
// (VK_Function, PhysKeyCode::Function),
(VK_F17, PhysKeyCode::F17),
(VK_VOLUME_UP, PhysKeyCode::VolumeUp),
(VK_VOLUME_DOWN, PhysKeyCode::VolumeDown),
(VK_VOLUME_MUTE, PhysKeyCode::Mute),
(VK_F18, PhysKeyCode::F18),
(VK_F19, PhysKeyCode::F19),
(VK_F20, PhysKeyCode::F20),
(VK_F5, PhysKeyCode::F5),
(VK_F6, PhysKeyCode::F6),
(VK_F7, PhysKeyCode::F7),
(VK_F3, PhysKeyCode::F3),
(VK_F8, PhysKeyCode::F8),
(VK_F9, PhysKeyCode::F9),
(VK_F11, PhysKeyCode::F11),
(VK_F13, PhysKeyCode::F13),
(VK_F16, PhysKeyCode::F16),
(VK_F14, PhysKeyCode::F14),
(VK_F10, PhysKeyCode::F10),
(VK_F12, PhysKeyCode::F12),
(VK_F15, PhysKeyCode::F15),
(VK_HELP, PhysKeyCode::Help),
(VK_HOME, PhysKeyCode::Home),
(VK_PRIOR, PhysKeyCode::PageUp),
(VK_DELETE, PhysKeyCode::ForwardDelete),
(VK_F4, PhysKeyCode::F4),
(VK_END, PhysKeyCode::End),
(VK_F2, PhysKeyCode::F2),
(VK_NEXT, PhysKeyCode::PageDown),
(VK_F1, PhysKeyCode::F1),
(VK_LEFT, PhysKeyCode::LeftArrow),
(VK_RIGHT, PhysKeyCode::RightArrow),
(VK_DOWN, PhysKeyCode::DownArrow),
(VK_UP, PhysKeyCode::UpArrow),
]
.iter()
.map(|&(k, v)| (k as WPARAM, v))
.collect()
}
lazy_static::lazy_static! {
static ref MAP: HashMap<WPARAM, PhysKeyCode> = build_map();
}
pub fn vkey_to_phys(vkey: WPARAM) -> Option<PhysKeyCode> {
MAP.get(&vkey).copied()
}

View File

@ -1,5 +1,6 @@
pub mod connection;
pub mod event;
mod keycodes;
mod wgl;
pub mod window;

View File

@ -1856,7 +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,
phys_code: super::keycodes::vkey_to_phys(wparam),
modifiers,
repeat_count: 1,
key_is_down: !releasing,
@ -1959,7 +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,
phys_code: super::keycodes::vkey_to_phys(wparam),
modifiers,
repeat_count: repeat,
key_is_down: !releasing,