mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-03-31 17:20:28 -04:00
Merge from vscode 099a7622e6e90dbcc226e428d4e35a72cb19ecbc (#9646)
* Merge from vscode 099a7622e6e90dbcc226e428d4e35a72cb19ecbc * fix strict
This commit is contained in:
@@ -15,7 +15,7 @@ import { TerminalTab } from 'vs/workbench/contrib/terminal/browser/terminalTab';
|
||||
import { IInstantiationService, optional } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
|
||||
import { TerminalInstance } from 'vs/workbench/contrib/terminal/browser/terminalInstance';
|
||||
import { ITerminalService, ITerminalInstance, ITerminalTab, TerminalShellType, WindowsShellType } from 'vs/workbench/contrib/terminal/browser/terminal';
|
||||
import { ITerminalService, ITerminalInstance, ITerminalTab, TerminalShellType, WindowsShellType, TerminalLinkHandlerCallback, LINK_INTERCEPT_THRESHOLD } from 'vs/workbench/contrib/terminal/browser/terminal';
|
||||
import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService';
|
||||
import { TerminalConfigHelper } from 'vs/workbench/contrib/terminal/browser/terminalConfigHelper';
|
||||
import { IQuickInputService, IQuickPickItem, IPickOptions } from 'vs/platform/quickinput/common/quickInput';
|
||||
@@ -30,6 +30,7 @@ import { IOpenFileRequest } from 'vs/platform/windows/common/windows';
|
||||
import { find } from 'vs/base/common/arrays';
|
||||
import { timeout } from 'vs/base/common/async';
|
||||
import { IViewsService } from 'vs/workbench/common/views';
|
||||
import { IDisposable } from 'vs/base/common/lifecycle';
|
||||
|
||||
interface IExtHostReadyEntry {
|
||||
promise: Promise<void>;
|
||||
@@ -50,6 +51,7 @@ export class TerminalService implements ITerminalService {
|
||||
private _findState: FindReplaceState;
|
||||
private _extHostsReady: { [authority: string]: IExtHostReadyEntry | undefined } = {};
|
||||
private _activeTabIndex: number;
|
||||
private _linkHandlers: { [key: string]: TerminalLinkHandlerCallback } = {};
|
||||
|
||||
public get activeTabIndex(): number { return this._activeTabIndex; }
|
||||
public get terminalInstances(): ITerminalInstance[] { return this._terminalInstances; }
|
||||
@@ -411,6 +413,50 @@ export class TerminalService implements ITerminalService {
|
||||
instance.addDisposable(instance.onDimensionsChanged(() => this._onInstanceDimensionsChanged.fire(instance)));
|
||||
instance.addDisposable(instance.onMaximumDimensionsChanged(() => this._onInstanceMaximumDimensionsChanged.fire(instance)));
|
||||
instance.addDisposable(instance.onFocus(this._onActiveInstanceChanged.fire, this._onActiveInstanceChanged));
|
||||
instance.addDisposable(instance.onBeforeHandleLink(async e => {
|
||||
// No link handlers have been registered
|
||||
const keys = Object.keys(this._linkHandlers);
|
||||
if (keys.length === 0) {
|
||||
e.resolve(false);
|
||||
return;
|
||||
}
|
||||
|
||||
// Fire each link interceptor and wait for either a true, all false or the cancel time
|
||||
let resolved = false;
|
||||
const promises: Promise<boolean>[] = [];
|
||||
const timeout = setTimeout(() => {
|
||||
resolved = true;
|
||||
e.resolve(false);
|
||||
}, LINK_INTERCEPT_THRESHOLD);
|
||||
for (let i = 0; i < keys.length; i++) {
|
||||
const p = this._linkHandlers[keys[i]](e);
|
||||
p.then(handled => {
|
||||
if (!resolved && handled) {
|
||||
resolved = true;
|
||||
clearTimeout(timeout);
|
||||
e.resolve(true);
|
||||
}
|
||||
});
|
||||
promises.push(p);
|
||||
}
|
||||
await Promise.all(promises);
|
||||
if (!resolved) {
|
||||
resolved = true;
|
||||
clearTimeout(timeout);
|
||||
e.resolve(false);
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
public addLinkHandler(key: string, callback: TerminalLinkHandlerCallback): IDisposable {
|
||||
this._linkHandlers[key] = callback;
|
||||
return {
|
||||
dispose: () => {
|
||||
if (this._linkHandlers[key] === callback) {
|
||||
delete this._linkHandlers[key];
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private _getTabForInstance(instance: ITerminalInstance): ITerminalTab | undefined {
|
||||
|
||||
Reference in New Issue
Block a user