Implement macOS-specific key shortcuts for text_editor

This commit is contained in:
Héctor Ramón Jiménez 2025-11-21 00:15:36 +01:00
parent 524b4acc6d
commit 416ec838f2
No known key found for this signature in database
GPG key ID: 7CC46565708259A7
2 changed files with 36 additions and 31 deletions

View file

@ -1148,6 +1148,9 @@ impl<Message> Binding<Message> {
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,
}
}

View file

@ -1010,7 +1010,9 @@ where
}
#[cfg(target_os = "macos")]
let key = convert_macos_shortcut(key, modifiers);
let key = crate::text_editor::convert_macos_shortcut(
key, modifiers,
);
match key.as_ref() {
keyboard::Key::Named(key::Named::Enter) => {
@ -1786,33 +1788,3 @@ fn alignment_offset(
}
}
}
#[cfg(target_os = "macos")]
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,
}
}