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 4d1829dd429455b848589df82747cfb847f424e4..fd18130031ed7c58102b1350293df3d6968637c5 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 89169f0233df34c1de819239e07a39c91deef372..df7927a3c4a70dbc14315ee45e63b0561ab6e3a0 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| {