Expose shell's environment - bash (#237602)

* start terminal shell env proposed

* fix typo

* progress on shellEnvDetectionCapability, mainThreadTerminalSI

* update IShellEnvDetectionCapability interface

* touch up on $shellEnvChange

* adjust IShellEnvDetectionCapability

* properly listen to envChangeEvent
Co-authored-by: Daniel Imms <Tyriar@users.noreply.github.com>

* Serialize env map, expose on exthost

* start adding to zsh script

* receive environment variable in extension host, properly escape "
Co-authored-by: Daniel Imms <Tyriar@users.noreply.github.com>

* clean up

* Add TODO: properly escape double quotes, figure out why JSON parse fails for bash

Co-authored-by: Daniel Imms <Tyriar@users.noreply.github.com>

* Fix nonce check, ignore PS1 for now in bash

* Add some simple PS1 string tests to deserializeMessage

* New approach of sending env entries separately

* be able to get EnvSingleVar

* few comments

* add function signature for start, set, end environment var

* implement EnvStart, EnvEntry, EnvEnd for single env entry

* deserialize env value for EnvEntry

* Remove unncessary comments

* only leave pwsh in this PR and exclude other shells

* keep exlcuding other shell env - only pwsh should remain

* Update src/vs/workbench/api/common/extHostTerminalShellIntegration.ts

Co-authored-by: Daniel Imms <2193314+Tyriar@users.noreply.github.com>

* Update src/vscode-dts/vscode.proposed.terminalShellEnv.d.ts

Co-authored-by: Daniel Imms <2193314+Tyriar@users.noreply.github.com>

* Update src/vs/workbench/contrib/terminal/common/scripts/shellIntegration.ps1

Co-authored-by: Daniel Imms <2193314+Tyriar@users.noreply.github.com>

* Update src/vs/workbench/contrib/terminal/common/scripts/shellIntegration-rc.zsh

Co-authored-by: Daniel Imms <2193314+Tyriar@users.noreply.github.com>

* Update src/vs/workbench/contrib/terminal/common/scripts/shellIntegration-rc.zsh

Co-authored-by: Daniel Imms <2193314+Tyriar@users.noreply.github.com>

* Update src/vs/workbench/api/common/extHostTerminalShellIntegration.ts

Co-authored-by: Daniel Imms <2193314+Tyriar@users.noreply.github.com>

* Update src/vs/platform/terminal/common/capabilities/shellEnvDetectionCapability.ts

Co-authored-by: Daniel Imms <2193314+Tyriar@users.noreply.github.com>

* Update src/vs/workbench/api/common/extHost.protocol.ts

Co-authored-by: Daniel Imms <2193314+Tyriar@users.noreply.github.com>

* Update src/vs/workbench/api/browser/mainThreadTerminalShellIntegration.ts

Co-authored-by: Daniel Imms <2193314+Tyriar@users.noreply.github.com>

* Update src/vs/platform/terminal/common/capabilities/shellEnvDetectionCapability.ts

Co-authored-by: Daniel Imms <2193314+Tyriar@users.noreply.github.com>

* Update src/vs/platform/terminal/common/capabilities/shellEnvDetectionCapability.ts

Co-authored-by: Daniel Imms <2193314+Tyriar@users.noreply.github.com>

* Update src/vs/platform/terminal/common/capabilities/shellEnvDetectionCapability.ts

Co-authored-by: Daniel Imms <2193314+Tyriar@users.noreply.github.com>

* Update src/vs/platform/terminal/common/capabilities/capabilities.ts

Co-authored-by: Daniel Imms <2193314+Tyriar@users.noreply.github.com>

* Update src/vs/workbench/api/browser/mainThreadTerminalShellIntegration.ts

Co-authored-by: Daniel Imms <2193314+Tyriar@users.noreply.github.com>

* Update src/vs/platform/terminal/common/xterm/shellIntegrationAddon.ts

Co-authored-by: Daniel Imms <2193314+Tyriar@users.noreply.github.com>

* Update src/vs/platform/terminal/common/xterm/shellIntegrationAddon.ts

Co-authored-by: Daniel Imms <2193314+Tyriar@users.noreply.github.com>

* Update src/vs/platform/terminal/common/xterm/shellIntegrationAddon.ts

Co-authored-by: Daniel Imms <2193314+Tyriar@users.noreply.github.com>

* add comment for ShellEnvDetection

* change envs in shellEnvDetectionCapability to env

* Mention escaping character for EnvJSON similar to commandLine

* Do not fire env event if env has not changed

* add link to CommandLine

* follow main branch format so I avoid merge conflict

* remove resolved TODO

* Update src/vs/workbench/api/browser/mainThreadTerminalShellIntegration.ts

Co-authored-by: Daniel Imms <2193314+Tyriar@users.noreply.github.com>

* Update src/vs/platform/terminal/common/xterm/shellIntegrationAddon.ts

Co-authored-by: Daniel Imms <2193314+Tyriar@users.noreply.github.com>

* use vscode object equals

* add zsh update_env for shellIntegration-zsh.sh

* add EnvStart, EnvEntry, EnvEnd

* why doesnt if [ "$__vsc_stable" = "0" ]; work

* add test to check shellPath

* stop messing with formatting

* try to be more detail in testing

* clean up

* dont change the format

* properly use stable/insider flag so update_env on insiders

* modify test after feedback

* rename to *EnvironmentSingleVar and make it transactional via _pending env

* add docs for *EnvSingle and update bash script to conform to *EnvSingle

* Update src/vs/platform/terminal/common/capabilities/shellEnvDetectionCapability.ts

Co-authored-by: Daniel Imms <2193314+Tyriar@users.noreply.github.com>

* Update src/vs/platform/terminal/common/capabilities/shellEnvDetectionCapability.ts

Co-authored-by: Daniel Imms <2193314+Tyriar@users.noreply.github.com>

* remove _env.clear from start and make _env non-readonly

* Update src/vs/platform/terminal/common/capabilities/shellEnvDetectionCapability.ts

---------

Co-authored-by: Daniel Imms <Tyriar@users.noreply.github.com>
Co-authored-by: Daniel Imms <2193314+Tyriar@users.noreply.github.com>
This commit is contained in:
Anthony Kim
2025-01-10 19:22:07 -05:00
committed by GitHub
parent be8f9a30c0
commit e6805d7927
5 changed files with 106 additions and 1 deletions

View File

@@ -87,6 +87,16 @@ import { assertNoRpc } from '../utils';
await closeTerminalAsync(terminal);
});
if (platform() === 'darwin' || platform() === 'linux') {
test('Test if env is set', async () => {
const { shellIntegration } = await createTerminalAndWaitForShellIntegration();
const env = shellIntegration.env;
ok(env);
ok(env.PATH);
ok(env.PATH.length > 0, 'env.PATH should have a length greater than 0');
});
}
test('execution events should fire in order when a command runs', async () => {
const { terminal, shellIntegration } = await createTerminalAndWaitForShellIntegration();
const events: string[] = [];