diff --git a/scripts/code-cli.bat b/scripts/code-cli.bat index 2b3c9db3ca3..482dba274b1 100644 --- a/scripts/code-cli.bat +++ b/scripts/code-cli.bat @@ -6,7 +6,7 @@ title VSCode Dev pushd %~dp0.. :: Get electron, compile, built-in extensions -if "%VSCODE_SKIP_PRELAUNCH%"=="" node build/lib/preLaunch.js +@REM if "%VSCODE_SKIP_PRELAUNCH%"=="" node build/lib/preLaunch.js for /f "tokens=2 delims=:," %%a in ('findstr /R /C:"\"nameShort\":.*" product.json') do set NAMESHORT=%%~a set NAMESHORT=%NAMESHORT: "=% @@ -24,7 +24,7 @@ set ELECTRON_ENABLE_LOGGING=1 set ELECTRON_ENABLE_STACK_DUMPING=1 :: Launch Code -%CODE% --inspect=5874 out\cli.js --ms-enable-electron-run-as-node %~dp0.. %* +%CODE% out\cli.js --ms-enable-electron-run-as-node %~dp0.. %* goto end :builtin diff --git a/src/vs/code/node/cli.ts b/src/vs/code/node/cli.ts index 80e5dec517d..ee641c05cf6 100644 --- a/src/vs/code/node/cli.ts +++ b/src/vs/code/node/cli.ts @@ -24,6 +24,8 @@ import product from 'vs/platform/product/common/product'; import { CancellationTokenSource } from 'vs/base/common/cancellation'; import { randomPath } from 'vs/base/common/extpath'; import { Utils } from 'vs/platform/profiling/common/profiling'; +import { dirname } from 'vs/base/common/resources'; +import { FileAccess } from 'vs/base/common/network'; function shouldSpawnCliProcess(argv: NativeParsedArgs): boolean { return !!argv['install-source'] @@ -59,6 +61,23 @@ export async function main(argv: string[]): Promise { console.log(buildVersionMessage(product.version, product.commit)); } + // Shell integration + else if (args['shell-integration']) { + // Silently fail when the terminal is not VS Code's integrated terminal + if (process.env['TERM_PROGRAM'] !== 'vscode') { + return; + } + let p: string; + switch (args['shell-integration']) { + case 'bash': p = 'vs\\workbench\\contrib\\terminal\\browser\\media\\shellIntegration-bash.sh'; break; + // Usage: if ($s=$(code --shell-integration pwsh)) { . $s } + case 'pwsh': p = 'vs\\workbench\\contrib\\terminal\\browser\\media\\shellIntegration.ps1'; break; + case 'zsh': p = 'vs\\workbench\\contrib\\terminal\\browser\\media\\shellIntegration-rc.zsh'; break; + default: throw new Error('Error using --shell-integration: Invalid shell type'); + } + console.log(`${dirname(FileAccess.asFileUri('', require)).fsPath}\\out\\${p}`); + } + // Extensions Management else if (shouldSpawnCliProcess(args)) { const cli = await new Promise((resolve, reject) => require(['vs/code/node/cliProcessMain'], resolve, reject)); diff --git a/src/vs/platform/environment/common/argv.ts b/src/vs/platform/environment/common/argv.ts index 0e8ccc14714..08cf04683b5 100644 --- a/src/vs/platform/environment/common/argv.ts +++ b/src/vs/platform/environment/common/argv.ts @@ -89,6 +89,7 @@ export interface NativeParsedArgs { 'logsPath'?: string; '__enable-file-policy'?: boolean; editSessionId?: string; + 'shell-integration'?: string; // chromium command line args: https://electronjs.org/docs/all#supported-chrome-command-line-switches 'no-proxy-server'?: boolean; diff --git a/src/vs/platform/environment/node/argv.ts b/src/vs/platform/environment/node/argv.ts index e27a89390c2..86f2aeaa349 100644 --- a/src/vs/platform/environment/node/argv.ts +++ b/src/vs/platform/environment/node/argv.ts @@ -127,6 +127,7 @@ export const OPTIONS: OptionDescriptions> = { 'logsPath': { type: 'string' }, '__enable-file-policy': { type: 'boolean' }, 'editSessionId': { type: 'string' }, + 'shell-integration': { type: 'boolean' }, // chromium flags 'no-proxy-server': { type: 'boolean' },