@@ -530,12 +530,17 @@
"alt-cmd-shift-c": "project_panel::CopyRelativePath",
"f2": "project_panel::Rename",
"enter": "project_panel::Rename",
- "space": "project_panel::Open",
"backspace": "project_panel::Delete",
"alt-cmd-r": "project_panel::RevealInFinder",
"alt-shift-f": "project_panel::NewSearchInDirectory"
}
},
+ {
+ "context": "ProjectPanel && not_editing",
+ "bindings": {
+ "space": "project_panel::Open"
+ }
+ },
{
"context": "CollabPanel && not_editing",
"bindings": {
@@ -1627,9 +1627,21 @@ impl View for ProjectPanel {
}
}
- fn update_keymap_context(&self, keymap: &mut KeymapContext, _: &AppContext) {
+ fn update_keymap_context(&self, keymap: &mut KeymapContext, cx: &AppContext) {
Self::reset_to_default_keymap_context(keymap);
keymap.add_identifier("menu");
+
+ if let Some(window) = cx.active_window() {
+ window.read_with(cx, |cx| {
+ let identifier = if self.filename_editor.is_focused(cx) {
+ "editing"
+ } else {
+ "not_editing"
+ };
+
+ keymap.add_identifier(identifier);
+ });
+ }
}
fn focus_in(&mut self, _: gpui::AnyViewHandle, cx: &mut ViewContext<Self>) {
@@ -10,8 +10,9 @@ use anyhow::{anyhow, Result};
use gpui::{
actions, div, px, uniform_list, Action, AppContext, AssetSource, AsyncWindowContext,
ClipboardItem, Div, EventEmitter, FocusHandle, Focusable, FocusableView, InteractiveElement,
- Model, MouseDownEvent, ParentElement, Pixels, Point, PromptLevel, Render, Stateful, Styled,
- Task, UniformListScrollHandle, View, ViewContext, VisualContext as _, WeakView, WindowContext,
+ KeyContext, Model, MouseDownEvent, ParentElement, Pixels, Point, PromptLevel, Render, Stateful,
+ Styled, Task, UniformListScrollHandle, View, ViewContext, VisualContext as _, WeakView,
+ WindowContext,
};
use menu::{Confirm, SelectNext, SelectPrev};
use project::{
@@ -1403,6 +1404,22 @@ impl ProjectPanel {
// );
// })
}
+
+ fn dispatch_context(&self, cx: &ViewContext<Self>) -> KeyContext {
+ let mut dispatch_context = KeyContext::default();
+ dispatch_context.add("ProjectPanel");
+ dispatch_context.add("menu");
+
+ let identifier = if self.filename_editor.focus_handle(cx).is_focused(cx) {
+ "editing"
+ } else {
+ "not_editing"
+ };
+
+ dispatch_context.add(identifier);
+
+ dispatch_context
+ }
}
impl Render for ProjectPanel {
@@ -1415,7 +1432,8 @@ impl Render for ProjectPanel {
div()
.id("project-panel")
.size_full()
- .key_context("ProjectPanel")
+ .relative()
+ .key_context(self.dispatch_context(cx))
.on_action(cx.listener(Self::select_next))
.on_action(cx.listener(Self::select_prev))
.on_action(cx.listener(Self::expand_selected_entry))