Add :tabonly and :only vim commands (#8337)
Release Notes: - Added [`:tabo[nly][!]`](https://neovim.io/doc/user/tabpage.html#%3Atabonly), closes all the tabs except the active one but in the current pane only, every other split pane remains unaffected. The version with the `!` force closes the tabs while the one without asks you to save or discard the changes. - Added [`:on[ly][!]`](https://neovim.io/doc/user/windows.html#%3Aonly), closes all the tabs *and* panes except the active one. The version with the `!` force closes the tabs while the one without asks you to save or discard the changes. Since Zed does not have different splits per tab like in Neovim `:only` works the same as it does in VscodeVim. --------- Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
This commit is contained in:
parent
c31626717f
commit
a42b987929
3 changed files with 53 additions and 11 deletions
|
@ -103,7 +103,6 @@ actions!(
|
|||
NewFile,
|
||||
NewWindow,
|
||||
CloseWindow,
|
||||
CloseInactiveTabsAndPanes,
|
||||
AddFolderToProject,
|
||||
Unfollow,
|
||||
SaveAs,
|
||||
|
@ -161,6 +160,12 @@ pub struct CloseAllItemsAndPanes {
|
|||
pub save_intent: Option<SaveIntent>,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Debug, Deserialize, Default)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct CloseInactiveTabsAndPanes {
|
||||
pub save_intent: Option<SaveIntent>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Deserialize, PartialEq)]
|
||||
pub struct SendKeystrokes(pub String);
|
||||
|
||||
|
@ -170,6 +175,7 @@ impl_actions!(
|
|||
ActivatePane,
|
||||
ActivatePaneInDirection,
|
||||
CloseAllItemsAndPanes,
|
||||
CloseInactiveTabsAndPanes,
|
||||
NewFileInDirection,
|
||||
OpenTerminal,
|
||||
Save,
|
||||
|
@ -1620,10 +1626,10 @@ impl Workspace {
|
|||
|
||||
pub fn close_inactive_items_and_panes(
|
||||
&mut self,
|
||||
_: &CloseInactiveTabsAndPanes,
|
||||
action: &CloseInactiveTabsAndPanes,
|
||||
cx: &mut ViewContext<Self>,
|
||||
) {
|
||||
self.close_all_internal(true, SaveIntent::Close, cx)
|
||||
self.close_all_internal(true, action.save_intent.unwrap_or(SaveIntent::Close), cx)
|
||||
.map(|task| task.detach_and_log_err(cx));
|
||||
}
|
||||
|
||||
|
@ -1648,7 +1654,7 @@ impl Workspace {
|
|||
|
||||
if retain_active_pane {
|
||||
if let Some(current_pane_close) = current_pane.update(cx, |pane, cx| {
|
||||
pane.close_inactive_items(&CloseInactiveItems, cx)
|
||||
pane.close_inactive_items(&CloseInactiveItems { save_intent: None }, cx)
|
||||
}) {
|
||||
tasks.push(current_pane_close);
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue