Show keybindings instead of the action names in the recent project modal

Kirill Bulatov created

Change summary

crates/recent_projects/src/recent_projects.rs | 22 +++++++++++++++++---
1 file changed, 18 insertions(+), 4 deletions(-)

Detailed changes

crates/recent_projects/src/recent_projects.rs 🔗

@@ -146,11 +146,25 @@ impl EventEmitter<DismissEvent> for RecentProjectsDelegate {}
 impl PickerDelegate for RecentProjectsDelegate {
     type ListItem = ListItem;
 
-    fn placeholder_text(&self, _cx: &mut WindowContext) -> Arc<str> {
+    fn placeholder_text(&self, cx: &mut WindowContext) -> Arc<str> {
+        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::<Vec<_>>()
+                        .join(" ")
+                })
+                .unwrap_or_else(|| format!("{action:?}"))
+        };
         Arc::from(format!(
-            "`{:?}` reuses the window, `{:?}` opens in new",
-            menu::Confirm,
-            menu::SecondaryConfirm,
+            "{} reuses the window, {} opens a new one",
+            action_binding_text(&menu::Confirm),
+            action_binding_text(&menu::SecondaryConfirm),
         ))
     }