diff --git a/Cargo.lock b/Cargo.lock index 93ec57c598..face9fc805 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5570,6 +5570,7 @@ dependencies = [ "serde_json", "smol", "util", + "windows 0.53.0", ] [[package]] diff --git a/crates/lsp/Cargo.toml b/crates/lsp/Cargo.toml index 23b2f204ef..e685ddf5a2 100644 --- a/crates/lsp/Cargo.toml +++ b/crates/lsp/Cargo.toml @@ -31,6 +31,9 @@ smol.workspace = true util.workspace = true release_channel.workspace = true +[target.'cfg(windows)'.dependencies] +windows.workspace = true + [dev-dependencies] async-pipe = { git = "https://github.com/zed-industries/async-pipe-rs", rev = "82d00a04211cf4e1236029aa03e6b6ce2a74c553" } ctor.workspace = true diff --git a/crates/lsp/src/lsp.rs b/crates/lsp/src/lsp.rs index dc3dfd0a81..7422ff5d9c 100644 --- a/crates/lsp/src/lsp.rs +++ b/crates/lsp/src/lsp.rs @@ -15,6 +15,10 @@ use smol::{ io::{AsyncBufReadExt, AsyncReadExt, AsyncWriteExt, BufReader}, process::{self, Child}, }; + +#[cfg(target_os = "windows")] +use smol::process::windows::CommandExt; + use std::{ ffi::OsString, fmt, @@ -215,15 +219,18 @@ impl LanguageServer { &binary.arguments ); - let mut server = process::Command::new(&binary.path) + let mut command = process::Command::new(&binary.path); + command .current_dir(working_dir) .args(binary.arguments) .envs(binary.env.unwrap_or_default()) .stdin(Stdio::piped()) .stdout(Stdio::piped()) .stderr(Stdio::piped()) - .kill_on_drop(true) - .spawn()?; + .kill_on_drop(true); + #[cfg(windows)] + command.creation_flags(windows::Win32::System::Threading::CREATE_NO_WINDOW.0); + let mut server = command.spawn()?; let stdin = server.stdin.take().unwrap(); let stdout = server.stdout.take().unwrap(); diff --git a/crates/zed/src/main.rs b/crates/zed/src/main.rs index 4611b69524..ccb747f51b 100644 --- a/crates/zed/src/main.rs +++ b/crates/zed/src/main.rs @@ -1,5 +1,7 @@ // Allow binary to be called Zed for a nice application menu when running executable directly #![allow(non_snake_case)] +// Disable command line from opening on release mode +#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] mod zed;