diff --git a/crates/gpui/src/window.rs b/crates/gpui/src/window.rs index 2d2f6b8e10..500be84934 100644 --- a/crates/gpui/src/window.rs +++ b/crates/gpui/src/window.rs @@ -1124,6 +1124,22 @@ impl<'a> WindowContext<'a> { false } + /// Represent this action as a key binding string, to display in the UI. + pub fn keystroke_text_for(&self, action: &dyn Action) -> String { + self.bindings_for_action(action) + .into_iter() + .next() + .map(|binding| { + binding + .keystrokes() + .iter() + .map(ToString::to_string) + .collect::>() + .join(" ") + }) + .unwrap_or_else(|| action.name().to_string()) + } + /// Dispatch a mouse or keyboard event on the window. #[profiling::function] pub fn dispatch_event(&mut self, event: PlatformInput) -> bool { diff --git a/crates/recent_projects/src/recent_projects.rs b/crates/recent_projects/src/recent_projects.rs index 5abb0d55d2..d43454183a 100644 --- a/crates/recent_projects/src/recent_projects.rs +++ b/crates/recent_projects/src/recent_projects.rs @@ -147,24 +147,10 @@ impl PickerDelegate for RecentProjectsDelegate { type ListItem = ListItem; fn placeholder_text(&self, cx: &mut WindowContext) -> Arc { - let action_binding_text = |action: &dyn gpui::Action| { - cx.bindings_for_action(action) - .into_iter() - .next() - .map(|binding| { - binding - .keystrokes() - .into_iter() - .map(ToString::to_string) - .collect::>() - .join(" ") - }) - .unwrap_or_else(|| format!("{action:?}")) - }; Arc::from(format!( "{} reuses the window, {} opens a new one", - action_binding_text(&menu::Confirm), - action_binding_text(&menu::SecondaryConfirm), + cx.keystroke_text_for(&menu::Confirm), + cx.keystroke_text_for(&menu::SecondaryConfirm), )) } diff --git a/crates/tasks_ui/src/modal.rs b/crates/tasks_ui/src/modal.rs index 47724f80b9..77a47847cf 100644 --- a/crates/tasks_ui/src/modal.rs +++ b/crates/tasks_ui/src/modal.rs @@ -23,7 +23,6 @@ pub(crate) struct TasksModalDelegate { candidates: Vec>, matches: Vec, selected_index: usize, - placeholder_text: Arc, workspace: WeakView, last_prompt: String, } @@ -36,7 +35,6 @@ impl TasksModalDelegate { candidates: Vec::new(), matches: Vec::new(), selected_index: 0, - placeholder_text: Arc::from("Select task..."), last_prompt: String::default(), } } @@ -115,8 +113,12 @@ impl PickerDelegate for TasksModalDelegate { self.selected_index = ix; } - fn placeholder_text(&self, _cx: &mut WindowContext) -> Arc { - self.placeholder_text.clone() + fn placeholder_text(&self, cx: &mut WindowContext) -> Arc { + Arc::from(format!( + "{} runs the selected task, {} spawns a bash-like task from the prompt", + cx.keystroke_text_for(&menu::Confirm), + cx.keystroke_text_for(&menu::SecondaryConfirm), + )) } fn update_matches(