From 73d8a43c81b5b4bb5c7b73dff581cef8a2723710 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Thu, 4 Apr 2024 14:24:49 -0600 Subject: [PATCH] vim: Allow `:` in empty panes and screen shares (#10171) Release Notes: - vim: Fixed `:` when no files are open --- assets/keymaps/vim.json | 6 ++++++ crates/workspace/src/pane.rs | 10 ++++++++-- crates/workspace/src/shared_screen.rs | 1 + 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/assets/keymaps/vim.json b/assets/keymaps/vim.json index 5a71d8920028822ca340525a2312795e425c864f..74aeca0cbd3c9ea1c5886ded5968dc316b5d0b1a 100644 --- a/assets/keymaps/vim.json +++ b/assets/keymaps/vim.json @@ -546,6 +546,12 @@ "escape": "buffer_search::Dismiss" } }, + { + "context": "EmptyPane || SharedScreen", + "bindings": { + ":": "command_palette::Toggle" + } + }, { // netrw compatibility "context": "ProjectPanel && not_editing", diff --git a/crates/workspace/src/pane.rs b/crates/workspace/src/pane.rs index 211fd3dad46f7d010e5768b78d8c9680b76ac46d..6cc6d8b8c1317326874732264f80f50e34c5d5d8 100644 --- a/crates/workspace/src/pane.rs +++ b/crates/workspace/src/pane.rs @@ -10,7 +10,7 @@ use futures::{stream::FuturesUnordered, StreamExt}; use gpui::{ actions, anchored, deferred, impl_actions, prelude::*, Action, AnchorCorner, AnyElement, AppContext, AsyncWindowContext, ClickEvent, DismissEvent, Div, DragMoveEvent, EntityId, - EventEmitter, ExternalPaths, FocusHandle, FocusableView, Model, MouseButton, + EventEmitter, ExternalPaths, FocusHandle, FocusableView, KeyContext, Model, MouseButton, NavigationDirection, Pixels, Point, PromptLevel, Render, ScrollHandle, Subscription, Task, View, ViewContext, VisualContext, WeakFocusHandle, WeakView, WindowContext, }; @@ -1733,8 +1733,14 @@ impl FocusableView for Pane { impl Render for Pane { fn render(&mut self, cx: &mut ViewContext) -> impl IntoElement { + let mut key_context = KeyContext::default(); + key_context.add("Pane"); + if self.active_item().is_none() { + key_context.add("EmptyPane"); + } + v_flex() - .key_context("Pane") + .key_context(key_context) .track_focus(&self.focus_handle) .size_full() .flex_none() diff --git a/crates/workspace/src/shared_screen.rs b/crates/workspace/src/shared_screen.rs index bfc16022749c10e5862933dd82d777e3adcbd5f2..b49da4febed90b1f25609d3a638aa7cf1a679725 100644 --- a/crates/workspace/src/shared_screen.rs +++ b/crates/workspace/src/shared_screen.rs @@ -70,6 +70,7 @@ impl Render for SharedScreen { div() .bg(cx.theme().colors().editor_background) .track_focus(&self.focus) + .key_context("SharedScreen") .size_full() .children( self.frame