diff --git a/assets/keymaps/vim.json b/assets/keymaps/vim.json index bf68ee10e4..9c95b352a5 100644 --- a/assets/keymaps/vim.json +++ b/assets/keymaps/vim.json @@ -284,7 +284,8 @@ "ctrl-w o": "workspace::CloseInactiveTabsAndPanes", "ctrl-w ctrl-o": "workspace::CloseInactiveTabsAndPanes", "ctrl-w n": ["workspace::NewFileInDirection", "Up"], - "ctrl-w ctrl-n": ["workspace::NewFileInDirection", "Up"] + "ctrl-w ctrl-n": ["workspace::NewFileInDirection", "Up"], + "-": "pane::RevealInProjectPanel" } }, { diff --git a/crates/editor/src/actions.rs b/crates/editor/src/actions.rs index 049c152e2c..ec8113a985 100644 --- a/crates/editor/src/actions.rs +++ b/crates/editor/src/actions.rs @@ -112,7 +112,7 @@ impl_actions!( MoveUpByLines, MoveDownByLines, SelectUpByLines, - SelectDownByLines, + SelectDownByLines ] ); diff --git a/crates/workspace/src/pane.rs b/crates/workspace/src/pane.rs index 55ae875fef..55389cf8d0 100644 --- a/crates/workspace/src/pane.rs +++ b/crates/workspace/src/pane.rs @@ -72,10 +72,10 @@ pub struct CloseAllItems { pub save_intent: Option, } -#[derive(Clone, PartialEq, Debug, Deserialize)] +#[derive(Clone, PartialEq, Debug, Deserialize, Default)] #[serde(rename_all = "camelCase")] pub struct RevealInProjectPanel { - pub entry_id: u64, + pub entry_id: Option, } impl_actions!( @@ -1442,7 +1442,9 @@ impl Pane { let entry_id = entry.to_proto(); menu = menu.separator().entry( "Reveal In Project Panel", - Some(Box::new(RevealInProjectPanel { entry_id })), + Some(Box::new(RevealInProjectPanel { + entry_id: Some(entry_id), + })), cx.handler_for(&pane, move |pane, cx| { pane.project.update(cx, |_, cx| { cx.emit(project::Event::RevealInProjectPanel( @@ -1807,11 +1809,15 @@ impl Render for Pane { ) .on_action( cx.listener(|pane: &mut Self, action: &RevealInProjectPanel, cx| { - pane.project.update(cx, |_, cx| { - cx.emit(project::Event::RevealInProjectPanel( - ProjectEntryId::from_proto(action.entry_id), - )) - }) + let entry_id = action + .entry_id + .map(ProjectEntryId::from_proto) + .or_else(|| pane.active_item()?.project_entry_ids(cx).first().copied()); + if let Some(entry_id) = entry_id { + pane.project.update(cx, |_, cx| { + cx.emit(project::Event::RevealInProjectPanel(entry_id)) + }); + } }), ) .when(self.active_item().is_some(), |pane| {