From 45aca348b8e5d94ee863c4a098e96375138914aa Mon Sep 17 00:00:00 2001 From: LoganDark Date: Wed, 8 May 2024 03:39:47 -0700 Subject: [PATCH] Take local project settings into account when launching terminals (#11526) Fixes #7599 Use project level settings if possible, when creating terminals. Release Notes: - Fixed terminals ignoring project-specific settings ([7599](https://github.com/zed-industries/zed/issues/7599)) --- crates/project/src/terminals.rs | 21 +++++++++++++++++++-- crates/terminal_view/src/terminal_panel.rs | 1 + 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/crates/project/src/terminals.rs b/crates/project/src/terminals.rs index 4d1829dd42..fd18130031 100644 --- a/crates/project/src/terminals.rs +++ b/crates/project/src/terminals.rs @@ -1,7 +1,7 @@ use crate::Project; use collections::HashMap; use gpui::{AnyWindowHandle, Context, Entity, Model, ModelContext, WeakModel}; -use settings::Settings; +use settings::{Settings, SettingsLocation}; use smol::channel::bounded; use std::path::{Path, PathBuf}; use task::SpawnInTerminal; @@ -31,8 +31,25 @@ impl Project { "creating terminals as a guest is not supported yet" ); + // used only for TerminalSettings::get + let worktree = { + let terminal_cwd = working_directory.as_deref(); + let task_cwd = spawn_task + .as_ref() + .and_then(|spawn_task| spawn_task.cwd.as_deref()); + + terminal_cwd + .and_then(|terminal_cwd| self.find_local_worktree(terminal_cwd, cx)) + .or_else(|| task_cwd.and_then(|spawn_cwd| self.find_local_worktree(spawn_cwd, cx))) + }; + + let settings_location = worktree.as_ref().map(|(worktree, path)| SettingsLocation { + worktree_id: worktree.read(cx).id().to_usize(), + path, + }); + let is_terminal = spawn_task.is_none(); - let settings = TerminalSettings::get_global(cx); + let settings = TerminalSettings::get(settings_location, cx); let python_settings = settings.detect_venv.clone(); let (completion_tx, completion_rx) = bounded(1); diff --git a/crates/terminal_view/src/terminal_panel.rs b/crates/terminal_view/src/terminal_panel.rs index 89169f0233..df7927a3c4 100644 --- a/crates/terminal_view/src/terminal_panel.rs +++ b/crates/terminal_view/src/terminal_panel.rs @@ -596,6 +596,7 @@ impl TerminalPanel { .workspace .update(cx, |workspace, _| workspace.project().clone()) .ok()?; + let reveal = spawn_task.reveal; let window = cx.window_handle(); let new_terminal = project.update(cx, |project, cx| {