diff --git a/widget/src/text_editor.rs b/widget/src/text_editor.rs index cf185676..e0e5b510 100644 --- a/widget/src/text_editor.rs +++ b/widget/src/text_editor.rs @@ -1148,6 +1148,9 @@ impl Binding { return None; } + #[cfg(target_os = "macos")] + let key = convert_macos_shortcut(&key, modifiers); + match key.as_ref() { keyboard::Key::Named(key::Named::Enter) => Some(Self::Enter), keyboard::Key::Named(key::Named::Backspace) => { @@ -1454,3 +1457,33 @@ pub fn default(theme: &Theme, status: Status) -> Style { }, } } + +#[cfg(target_os = "macos")] +pub(crate) fn convert_macos_shortcut( + key: &keyboard::Key, + modifiers: keyboard::Modifiers, +) -> &keyboard::Key { + if modifiers != keyboard::Modifiers::CTRL { + return key; + } + + match key.as_ref() { + keyboard::Key::Character("b") => { + &keyboard::Key::Named(key::Named::ArrowLeft) + } + keyboard::Key::Character("f") => { + &keyboard::Key::Named(key::Named::ArrowRight) + } + keyboard::Key::Character("a") => { + &keyboard::Key::Named(key::Named::Home) + } + keyboard::Key::Character("e") => &keyboard::Key::Named(key::Named::End), + keyboard::Key::Character("h") => { + &keyboard::Key::Named(key::Named::Backspace) + } + keyboard::Key::Character("d") => { + &keyboard::Key::Named(key::Named::Delete) + } + _ => key, + } +} diff --git a/widget/src/text_input.rs b/widget/src/text_input.rs index 0783f7c2..c630a4ec 100644 --- a/widget/src/text_input.rs +++ b/widget/src/text_input.rs @@ -1009,6 +1009,11 @@ where } } + #[cfg(target_os = "macos")] + let key = crate::text_editor::convert_macos_shortcut( + key, modifiers, + ); + match key.as_ref() { keyboard::Key::Named(key::Named::Enter) => { if let Some(on_submit) = self.on_submit.clone() {