add macOS key bindings: Opt+Backspace/Delete word-delete, Cmd+Up/Down document navigation
This commit is contained in:
parent
989dd98468
commit
e04e5b1953
|
|
@ -1,9 +1,11 @@
|
||||||
|
use iced_wgpu::core::keyboard;
|
||||||
|
use iced_wgpu::core::keyboard::key;
|
||||||
use iced_wgpu::core::text::Wrapping;
|
use iced_wgpu::core::text::Wrapping;
|
||||||
use iced_wgpu::core::{
|
use iced_wgpu::core::{
|
||||||
Background, Border, Color, Element, Font, Length, Padding, Shadow, Theme,
|
Background, Border, Color, Element, Font, Length, Padding, Shadow, Theme,
|
||||||
};
|
};
|
||||||
use iced_widget::container;
|
use iced_widget::container;
|
||||||
use iced_widget::text_editor::{self, Style};
|
use iced_widget::text_editor::{self, Binding, KeyPress, Motion, Status, Style};
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub enum Message {
|
pub enum Message {
|
||||||
|
|
@ -43,6 +45,7 @@ impl EditorState {
|
||||||
.height(Length::Fill)
|
.height(Length::Fill)
|
||||||
.padding(Padding { top: 38.0, right: 8.0, bottom: 8.0, left: 8.0 })
|
.padding(Padding { top: 38.0, right: 8.0, bottom: 8.0, left: 8.0 })
|
||||||
.wrapping(Wrapping::Word)
|
.wrapping(Wrapping::Word)
|
||||||
|
.key_binding(macos_key_binding)
|
||||||
.style(|_theme, _status| Style {
|
.style(|_theme, _status| Style {
|
||||||
background: Background::Color(Color::from_rgb(0.08, 0.08, 0.10)),
|
background: Background::Color(Color::from_rgb(0.08, 0.08, 0.10)),
|
||||||
border: Border::default(),
|
border: Border::default(),
|
||||||
|
|
@ -72,3 +75,39 @@ impl EditorState {
|
||||||
.into()
|
.into()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn macos_key_binding(key_press: KeyPress) -> Option<Binding<Message>> {
|
||||||
|
let KeyPress { key, modifiers, status, .. } = &key_press;
|
||||||
|
|
||||||
|
if !matches!(status, Status::Focused { .. }) {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
|
||||||
|
match key.as_ref() {
|
||||||
|
keyboard::Key::Named(key::Named::Backspace) if modifiers.alt() => {
|
||||||
|
Some(Binding::Sequence(vec![
|
||||||
|
Binding::Select(Motion::WordLeft),
|
||||||
|
Binding::Backspace,
|
||||||
|
]))
|
||||||
|
}
|
||||||
|
keyboard::Key::Named(key::Named::Delete) if modifiers.alt() => {
|
||||||
|
Some(Binding::Sequence(vec![
|
||||||
|
Binding::Select(Motion::WordRight),
|
||||||
|
Binding::Delete,
|
||||||
|
]))
|
||||||
|
}
|
||||||
|
keyboard::Key::Named(key::Named::ArrowUp) if modifiers.logo() && modifiers.shift() => {
|
||||||
|
Some(Binding::Select(Motion::DocumentStart))
|
||||||
|
}
|
||||||
|
keyboard::Key::Named(key::Named::ArrowDown) if modifiers.logo() && modifiers.shift() => {
|
||||||
|
Some(Binding::Select(Motion::DocumentEnd))
|
||||||
|
}
|
||||||
|
keyboard::Key::Named(key::Named::ArrowUp) if modifiers.logo() => {
|
||||||
|
Some(Binding::Move(Motion::DocumentStart))
|
||||||
|
}
|
||||||
|
keyboard::Key::Named(key::Named::ArrowDown) if modifiers.logo() => {
|
||||||
|
Some(Binding::Move(Motion::DocumentEnd))
|
||||||
|
}
|
||||||
|
_ => Binding::from_key_press(key_press),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue