diff --git a/crates/gpui/src/platform/mac/event.rs b/crates/gpui/src/platform/mac/event.rs index 651805370c0be39bc17d5a0dde379f7c9e825a07..9d07177b16fd322c92973745983396a6c0abf5ea 100644 --- a/crates/gpui/src/platform/mac/event.rs +++ b/crates/gpui/src/platform/mac/event.rs @@ -8,7 +8,35 @@ use cocoa::{ base::{id, nil, YES}, foundation::NSString as _, }; -use std::{ffi::CStr, os::raw::c_char}; +use std::{borrow::Cow, ffi::CStr, os::raw::c_char}; + +pub fn key_to_native(key: &str) -> Cow { + use cocoa::appkit::*; + let code = match key { + "backspace" => 0x7F, + "up" => NSUpArrowFunctionKey, + "down" => NSDownArrowFunctionKey, + "left" => NSLeftArrowFunctionKey, + "right" => NSRightArrowFunctionKey, + "pageup" => NSPageUpFunctionKey, + "pagedown" => NSPageDownFunctionKey, + "delete" => NSDeleteFunctionKey, + "f1" => NSF1FunctionKey, + "f2" => NSF2FunctionKey, + "f3" => NSF3FunctionKey, + "f4" => NSF4FunctionKey, + "f5" => NSF5FunctionKey, + "f6" => NSF6FunctionKey, + "f7" => NSF7FunctionKey, + "f8" => NSF8FunctionKey, + "f9" => NSF9FunctionKey, + "f10" => NSF10FunctionKey, + "f11" => NSF11FunctionKey, + "f12" => NSF12FunctionKey, + _ => return Cow::Borrowed(key), + }; + Cow::Owned(String::from_utf16(&[code]).unwrap()) +} impl Event { pub unsafe fn from_native(native_event: id, window_height: Option) -> Option { diff --git a/crates/gpui/src/platform/mac/platform.rs b/crates/gpui/src/platform/mac/platform.rs index 54ed421e50ad51eb4aed5ec50f9030fc6b767177..46c2b50f4e4bc197759f799eaba714ead95d0a48 100644 --- a/crates/gpui/src/platform/mac/platform.rs +++ b/crates/gpui/src/platform/mac/platform.rs @@ -1,4 +1,4 @@ -use super::{BoolExt as _, Dispatcher, FontSystem, Window}; +use super::{event::key_to_native, BoolExt as _, Dispatcher, FontSystem, Window}; use crate::{ executor, keymap, platform::{self, CursorStyle}, @@ -165,7 +165,7 @@ impl MacForegroundPlatform { .initWithTitle_action_keyEquivalent_( ns_string(name), selector("handleGPUIMenuItem:"), - ns_string(&keystroke.key), + ns_string(key_to_native(&keystroke.key).as_ref()), ) .autorelease(); item.setKeyEquivalentModifierMask_(mask);