44 *--------------------------------------------------------------------------------------------*/
55
66import * as nls from 'vs/nls' ;
7- import { TERMINAL_VIEW_ID , IShellLaunchConfig , ITerminalConfigHelper , ISpawnExtHostProcessRequest , IStartExtensionTerminalRequest , IAvailableShellsRequest , KEYBINDING_CONTEXT_TERMINAL_FOCUS , KEYBINDING_CONTEXT_TERMINAL_FIND_VISIBLE , KEYBINDING_CONTEXT_TERMINAL_IS_OPEN , ITerminalProcessExtHostProxy , IShellDefinition , LinuxDistro , KEYBINDING_CONTEXT_TERMINAL_SHELL_TYPE , ITerminalLaunchError , ITerminalNativeWindowsDelegate } from 'vs/workbench/contrib/terminal/common/terminal' ;
7+ import { TERMINAL_VIEW_ID , IShellLaunchConfig , ITerminalConfigHelper , ISpawnExtHostProcessRequest , IStartExtensionTerminalRequest , IAvailableShellsRequest , KEYBINDING_CONTEXT_TERMINAL_FOCUS , KEYBINDING_CONTEXT_TERMINAL_FIND_VISIBLE , KEYBINDING_CONTEXT_TERMINAL_IS_OPEN , KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED , ITerminalProcessExtHostProxy , IShellDefinition , LinuxDistro , KEYBINDING_CONTEXT_TERMINAL_SHELL_TYPE , ITerminalLaunchError , ITerminalNativeWindowsDelegate } from 'vs/workbench/contrib/terminal/common/terminal' ;
88import { IContextKeyService , IContextKey } from 'vs/platform/contextkey/common/contextkey' ;
99import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService' ;
1010import { ILifecycleService } from 'vs/platform/lifecycle/common/lifecycle' ;
@@ -23,12 +23,13 @@ import { Event, Emitter } from 'vs/base/common/event';
2323import { URI } from 'vs/base/common/uri' ;
2424import { FindReplaceState } from 'vs/editor/contrib/find/findState' ;
2525import { escapeNonWindowsPath } from 'vs/workbench/contrib/terminal/common/terminalEnvironment' ;
26- import { isWindows , isMacintosh , OperatingSystem } from 'vs/base/common/platform' ;
26+ import { isWindows , isMacintosh , OperatingSystem , isWeb } from 'vs/base/common/platform' ;
2727import { basename } from 'vs/base/common/path' ;
2828import { find } from 'vs/base/common/arrays' ;
2929import { timeout } from 'vs/base/common/async' ;
3030import { IViewsService , ViewContainerLocation , IViewDescriptorService } from 'vs/workbench/common/views' ;
3131import { IDisposable } from 'vs/base/common/lifecycle' ;
32+ import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService' ;
3233
3334interface IExtHostReadyEntry {
3435 promise : Promise < void > ;
@@ -52,10 +53,12 @@ export class TerminalService implements ITerminalService {
5253 private _activeTabIndex : number ;
5354 private _linkProviders : Set < ITerminalExternalLinkProvider > = new Set ( ) ;
5455 private _linkProviderDisposables : Map < ITerminalExternalLinkProvider , IDisposable [ ] > = new Map ( ) ;
56+ private _processSupportContextKey : IContextKey < boolean > ;
5557
5658 public get activeTabIndex ( ) : number { return this . _activeTabIndex ; }
5759 public get terminalInstances ( ) : ITerminalInstance [ ] { return this . _terminalInstances ; }
5860 public get terminalTabs ( ) : ITerminalTab [ ] { return this . _terminalTabs ; }
61+ public get isProcessSupportRegistered ( ) : boolean { return ! ! this . _processSupportContextKey . get ( ) ; }
5962
6063 private _configHelper : TerminalConfigHelper ;
6164 private _terminalContainer : HTMLElement | undefined ;
@@ -91,6 +94,8 @@ export class TerminalService implements ITerminalService {
9194 public get onTabDisposed ( ) : Event < ITerminalTab > { return this . _onTabDisposed . event ; }
9295 private readonly _onRequestAvailableShells = new Emitter < IAvailableShellsRequest > ( ) ;
9396 public get onRequestAvailableShells ( ) : Event < IAvailableShellsRequest > { return this . _onRequestAvailableShells . event ; }
97+ private readonly _onDidRegisterProcessSupport = new Emitter < void > ( ) ;
98+ public get onDidRegisterProcessSupport ( ) : Event < void > { return this . _onDidRegisterProcessSupport . event ; }
9499
95100 constructor (
96101 @IContextKeyService private _contextKeyService : IContextKeyService ,
@@ -103,7 +108,8 @@ export class TerminalService implements ITerminalService {
103108 @IQuickInputService private _quickInputService : IQuickInputService ,
104109 @IConfigurationService private _configurationService : IConfigurationService ,
105110 @IViewsService private _viewsService : IViewsService ,
106- @IViewDescriptorService private readonly _viewDescriptorService : IViewDescriptorService
111+ @IViewDescriptorService private readonly _viewDescriptorService : IViewDescriptorService ,
112+ @IWorkbenchEnvironmentService environmentService : IWorkbenchEnvironmentService
107113 ) {
108114 this . _activeTabIndex = 0 ;
109115 this . _isShuttingDown = false ;
@@ -121,7 +127,9 @@ export class TerminalService implements ITerminalService {
121127 } ) ;
122128 this . onInstanceLinksReady ( instance => this . _setInstanceLinkProviders ( instance ) ) ;
123129
124- this . _handleContextKeys ( ) ;
130+ this . _handleInstanceContextKeys ( ) ;
131+ this . _processSupportContextKey = KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED . bindTo ( this . _contextKeyService ) ;
132+ this . _processSupportContextKey . set ( ! isWeb || this . _remoteAgentService . getConnection ( ) !== null ) ;
125133 }
126134
127135 public setNativeWindowsDelegate ( delegate : ITerminalNativeWindowsDelegate ) : void {
@@ -132,13 +140,11 @@ export class TerminalService implements ITerminalService {
132140 this . _configHelper . setLinuxDistro ( linuxDistro ) ;
133141 }
134142
135- private _handleContextKeys ( ) : void {
143+ private _handleInstanceContextKeys ( ) : void {
136144 const terminalIsOpenContext = KEYBINDING_CONTEXT_TERMINAL_IS_OPEN . bindTo ( this . _contextKeyService ) ;
137-
138145 const updateTerminalContextKeys = ( ) => {
139146 terminalIsOpenContext . set ( this . terminalInstances . length > 0 ) ;
140147 } ;
141-
142148 this . onInstancesChanged ( ( ) => updateTerminalContextKeys ( ) ) ;
143149 }
144150
@@ -411,6 +417,14 @@ export class TerminalService implements ITerminalService {
411417 instance . addDisposable ( instance . onFocus ( this . _onActiveInstanceChanged . fire , this . _onActiveInstanceChanged ) ) ;
412418 }
413419
420+ public registerProcessSupport ( isSupported : boolean ) : void {
421+ if ( ! isSupported ) {
422+ return ;
423+ }
424+ this . _processSupportContextKey . set ( isSupported ) ;
425+ this . _onDidRegisterProcessSupport . fire ( ) ;
426+ }
427+
414428 public registerLinkProvider ( linkProvider : ITerminalExternalLinkProvider ) : IDisposable {
415429 const disposables : IDisposable [ ] = [ ] ;
416430 this . _linkProviders . add ( linkProvider ) ;
0 commit comments