Make getting keybinding for display more efficient (#27046)
No longer iterates all the matching bindings, and no longer clones the result. Release Notes: - N/A
This commit is contained in:
parent
33faa66e35
commit
3ec69a5bc0
3 changed files with 13 additions and 9 deletions
|
@ -202,10 +202,16 @@ impl Keymap {
|
||||||
/// couple times. The decision as of now is to pick a side and leave it
|
/// couple times. The decision as of now is to pick a side and leave it
|
||||||
/// as is, until we have a better way to decide which binding to display
|
/// as is, until we have a better way to decide which binding to display
|
||||||
/// that is consistent and not confusing.
|
/// that is consistent and not confusing.
|
||||||
pub fn binding_to_display_from_bindings<'a>(
|
pub fn binding_to_display_from_bindings(mut bindings: Vec<KeyBinding>) -> Option<KeyBinding> {
|
||||||
bindings: impl IntoIterator<Item = &'a KeyBinding>,
|
bindings.pop()
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Like `bindings_to_display_from_bindings` but takes a `DoubleEndedIterator` and returns a
|
||||||
|
/// reference.
|
||||||
|
pub fn binding_to_display_from_bindings_iterator<'a>(
|
||||||
|
mut bindings: impl DoubleEndedIterator<Item = &'a KeyBinding>,
|
||||||
) -> Option<&'a KeyBinding> {
|
) -> Option<&'a KeyBinding> {
|
||||||
return bindings.into_iter().last();
|
bindings.next_back()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -290,7 +290,7 @@ impl MacPlatform {
|
||||||
action,
|
action,
|
||||||
os_action,
|
os_action,
|
||||||
} => {
|
} => {
|
||||||
let keystrokes = crate::Keymap::binding_to_display_from_bindings(
|
let keystrokes = crate::Keymap::binding_to_display_from_bindings_iterator(
|
||||||
keymap.bindings_for_action(action.as_ref()),
|
keymap.bindings_for_action(action.as_ref()),
|
||||||
)
|
)
|
||||||
.map(|binding| binding.keystrokes());
|
.map(|binding| binding.keystrokes());
|
||||||
|
|
|
@ -33,8 +33,7 @@ impl KeyBinding {
|
||||||
return Self::for_action_in(action, &focused, window, cx);
|
return Self::for_action_in(action, &focused, window, cx);
|
||||||
}
|
}
|
||||||
let key_binding =
|
let key_binding =
|
||||||
gpui::Keymap::binding_to_display_from_bindings(&window.bindings_for_action(action))
|
gpui::Keymap::binding_to_display_from_bindings(window.bindings_for_action(action))?;
|
||||||
.cloned()?;
|
|
||||||
Some(Self::new(key_binding, cx))
|
Some(Self::new(key_binding, cx))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,9 +45,8 @@ impl KeyBinding {
|
||||||
cx: &App,
|
cx: &App,
|
||||||
) -> Option<Self> {
|
) -> Option<Self> {
|
||||||
let key_binding = gpui::Keymap::binding_to_display_from_bindings(
|
let key_binding = gpui::Keymap::binding_to_display_from_bindings(
|
||||||
&window.bindings_for_action_in(action, focus),
|
window.bindings_for_action_in(action, focus),
|
||||||
)
|
)?;
|
||||||
.cloned()?;
|
|
||||||
Some(Self::new(key_binding, cx))
|
Some(Self::new(key_binding, cx))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue