@@ -2060,40 +2060,39 @@ fn open_settings_file(
cx: &mut Context<Workspace>,
) {
cx.spawn_in(window, async move |workspace, cx| {
- let settings_open_task = workspace
+ let (worktree_creation_task, settings_open_task) = workspace
.update_in(cx, |workspace, window, cx| {
- workspace.with_local_workspace(window, cx, move |_workspace, window, cx| {
- cx.spawn_in(window, async move |workspace, cx| {
- let worktree_creation_task =
- workspace.update_in(cx, |workspace, _window, cx| {
- workspace.project().update(cx, |project, cx| {
- // Set up a dedicated worktree for settings, since
- // otherwise we're dropping and re-starting LSP servers
- // for each file inside on every settings file
- // close/open
-
- // TODO: Do note that all other external files (e.g.
- // drag and drop from OS) still have their worktrees
- // released on file close, causing LSP servers'
- // restarts.
- project.find_or_create_worktree(
- paths::config_dir().as_path(),
- false,
- cx,
- )
- })
- })?;
- let _ = worktree_creation_task.await?;
- let settings_open_task =
- workspace.update_in(cx, |_workspace, window, cx| {
- create_and_open_local_file(abs_path, window, cx, default_content)
- })?;
- let _ = settings_open_task.await?;
- anyhow::Ok(())
- })
+ workspace.with_local_or_wsl_workspace(window, cx, move |workspace, window, cx| {
+ let project = workspace.project().clone();
+
+ let worktree_creation_task = cx.spawn_in(window, async move |_, cx| {
+ let config_dir = project
+ .update(cx, |project, cx| {
+ project.try_windows_path_to_wsl(paths::config_dir().as_path(), cx)
+ })
+ .await?;
+ // Set up a dedicated worktree for settings, since
+ // otherwise we're dropping and re-starting LSP servers
+ // for each file inside on every settings file
+ // close/open
+
+ // TODO: Do note that all other external files (e.g.
+ // drag and drop from OS) still have their worktrees
+ // released on file close, causing LSP servers'
+ // restarts.
+ project
+ .update(cx, |project, cx| {
+ project.find_or_create_worktree(&config_dir, false, cx)
+ })
+ .await
+ });
+ let settings_open_task =
+ create_and_open_local_file(abs_path, window, cx, default_content);
+ (worktree_creation_task, settings_open_task)
})
})?
.await?;
+ let _ = worktree_creation_task.await?;
let _ = settings_open_task.await?;
anyhow::Ok(())
})