mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-04-01 17:40:30 -04:00
Merge from vscode 0f73473c08055054f317c1c94502f7f39fdbb164 (#6892)
* Merge from vscode 0f73473c08055054f317c1c94502f7f39fdbb164 * fix tslinting
This commit is contained in:
@@ -590,7 +590,12 @@ class CallStackDataSource implements IAsyncDataSource<IDebugModel, CallStackItem
|
||||
constructor(private debugService: IDebugService) { }
|
||||
|
||||
hasChildren(element: IDebugModel | CallStackItem): boolean {
|
||||
return isDebugModel(element) || isDebugSession(element) || (element instanceof Thread && element.stopped);
|
||||
if (isDebugSession(element)) {
|
||||
const threads = element.getAllThreads();
|
||||
return (threads.length > 1) || (threads.length === 1 && threads[0].stopped) || (this.debugService.getModel().getSessions().filter(s => s.parentSession === element).length > 0);
|
||||
}
|
||||
|
||||
return isDebugModel(element) || (element instanceof Thread && element.stopped);
|
||||
}
|
||||
|
||||
async getChildren(element: IDebugModel | CallStackItem): Promise<CallStackItem[]> {
|
||||
|
||||
@@ -236,16 +236,18 @@ export class Debugger implements IDebugger {
|
||||
};
|
||||
properties['preLaunchTask'] = {
|
||||
anyOf: [taskSchema, {
|
||||
type: ['string', 'null'],
|
||||
type: ['string']
|
||||
}],
|
||||
default: '',
|
||||
defaultSnippets: [{ body: { task: '', type: '' } }],
|
||||
description: nls.localize('debugPrelaunchTask', "Task to run before debug session starts.")
|
||||
};
|
||||
properties['postDebugTask'] = {
|
||||
anyOf: [taskSchema, {
|
||||
type: ['string', 'null'],
|
||||
type: ['string'],
|
||||
}],
|
||||
default: '',
|
||||
defaultSnippets: [{ body: { task: '', type: '' } }],
|
||||
description: nls.localize('debugPostDebugTask', "Task to run after debug session ends.")
|
||||
};
|
||||
properties['internalConsoleOptions'] = INTERNAL_CONSOLE_OPTIONS_SCHEMA;
|
||||
|
||||
@@ -15,7 +15,7 @@ import { IExtensionEnablementService } from 'vs/workbench/services/extensionMana
|
||||
import { ExtensionManagementService } from 'vs/platform/extensionManagement/node/extensionManagementService';
|
||||
import { Emitter } from 'vs/base/common/event';
|
||||
import { TestExtensionEnablementService } from 'vs/workbench/services/extensionManagement/test/electron-browser/extensionEnablementService.test';
|
||||
import { URLService } from 'vs/platform/url/common/urlService';
|
||||
import { URLService } from 'vs/platform/url/node/urlService';
|
||||
import { IURLService } from 'vs/platform/url/common/url';
|
||||
import { ITelemetryService, lastSessionDateStorageKey } from 'vs/platform/telemetry/common/telemetry';
|
||||
import { NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils';
|
||||
|
||||
@@ -31,7 +31,7 @@ import { TestContextService, TestWindowService, TestSharedProcessService } from
|
||||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||
import { ILogService, NullLogService } from 'vs/platform/log/common/log';
|
||||
import { IWindowService } from 'vs/platform/windows/common/windows';
|
||||
import { URLService } from 'vs/platform/url/common/urlService';
|
||||
import { URLService } from 'vs/platform/url/node/urlService';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService';
|
||||
import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService';
|
||||
|
||||
@@ -40,7 +40,7 @@ import { ITextModel } from 'vs/editor/common/model';
|
||||
import { IModelService } from 'vs/editor/common/services/modelService';
|
||||
import { ILifecycleService } from 'vs/platform/lifecycle/common/lifecycle';
|
||||
import { INotificationService, Severity, IPromptChoice, IPromptOptions } from 'vs/platform/notification/common/notification';
|
||||
import { URLService } from 'vs/platform/url/common/urlService';
|
||||
import { URLService } from 'vs/platform/url/node/urlService';
|
||||
import { IExperimentService } from 'vs/workbench/contrib/experiments/common/experimentService';
|
||||
import { TestExperimentService } from 'vs/workbench/contrib/experiments/test/electron-browser/experimentService.test';
|
||||
import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';
|
||||
|
||||
@@ -31,7 +31,7 @@ import { TestContextService, TestWindowService, TestSharedProcessService } from
|
||||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||
import { ILogService, NullLogService } from 'vs/platform/log/common/log';
|
||||
import { IWindowService } from 'vs/platform/windows/common/windows';
|
||||
import { URLService } from 'vs/platform/url/common/urlService';
|
||||
import { URLService } from 'vs/platform/url/node/urlService';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService';
|
||||
import { SinonStub } from 'sinon';
|
||||
|
||||
@@ -34,7 +34,7 @@ import { IWindowService } from 'vs/platform/windows/common/windows';
|
||||
import { IProgressService } from 'vs/platform/progress/common/progress';
|
||||
import { ProgressService } from 'vs/workbench/services/progress/browser/progressService';
|
||||
import { INotificationService } from 'vs/platform/notification/common/notification';
|
||||
import { URLService } from 'vs/platform/url/common/urlService';
|
||||
import { URLService } from 'vs/platform/url/node/urlService';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { CancellationToken } from 'vs/base/common/cancellation';
|
||||
import { ExtensionType } from 'vs/platform/extensions/common/extensions';
|
||||
|
||||
@@ -22,7 +22,7 @@ export class LogsDataCleaner extends Disposable {
|
||||
}
|
||||
|
||||
private cleanUpOldLogsSoon(): void {
|
||||
let handle: NodeJS.Timeout | undefined = setTimeout(async () => {
|
||||
let handle: any = setTimeout(async () => {
|
||||
handle = undefined;
|
||||
const logsPath = URI.file(this.environmentService.logsPath).with({ scheme: this.environmentService.logFile.scheme });
|
||||
const stat = await this.fileService.resolve(dirname(logsPath));
|
||||
|
||||
@@ -369,6 +369,10 @@
|
||||
margin-top: -1px;
|
||||
z-index: 1;
|
||||
}
|
||||
.settings-editor > .settings-body > .settings-tree-container .setting-item.setting-item-list .setting-item-contents.invalid-input .setting-item-validation-message {
|
||||
position: static;
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
.settings-editor > .settings-body > .settings-tree-container .setting-item.setting-item-text .setting-item-validation-message {
|
||||
width: 500px;
|
||||
|
||||
@@ -224,8 +224,9 @@ interface ISettingComplexItemTemplate extends ISettingItemTemplate<void> {
|
||||
button: Button;
|
||||
}
|
||||
|
||||
interface ISettingListItemTemplate extends ISettingItemTemplate<void> {
|
||||
interface ISettingListItemTemplate extends ISettingItemTemplate<string[] | undefined> {
|
||||
listWidget: ListSettingWidget;
|
||||
validationErrorMessageElement: HTMLElement;
|
||||
}
|
||||
|
||||
interface ISettingExcludeItemTemplate extends ISettingItemTemplate<void> {
|
||||
@@ -679,6 +680,9 @@ export class SettingArrayRenderer extends AbstractSettingRenderer implements ITr
|
||||
|
||||
renderTemplate(container: HTMLElement): ISettingListItemTemplate {
|
||||
const common = this.renderCommonTemplate(null, container, 'list');
|
||||
const descriptionElement = common.containerElement.querySelector('.setting-item-description')!;
|
||||
const validationErrorMessageElement = $('.setting-item-validation-message');
|
||||
descriptionElement.after(validationErrorMessageElement);
|
||||
|
||||
const listWidget = this._instantiationService.createInstance(ListSettingWidget, common.controlElement);
|
||||
listWidget.domNode.classList.add(AbstractSettingRenderer.CONTROL_CLASS);
|
||||
@@ -686,19 +690,40 @@ export class SettingArrayRenderer extends AbstractSettingRenderer implements ITr
|
||||
|
||||
const template: ISettingListItemTemplate = {
|
||||
...common,
|
||||
listWidget
|
||||
listWidget,
|
||||
validationErrorMessageElement
|
||||
};
|
||||
|
||||
this.addSettingElementFocusHandler(template);
|
||||
|
||||
common.toDispose.push(listWidget.onDidChangeList(e => this.onDidChangeList(template, e)));
|
||||
common.toDispose.push(
|
||||
listWidget.onDidChangeList(e => {
|
||||
const newList = this.computeNewList(template, e);
|
||||
this.onDidChangeList(template, newList);
|
||||
if (newList !== null && template.onChange) {
|
||||
template.onChange(newList);
|
||||
}
|
||||
})
|
||||
);
|
||||
|
||||
return template;
|
||||
}
|
||||
|
||||
private onDidChangeList(template: ISettingListItemTemplate, e: IListChangeEvent): void {
|
||||
private onDidChangeList(template: ISettingListItemTemplate, newList: string[] | undefined | null): void {
|
||||
if (!template.context || newList === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
this._onDidChangeSetting.fire({
|
||||
key: template.context.setting.key,
|
||||
value: newList,
|
||||
type: template.context.valueType
|
||||
});
|
||||
}
|
||||
|
||||
private computeNewList(template: ISettingListItemTemplate, e: IListChangeEvent): string[] | undefined | null {
|
||||
if (template.context) {
|
||||
let newValue: any[] = [];
|
||||
let newValue: string[] = [];
|
||||
if (isArray(template.context.scopeValue)) {
|
||||
newValue = [...template.context.scopeValue];
|
||||
} else if (isArray(template.context.value)) {
|
||||
@@ -732,29 +757,30 @@ export class SettingArrayRenderer extends AbstractSettingRenderer implements ITr
|
||||
template.context.defaultValue.length === newValue.length &&
|
||||
template.context.defaultValue.join() === newValue.join()
|
||||
) {
|
||||
return this._onDidChangeSetting.fire({
|
||||
key: template.context.setting.key,
|
||||
value: undefined, // reset setting
|
||||
type: template.context.valueType
|
||||
});
|
||||
return undefined;
|
||||
}
|
||||
|
||||
this._onDidChangeSetting.fire({
|
||||
key: template.context.setting.key,
|
||||
value: newValue,
|
||||
type: template.context.valueType
|
||||
});
|
||||
return newValue;
|
||||
}
|
||||
|
||||
return undefined;
|
||||
}
|
||||
|
||||
renderElement(element: ITreeNode<SettingsTreeSettingElement, never>, index: number, templateData: ISettingListItemTemplate): void {
|
||||
super.renderSettingElement(element, index, templateData);
|
||||
}
|
||||
|
||||
protected renderValue(dataElement: SettingsTreeSettingElement, template: ISettingListItemTemplate, onChange: (value: string) => void): void {
|
||||
protected renderValue(dataElement: SettingsTreeSettingElement, template: ISettingListItemTemplate, onChange: (value: string[] | undefined) => void): void {
|
||||
const value = getListDisplayValue(dataElement);
|
||||
template.listWidget.setValue(value);
|
||||
template.context = dataElement;
|
||||
|
||||
template.onChange = (v) => {
|
||||
onChange(v);
|
||||
renderArrayValidations(dataElement, template, v, false);
|
||||
};
|
||||
|
||||
renderArrayValidations(dataElement, template, value.map(v => v.value), true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1237,6 +1263,29 @@ function renderValidations(dataElement: SettingsTreeSettingElement, template: IS
|
||||
DOM.removeClass(template.containerElement, 'invalid-input');
|
||||
}
|
||||
|
||||
function renderArrayValidations(
|
||||
dataElement: SettingsTreeSettingElement,
|
||||
template: ISettingListItemTemplate,
|
||||
value: string[] | undefined,
|
||||
calledOnStartup: boolean
|
||||
) {
|
||||
DOM.addClass(template.containerElement, 'invalid-input');
|
||||
if (dataElement.setting.validator) {
|
||||
const errMsg = dataElement.setting.validator(value);
|
||||
if (errMsg && errMsg !== '') {
|
||||
DOM.addClass(template.containerElement, 'invalid-input');
|
||||
template.validationErrorMessageElement.innerText = errMsg;
|
||||
const validationError = localize('validationError', "Validation Error.");
|
||||
template.containerElement.setAttribute('aria-label', [dataElement.setting.key, validationError, errMsg].join(' '));
|
||||
if (!calledOnStartup) { ariaAlert(validationError + ' ' + errMsg); }
|
||||
return;
|
||||
} else {
|
||||
template.containerElement.setAttribute('aria-label', dataElement.setting.key);
|
||||
DOM.removeClass(template.containerElement, 'invalid-input');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function cleanRenderedMarkdown(element: Node): void {
|
||||
for (let i = 0; i < element.childNodes.length; i++) {
|
||||
const child = element.childNodes.item(i);
|
||||
|
||||
@@ -30,7 +30,7 @@ import { ipcRenderer as ipc } from 'electron';
|
||||
import { IDiagnosticInfoOptions, IRemoteDiagnosticInfo } from 'vs/platform/diagnostics/common/diagnostics';
|
||||
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
|
||||
import { IProgressService, IProgress, IProgressStep, ProgressLocation } from 'vs/platform/progress/common/progress';
|
||||
import { PersistentConnectionEventType } from 'vs/platform/remote/common/remoteAgentConnection';
|
||||
import { PersistentConnectionEventType, ReconnectionWaitEvent } from 'vs/platform/remote/common/remoteAgentConnection';
|
||||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||
import { IConfigurationRegistry, Extensions as ConfigurationExtensions } from 'vs/platform/configuration/common/configurationRegistry';
|
||||
import Severity from 'vs/base/common/severity';
|
||||
@@ -315,7 +315,58 @@ class RemoteAgentConnectionStatusListener implements IWorkbenchContribution {
|
||||
if (connection) {
|
||||
let currentProgressPromiseResolve: (() => void) | null = null;
|
||||
let progressReporter: ProgressReporter | null = null;
|
||||
let lastLocation: ProgressLocation | null = null;
|
||||
let currentTimer: ReconnectionTimer | null = null;
|
||||
let reconnectWaitEvent: ReconnectionWaitEvent | null = null;
|
||||
|
||||
function showProgress(location: ProgressLocation, buttons?: string[]) {
|
||||
if (currentProgressPromiseResolve) {
|
||||
currentProgressPromiseResolve();
|
||||
}
|
||||
|
||||
const promise = new Promise<void>((resolve) => currentProgressPromiseResolve = resolve);
|
||||
lastLocation = location;
|
||||
|
||||
if (location === ProgressLocation.Dialog) {
|
||||
// Show dialog
|
||||
progressService!.withProgress(
|
||||
{ location: ProgressLocation.Dialog, buttons },
|
||||
(progress) => { progressReporter = new ProgressReporter(progress); return promise; },
|
||||
(choice?) => {
|
||||
// Handle choice from dialog
|
||||
if (choice === 0 && buttons && reconnectWaitEvent) {
|
||||
reconnectWaitEvent.skipWait();
|
||||
} else {
|
||||
showProgress(ProgressLocation.Notification, buttons);
|
||||
}
|
||||
|
||||
progressReporter!.report();
|
||||
});
|
||||
} else {
|
||||
// Show notification
|
||||
progressService!.withProgress(
|
||||
{ location: ProgressLocation.Notification, buttons },
|
||||
(progress) => { if (progressReporter) { progressReporter.currentProgress = progress; } return promise; },
|
||||
(choice?) => {
|
||||
// Handle choice from notification
|
||||
if (choice === 0 && buttons && reconnectWaitEvent) {
|
||||
reconnectWaitEvent.skipWait();
|
||||
progressReporter!.report();
|
||||
} else {
|
||||
hideProgress();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function hideProgress() {
|
||||
if (currentProgressPromiseResolve) {
|
||||
currentProgressPromiseResolve();
|
||||
}
|
||||
|
||||
currentProgressPromiseResolve = null;
|
||||
progressReporter = null;
|
||||
}
|
||||
|
||||
connection.onDidStateChange((e) => {
|
||||
if (currentTimer) {
|
||||
@@ -325,31 +376,24 @@ class RemoteAgentConnectionStatusListener implements IWorkbenchContribution {
|
||||
switch (e.type) {
|
||||
case PersistentConnectionEventType.ConnectionLost:
|
||||
if (!currentProgressPromiseResolve) {
|
||||
let promise = new Promise<void>((resolve) => currentProgressPromiseResolve = resolve);
|
||||
progressService!.withProgress(
|
||||
{ location: ProgressLocation.Dialog },
|
||||
(progress: IProgress<IProgressStep> | null) => { progressReporter = new ProgressReporter(progress!); return promise; },
|
||||
() => {
|
||||
currentProgressPromiseResolve!();
|
||||
promise = new Promise<void>((resolve) => currentProgressPromiseResolve = resolve);
|
||||
progressService!.withProgress({ location: ProgressLocation.Notification }, (progress) => { if (progressReporter) { progressReporter.currentProgress = progress; } return promise; });
|
||||
progressReporter!.report();
|
||||
}
|
||||
);
|
||||
showProgress(ProgressLocation.Dialog, [nls.localize('reconnectNow', "Reconnect Now")]);
|
||||
}
|
||||
|
||||
progressReporter!.report(nls.localize('connectionLost', "Connection Lost"));
|
||||
break;
|
||||
case PersistentConnectionEventType.ReconnectionWait:
|
||||
hideProgress();
|
||||
reconnectWaitEvent = e;
|
||||
showProgress(lastLocation || ProgressLocation.Notification, [nls.localize('reconnectNow', "Reconnect Now")]);
|
||||
currentTimer = new ReconnectionTimer(progressReporter!, Date.now() + 1000 * e.durationSeconds);
|
||||
break;
|
||||
case PersistentConnectionEventType.ReconnectionRunning:
|
||||
hideProgress();
|
||||
showProgress(lastLocation || ProgressLocation.Notification);
|
||||
progressReporter!.report(nls.localize('reconnectionRunning', "Attempting to reconnect..."));
|
||||
break;
|
||||
case PersistentConnectionEventType.ReconnectionPermanentFailure:
|
||||
currentProgressPromiseResolve!();
|
||||
currentProgressPromiseResolve = null;
|
||||
progressReporter = null;
|
||||
hideProgress();
|
||||
|
||||
dialogService.show(Severity.Error, nls.localize('reconnectionPermanentFailure', "Cannot reconnect. Please reload the window."), [nls.localize('reloadWindow', "Reload Window"), nls.localize('cancel', "Cancel")], { cancelId: 1 }).then(choice => {
|
||||
// Reload the window
|
||||
@@ -359,9 +403,7 @@ class RemoteAgentConnectionStatusListener implements IWorkbenchContribution {
|
||||
});
|
||||
break;
|
||||
case PersistentConnectionEventType.ConnectionGain:
|
||||
currentProgressPromiseResolve!();
|
||||
currentProgressPromiseResolve = null;
|
||||
progressReporter = null;
|
||||
hideProgress();
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
@@ -147,7 +147,9 @@ export class WorkspaceStats implements IWorkbenchContribution {
|
||||
@ISharedProcessService private readonly sharedProcessService: ISharedProcessService,
|
||||
@IWorkspaceStatsService private readonly workspaceStatsService: IWorkspaceStatsService
|
||||
) {
|
||||
this.report();
|
||||
if (this.telemetryService.isOptedIn) {
|
||||
this.report();
|
||||
}
|
||||
}
|
||||
|
||||
private report(): void {
|
||||
|
||||
@@ -44,6 +44,7 @@ import { Schemas } from 'vs/base/common/network';
|
||||
import { IPanelService } from 'vs/workbench/services/panel/common/panelService';
|
||||
import { ITerminalInstanceService } from 'vs/workbench/contrib/terminal/browser/terminal';
|
||||
import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService';
|
||||
import { env as processEnv, cwd as processCwd } from 'vs/base/common/process';
|
||||
|
||||
interface TerminalData {
|
||||
terminal: ITerminalInstance;
|
||||
@@ -339,7 +340,9 @@ export class TerminalTaskSystem implements ITaskSystem {
|
||||
private async executeTask(task: Task, resolver: ITaskResolver, trigger: string): Promise<ITaskSummary> {
|
||||
let promises: Promise<ITaskSummary>[] = [];
|
||||
if (task.configurationProperties.dependsOn) {
|
||||
for (const dependency of task.configurationProperties.dependsOn) { //{{SQL CARBON EDIT}} change to for of for linting
|
||||
// tslint:disable-next-line: no-for-in-array
|
||||
for (let index in task.configurationProperties.dependsOn) {
|
||||
const dependency = task.configurationProperties.dependsOn[index];
|
||||
let dependencyTask = resolver.resolve(dependency.workspaceFolder, dependency.task!);
|
||||
if (dependencyTask) {
|
||||
let key = dependencyTask.getMapKey();
|
||||
@@ -1374,7 +1377,7 @@ export class TerminalTaskSystem implements ITaskSystem {
|
||||
return command;
|
||||
}
|
||||
if (cwd === undefined) {
|
||||
cwd = process.cwd();
|
||||
cwd = processCwd();
|
||||
}
|
||||
const dir = path.dirname(command);
|
||||
if (dir !== '.') {
|
||||
@@ -1382,8 +1385,8 @@ export class TerminalTaskSystem implements ITaskSystem {
|
||||
// to the current working directory.
|
||||
return path.join(cwd, command);
|
||||
}
|
||||
if (paths === undefined && Types.isString(process.env.PATH)) {
|
||||
paths = process.env.PATH.split(path.delimiter);
|
||||
if (paths === undefined && Types.isString(processEnv.PATH)) {
|
||||
paths = processEnv.PATH.split(path.delimiter);
|
||||
}
|
||||
// No PATH environment. Make path absolute to the cwd.
|
||||
if (paths === undefined || paths.length === 0) {
|
||||
|
||||
@@ -985,14 +985,15 @@ export namespace KeyedTaskIdentifier {
|
||||
function sortedStringify(literal: any): string {
|
||||
const keys = Object.keys(literal).sort();
|
||||
let result: string = '';
|
||||
for (const position of keys) { // {{SQL CARBON EDIT}} change to of for linting
|
||||
let stringified = literal[position];
|
||||
// tslint:disable-next-line: no-for-in-array
|
||||
for (let position in keys) {
|
||||
let stringified = literal[keys[position]];
|
||||
if (stringified instanceof Object) {
|
||||
stringified = sortedStringify(stringified);
|
||||
} else if (typeof stringified === 'string') {
|
||||
stringified = stringified.replace(/,/g, ',,');
|
||||
}
|
||||
result += position + ',' + stringified + ',';
|
||||
result += keys[position] + ',' + stringified + ',';
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -72,17 +72,17 @@ configurationRegistry.registerConfiguration({
|
||||
type: 'object',
|
||||
properties: {
|
||||
'terminal.integrated.automationShell.linux': {
|
||||
markdownDescription: nls.localize('terminal.integrated.automationShell.linux', "A path that when set will override {0} and ignore {1} and {2} values for automation-related terminal usage like tasks and debug.", '`terminal.integrated.shell.linux`', '`shellArgs`', '`env`'),
|
||||
markdownDescription: nls.localize('terminal.integrated.automationShell.linux', "A path that when set will override {0} and ignore {1} values for automation-related terminal usage like tasks and debug.", '`terminal.integrated.shell.linux`', '`shellArgs`'),
|
||||
type: ['string', 'null'],
|
||||
default: null
|
||||
},
|
||||
'terminal.integrated.automationShell.osx': {
|
||||
markdownDescription: nls.localize('terminal.integrated.automationShell.osx', "A path that when set will override {0} and ignore {1} and {2} values for automation-related terminal usage like tasks and debug.", '`terminal.integrated.shell.osx`', '`shellArgs`', '`env`'),
|
||||
markdownDescription: nls.localize('terminal.integrated.automationShell.osx', "A path that when set will override {0} and ignore {1} values for automation-related terminal usage like tasks and debug.", '`terminal.integrated.shell.osx`', '`shellArgs`'),
|
||||
type: ['string', 'null'],
|
||||
default: null
|
||||
},
|
||||
'terminal.integrated.automationShell.windows': {
|
||||
markdownDescription: nls.localize('terminal.integrated.automationShell.windows', "A path that when set will override {0} and ignore {1} and {2} values for automation-related terminal usage like tasks and debug.", '`terminal.integrated.shell.windows`', '`shellArgs`', '`env`'),
|
||||
markdownDescription: nls.localize('terminal.integrated.automationShell.windows', "A path that when set will override {0} and ignore {1} values for automation-related terminal usage like tasks and debug.", '`terminal.integrated.shell.windows`', '`shellArgs`'),
|
||||
type: ['string', 'null'],
|
||||
default: null
|
||||
},
|
||||
@@ -530,6 +530,7 @@ actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(FindNext, FindNe
|
||||
}, KEYBINDING_CONTEXT_TERMINAL_FOCUS), 'Terminal: Find next', category);
|
||||
actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(FindNext, FindNext.ID, FindNext.LABEL, {
|
||||
primary: KeyCode.F3,
|
||||
secondary: [KeyMod.Shift | KeyCode.Enter],
|
||||
mac: { primary: KeyMod.CtrlCmd | KeyCode.KEY_G, secondary: [KeyCode.F3, KeyMod.Shift | KeyCode.Enter] }
|
||||
}, KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_FOCUSED), 'Terminal: Find next');
|
||||
actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(FindPrevious, FindPrevious.ID_TERMINAL_FOCUS, FindPrevious.LABEL, {
|
||||
@@ -538,6 +539,7 @@ actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(FindPrevious, Fi
|
||||
}, KEYBINDING_CONTEXT_TERMINAL_FOCUS), 'Terminal: Find previous', category);
|
||||
actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(FindPrevious, FindPrevious.ID, FindPrevious.LABEL, {
|
||||
primary: KeyMod.Shift | KeyCode.F3,
|
||||
secondary: [KeyCode.Enter],
|
||||
mac: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_G, secondary: [KeyMod.Shift | KeyCode.F3, KeyCode.Enter] },
|
||||
}, KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_FOCUSED), 'Terminal: Find previous');
|
||||
|
||||
|
||||
@@ -500,7 +500,7 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
|
||||
// Force line data to be sent when the cursor is moved, the main purpose for
|
||||
// this is because ConPTY will often not do a line feed but instead move the
|
||||
// cursor, in which case we still want to send the current line's data to tasks.
|
||||
xterm.addCsiHandler('H', () => {
|
||||
xterm.parser.addCsiHandler({ final: 'H' }, () => {
|
||||
this._onCursorMove();
|
||||
return false;
|
||||
});
|
||||
@@ -865,7 +865,7 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
|
||||
return;
|
||||
}
|
||||
this.focus();
|
||||
this._xterm._core._coreService.triggerDataEvent(await this._clipboardService.readText(), true);
|
||||
this._xterm.paste(await this._clipboardService.readText());
|
||||
}
|
||||
|
||||
public write(text: string): void {
|
||||
|
||||
@@ -248,6 +248,7 @@ export interface ITerminalService {
|
||||
/**
|
||||
* Creates a raw terminal instance, this should not be used outside of the terminal part.
|
||||
*/
|
||||
// tslint:disable-next-line: no-dom-globals
|
||||
createInstance(container: HTMLElement | undefined, shellLaunchConfig: IShellLaunchConfig): ITerminalInstance;
|
||||
getInstanceFromId(terminalId: number): ITerminalInstance | undefined;
|
||||
getInstanceFromIndex(terminalIndex: number): ITerminalInstance;
|
||||
@@ -279,6 +280,7 @@ export interface ITerminalService {
|
||||
|
||||
selectDefaultWindowsShell(): Promise<void>;
|
||||
|
||||
// tslint:disable-next-line: no-dom-globals
|
||||
setContainers(panelContainer: HTMLElement, terminalContainer: HTMLElement): void;
|
||||
manageWorkspaceShellPermissions(): void;
|
||||
|
||||
@@ -337,6 +339,7 @@ export interface ITerminalTab {
|
||||
focusNextPane(): void;
|
||||
resizePane(direction: Direction): void;
|
||||
setActiveInstanceByIndex(index: number): void;
|
||||
// tslint:disable-next-line: no-dom-globals
|
||||
attachToElement(element: HTMLElement): void;
|
||||
setVisible(visible: boolean): void;
|
||||
layout(width: number, height: number): void;
|
||||
@@ -611,6 +614,7 @@ export interface ITerminalInstance {
|
||||
*
|
||||
* @param container The element to attach the terminal instance to.
|
||||
*/
|
||||
// tslint:disable-next-line: no-dom-globals
|
||||
attachToElement(container: HTMLElement): void;
|
||||
|
||||
/**
|
||||
|
||||
@@ -122,7 +122,9 @@ export abstract class TerminalService implements ITerminalService {
|
||||
protected abstract _showBackgroundTerminal(instance: ITerminalInstance): void;
|
||||
|
||||
public abstract createTerminal(shell?: IShellLaunchConfig, wasNewTerminalAction?: boolean): ITerminalInstance;
|
||||
// tslint:disable-next-line: no-dom-globals
|
||||
public abstract createInstance(container: HTMLElement, shellLaunchConfig: IShellLaunchConfig): ITerminalInstance;
|
||||
// tslint:disable-next-line: no-dom-globals
|
||||
public abstract setContainers(panelContainer: HTMLElement, terminalContainer: HTMLElement): void;
|
||||
|
||||
public getActiveOrCreateInstance(wasNewTerminalAction?: boolean): ITerminalInstance {
|
||||
|
||||
@@ -50,14 +50,17 @@ Registry.as<IWorkbenchActionRegistry>(ActionExtensions.WorkbenchActions).registe
|
||||
localize('developer', 'Developer')
|
||||
);
|
||||
|
||||
const VSCODE_DOMAIN = 'https://code.visualstudio.com';
|
||||
const DEAFULT_TRUSTED_DOMAINS = [
|
||||
'https://code.visualstudio.com',
|
||||
'https://go.microsoft.com'
|
||||
];
|
||||
|
||||
const configureTrustedDomainsHandler = async (
|
||||
quickInputService: IQuickInputService,
|
||||
storageService: IStorageService,
|
||||
domainToConfigure?: string
|
||||
) => {
|
||||
let trustedDomains: string[] = [VSCODE_DOMAIN];
|
||||
let trustedDomains: string[] = DEAFULT_TRUSTED_DOMAINS;
|
||||
|
||||
try {
|
||||
const trustedDomainsSrc = storageService.get('http.trustedDomains', StorageScope.GLOBAL);
|
||||
@@ -158,7 +161,7 @@ class OpenerValidatorContributions implements IWorkbenchContribution {
|
||||
return true;
|
||||
}
|
||||
|
||||
let trustedDomains: string[] = [VSCODE_DOMAIN];
|
||||
let trustedDomains: string[] = DEAFULT_TRUSTED_DOMAINS;
|
||||
try {
|
||||
const trustedDomainsSrc = this._storageService.get('http.trustedDomains', StorageScope.GLOBAL);
|
||||
if (trustedDomainsSrc) {
|
||||
|
||||
Reference in New Issue
Block a user