Add open WSL shortcut (#38342)
Adds a shortcut to add a WSL distro for better wsl feature discoverability. - [x] Open wsl from open remote - [x] Open local folder in wsl action - [x] Open wsl shortcut (shortcuts to open remote) Release Notes: - N/A
This commit is contained in:
@@ -90,6 +90,18 @@ pub fn init(cx: &mut App) {
|
||||
});
|
||||
});
|
||||
|
||||
#[cfg(target_os = "windows")]
|
||||
cx.on_action(|open_wsl: &zed_actions::wsl_actions::OpenWsl, cx| {
|
||||
let create_new_window = open_wsl.create_new_window;
|
||||
with_active_or_new_workspace(cx, move |workspace, window, cx| {
|
||||
let handle = cx.entity().downgrade();
|
||||
let fs = workspace.project().read(cx).fs().clone();
|
||||
workspace.toggle_modal(window, cx, |window, cx| {
|
||||
RemoteServerProjects::wsl(create_new_window, fs, window, handle, cx)
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
cx.on_action(|open_recent: &OpenRecent, cx| {
|
||||
let create_new_window = open_recent.create_new_window;
|
||||
with_active_or_new_workspace(cx, move |workspace, window, cx| {
|
||||
|
||||
@@ -522,12 +522,48 @@ impl Mode {
|
||||
}
|
||||
|
||||
impl RemoteServerProjects {
|
||||
#[cfg(target_os = "windows")]
|
||||
pub fn wsl(
|
||||
create_new_window: bool,
|
||||
fs: Arc<dyn Fs>,
|
||||
window: &mut Window,
|
||||
workspace: WeakEntity<Workspace>,
|
||||
cx: &mut Context<Self>,
|
||||
) -> Self {
|
||||
Self::new_inner(
|
||||
Mode::AddWslDistro(AddWslDistro::new(window, cx)),
|
||||
create_new_window,
|
||||
fs,
|
||||
window,
|
||||
workspace,
|
||||
cx,
|
||||
)
|
||||
}
|
||||
|
||||
pub fn new(
|
||||
create_new_window: bool,
|
||||
fs: Arc<dyn Fs>,
|
||||
window: &mut Window,
|
||||
workspace: WeakEntity<Workspace>,
|
||||
cx: &mut Context<Self>,
|
||||
) -> Self {
|
||||
Self::new_inner(
|
||||
Mode::default_mode(&BTreeSet::new(), cx),
|
||||
create_new_window,
|
||||
fs,
|
||||
window,
|
||||
workspace,
|
||||
cx,
|
||||
)
|
||||
}
|
||||
|
||||
fn new_inner(
|
||||
mode: Mode,
|
||||
create_new_window: bool,
|
||||
fs: Arc<dyn Fs>,
|
||||
window: &mut Window,
|
||||
workspace: WeakEntity<Workspace>,
|
||||
cx: &mut Context<Self>,
|
||||
) -> Self {
|
||||
let focus_handle = cx.focus_handle();
|
||||
let mut read_ssh_config = SshSettings::get_global(cx).read_ssh_config;
|
||||
@@ -558,7 +594,7 @@ impl RemoteServerProjects {
|
||||
});
|
||||
|
||||
Self {
|
||||
mode: Mode::default_mode(&BTreeSet::new(), cx),
|
||||
mode,
|
||||
focus_handle,
|
||||
workspace,
|
||||
retained_connections: Vec::new(),
|
||||
|
||||
@@ -512,4 +512,13 @@ pub mod wsl_actions {
|
||||
#[serde(default)]
|
||||
pub create_new_window: bool,
|
||||
}
|
||||
|
||||
/// Open a wsl distro.
|
||||
#[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)]
|
||||
#[action(namespace = projects)]
|
||||
#[serde(deny_unknown_fields)]
|
||||
pub struct OpenWsl {
|
||||
#[serde(default)]
|
||||
pub create_new_window: bool,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user