From 3847762d8c397aa58f39c3d0c8aa92b0ddba41d4 Mon Sep 17 00:00:00 2001 From: Tristam MacDonald Date: Fri, 26 Jan 2024 12:20:35 +0100 Subject: [PATCH] Activate the nushell virtualenv overlay correctly The activate.nu file works a little differently than it's counterparts in other shells, and it needs to be invoked as an overlay, rather than sourced directly into the shell. This fixes an outstanding issues left over from #6323. --- crates/project/src/terminals.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/crates/project/src/terminals.rs b/crates/project/src/terminals.rs index 411a943aa489ff75f1e5114136b91111594bebb9..0f314f50335ee753a078f79207786978e6e2b12a 100644 --- a/crates/project/src/terminals.rs +++ b/crates/project/src/terminals.rs @@ -60,9 +60,11 @@ impl Project { .detach(); if let Some(python_settings) = &python_settings.as_option() { + let activate_command = Project::get_activate_command(python_settings); let activate_script_path = self.find_activate_script_path(python_settings, working_directory); self.activate_python_virtual_environment( + activate_command, activate_script_path, &terminal_handle, cx, @@ -104,15 +106,24 @@ impl Project { None } + fn get_activate_command(settings: &VenvSettingsContent) -> &'static str { + match settings.activate_script { + terminal_settings::ActivateScript::Nushell => "overlay use", + _ => "source", + } + } + fn activate_python_virtual_environment( &mut self, + activate_command: &'static str, activate_script: Option, terminal_handle: &Model, cx: &mut ModelContext, ) { if let Some(activate_script) = activate_script { // Paths are not strings so we need to jump through some hoops to format the command without `format!` - let mut command = Vec::from("source ".as_bytes()); + let mut command = Vec::from(activate_command.as_bytes()); + command.push(b' '); command.extend_from_slice(activate_script.as_os_str().as_bytes()); command.push(b'\n');