From 83351283e4f3690d12ca2d9fc005f381bf028704 Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Tue, 11 Nov 2025 17:15:12 +0100 Subject: [PATCH] settings: Skip terminal env vars with substitutions in vscode import (#42464) Closes https://github.com/zed-industries/zed/issues/40547 Release Notes: - Fixed vscode import creating faulty terminal env vars in terminal settings --- crates/auto_update/src/auto_update.rs | 4 +--- crates/settings/src/vscode_import.rs | 8 +++++++- crates/terminal/src/terminal.rs | 10 +++++++++- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/crates/auto_update/src/auto_update.rs b/crates/auto_update/src/auto_update.rs index facb55e0df951633b082f23477e35ce2b55f6f84..accda1b1ce4b09db0bc4cc0fb5824290725cb8ee 100644 --- a/crates/auto_update/src/auto_update.rs +++ b/crates/auto_update/src/auto_update.rs @@ -350,8 +350,7 @@ impl AutoUpdater { pub fn start_polling(&self, cx: &mut Context) -> Task> { cx.spawn(async move |this, cx| { - #[cfg(target_os = "windows")] - { + if cfg!(target_os = "windows") { use util::ResultExt; cleanup_windows() @@ -903,7 +902,6 @@ async fn install_release_macos( Ok(None) } -#[cfg(target_os = "windows")] async fn cleanup_windows() -> Result<()> { let parent = std::env::current_exe()? .parent() diff --git a/crates/settings/src/vscode_import.rs b/crates/settings/src/vscode_import.rs index 36bd84e1a145a9a64eadbaec9411f904b9a881c9..cbffb33b1795dbf71e48df8089c472ee534306c1 100644 --- a/crates/settings/src/vscode_import.rs +++ b/crates/settings/src/vscode_import.rs @@ -753,7 +753,13 @@ impl VsCodeSettings { let env = self .read_value(&format!("terminal.integrated.env.{platform}")) .and_then(|v| v.as_object()) - .map(|v| v.iter().map(|(k, v)| (k.clone(), v.to_string())).collect()); + .map(|v| { + v.iter() + .map(|(k, v)| (k.clone(), v.to_string())) + // zed does not support substitutions, so this can break env vars + .filter(|(_, v)| !v.contains('$')) + .collect() + }); ProjectTerminalSettingsContent { // TODO: handle arguments diff --git a/crates/terminal/src/terminal.rs b/crates/terminal/src/terminal.rs index c635cb9b417f422ad0ddd91611233cb04a771679..59c71474d47b9c79d33b28bd7cbbc1a187b4ebfd 100644 --- a/crates/terminal/src/terminal.rs +++ b/crates/terminal/src/terminal.rs @@ -1386,7 +1386,15 @@ impl Terminal { /// (This is a no-op for display-only terminals.) fn write_to_pty(&self, input: impl Into>) { if let TerminalType::Pty { pty_tx, .. } = &self.terminal_type { - pty_tx.notify(input.into()); + let input = input.into(); + if log::log_enabled!(log::Level::Debug) { + if let Ok(str) = str::from_utf8(&input) { + log::debug!("Writing to PTY: {:?}", str); + } else { + log::debug!("Writing to PTY: {:?}", input); + } + } + pty_tx.notify(input); } }