Archived
Merge from vscode 2a36b7d0d527bf408bae4f96b8386db9d9455113 (#10237)
This commit is contained in:
Vendored
+18
-1
@@ -2,7 +2,24 @@
|
|||||||
# Flags: CaseSensitive WordMatch
|
# Flags: CaseSensitive WordMatch
|
||||||
# ContextLines: 2
|
# ContextLines: 2
|
||||||
|
|
||||||
10 results - 4 files
|
16 results - 5 files
|
||||||
|
|
||||||
|
src/vs/base/browser/dom.ts:
|
||||||
|
81 };
|
||||||
|
82
|
||||||
|
83: /** @deprecated ES6 - use classList*/
|
||||||
|
84 export const hasClass: (node: HTMLElement | SVGElement, className: string) => boolean = _classList.hasClass.bind(_classList);
|
||||||
|
85: /** @deprecated ES6 - use classList*/
|
||||||
|
86 export const addClass: (node: HTMLElement | SVGElement, className: string) => void = _classList.addClass.bind(_classList);
|
||||||
|
87: /** @deprecated ES6 - use classList*/
|
||||||
|
88 export const addClasses: (node: HTMLElement | SVGElement, ...classNames: string[]) => void = _classList.addClasses.bind(_classList);
|
||||||
|
89: /** @deprecated ES6 - use classList*/
|
||||||
|
90 export const removeClass: (node: HTMLElement | SVGElement, className: string) => void = _classList.removeClass.bind(_classList);
|
||||||
|
91: /** @deprecated ES6 - use classList*/
|
||||||
|
92 export const removeClasses: (node: HTMLElement | SVGElement, ...classNames: string[]) => void = _classList.removeClasses.bind(_classList);
|
||||||
|
93: /** @deprecated ES6 - use classList*/
|
||||||
|
94 export const toggleClass: (node: HTMLElement | SVGElement, className: string, shouldHaveIt?: boolean) => void = _classList.toggleClass.bind(_classList);
|
||||||
|
95
|
||||||
|
|
||||||
src/vs/base/common/arrays.ts:
|
src/vs/base/common/arrays.ts:
|
||||||
401
|
401
|
||||||
|
|||||||
@@ -80,11 +80,17 @@ const _classList: IDomClassList = new class implements IDomClassList {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @deprecated ES6 - use classList*/
|
||||||
export const hasClass: (node: HTMLElement | SVGElement, className: string) => boolean = _classList.hasClass.bind(_classList);
|
export const hasClass: (node: HTMLElement | SVGElement, className: string) => boolean = _classList.hasClass.bind(_classList);
|
||||||
|
/** @deprecated ES6 - use classList*/
|
||||||
export const addClass: (node: HTMLElement | SVGElement, className: string) => void = _classList.addClass.bind(_classList);
|
export const addClass: (node: HTMLElement | SVGElement, className: string) => void = _classList.addClass.bind(_classList);
|
||||||
|
/** @deprecated ES6 - use classList*/
|
||||||
export const addClasses: (node: HTMLElement | SVGElement, ...classNames: string[]) => void = _classList.addClasses.bind(_classList);
|
export const addClasses: (node: HTMLElement | SVGElement, ...classNames: string[]) => void = _classList.addClasses.bind(_classList);
|
||||||
|
/** @deprecated ES6 - use classList*/
|
||||||
export const removeClass: (node: HTMLElement | SVGElement, className: string) => void = _classList.removeClass.bind(_classList);
|
export const removeClass: (node: HTMLElement | SVGElement, className: string) => void = _classList.removeClass.bind(_classList);
|
||||||
|
/** @deprecated ES6 - use classList*/
|
||||||
export const removeClasses: (node: HTMLElement | SVGElement, ...classNames: string[]) => void = _classList.removeClasses.bind(_classList);
|
export const removeClasses: (node: HTMLElement | SVGElement, ...classNames: string[]) => void = _classList.removeClasses.bind(_classList);
|
||||||
|
/** @deprecated ES6 - use classList*/
|
||||||
export const toggleClass: (node: HTMLElement | SVGElement, className: string, shouldHaveIt?: boolean) => void = _classList.toggleClass.bind(_classList);
|
export const toggleClass: (node: HTMLElement | SVGElement, className: string, shouldHaveIt?: boolean) => void = _classList.toggleClass.bind(_classList);
|
||||||
|
|
||||||
class DomListener implements IDisposable {
|
class DomListener implements IDisposable {
|
||||||
|
|||||||
@@ -178,17 +178,7 @@ export class BaseActionViewItem extends Disposable implements IActionViewItem {
|
|||||||
onClick(event: DOM.EventLike): void {
|
onClick(event: DOM.EventLike): void {
|
||||||
DOM.EventHelper.stop(event, true);
|
DOM.EventHelper.stop(event, true);
|
||||||
|
|
||||||
let context: any;
|
const context = types.isUndefinedOrNull(this._context) ? undefined : this._context;
|
||||||
if (types.isUndefinedOrNull(this._context)) {
|
|
||||||
context = event;
|
|
||||||
} else {
|
|
||||||
context = this._context;
|
|
||||||
|
|
||||||
if (types.isObject(context)) {
|
|
||||||
context.event = event;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.actionRunner.run(this._action, context);
|
this.actionRunner.run(this._action, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -83,7 +83,7 @@
|
|||||||
|
|
||||||
.linux .monaco-pane-view .pane > .pane-header .action-item .monaco-select-box,
|
.linux .monaco-pane-view .pane > .pane-header .action-item .monaco-select-box,
|
||||||
.windows .monaco-pane-view .pane > .pane-header .action-item .monaco-select-box {
|
.windows .monaco-pane-view .pane > .pane-header .action-item .monaco-select-box {
|
||||||
padding: 0px 23px 2px 8px;
|
padding: 0px 23px 0px 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Bold font style does not go well with CJK fonts */
|
/* Bold font style does not go well with CJK fonts */
|
||||||
|
|||||||
@@ -148,6 +148,8 @@ class DisposedModelInfo {
|
|||||||
|
|
||||||
export class ModelServiceImpl extends Disposable implements IModelService {
|
export class ModelServiceImpl extends Disposable implements IModelService {
|
||||||
|
|
||||||
|
public static MAX_MEMORY_FOR_CLOSED_FILES_UNDO_STACK = 20 * 1024 * 1024;
|
||||||
|
|
||||||
public _serviceBrand: undefined;
|
public _serviceBrand: undefined;
|
||||||
|
|
||||||
private readonly _onModelAdded: Emitter<ITextModel> = this._register(new Emitter<ITextModel>());
|
private readonly _onModelAdded: Emitter<ITextModel> = this._register(new Emitter<ITextModel>());
|
||||||
@@ -263,12 +265,12 @@ export class ModelServiceImpl extends Disposable implements IModelService {
|
|||||||
return platform.OS === platform.OperatingSystem.Linux || platform.OS === platform.OperatingSystem.Macintosh ? '\n' : '\r\n';
|
return platform.OS === platform.OperatingSystem.Linux || platform.OS === platform.OperatingSystem.Macintosh ? '\n' : '\r\n';
|
||||||
}
|
}
|
||||||
|
|
||||||
private _getMaxMemoryForClosedFilesUndoStack(): number {
|
private _shouldRestoreUndoStack(): boolean {
|
||||||
const result = this._configurationService.getValue<number>('files.maxMemoryForClosedFilesUndoStackMB');
|
const result = this._configurationService.getValue<boolean>('files.restoreUndoStack');
|
||||||
if (typeof result === 'number') {
|
if (typeof result === 'boolean') {
|
||||||
return result * 1024 * 1024;
|
return result;
|
||||||
}
|
}
|
||||||
return 20 * 1024 * 1024;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public getCreationOptions(language: string, resource: URI | undefined, isForSimpleWidget: boolean): ITextModelCreationOptions {
|
public getCreationOptions(language: string, resource: URI | undefined, isForSimpleWidget: boolean): ITextModelCreationOptions {
|
||||||
@@ -504,7 +506,7 @@ export class ModelServiceImpl extends Disposable implements IModelService {
|
|||||||
const model = modelData.model;
|
const model = modelData.model;
|
||||||
let maintainUndoRedoStack = false;
|
let maintainUndoRedoStack = false;
|
||||||
let heapSize = 0;
|
let heapSize = 0;
|
||||||
if (resource.scheme === Schemas.file || resource.scheme === Schemas.vscodeRemote || resource.scheme === Schemas.userData) {
|
if (this._shouldRestoreUndoStack() && (resource.scheme === Schemas.file || resource.scheme === Schemas.vscodeRemote || resource.scheme === Schemas.userData)) {
|
||||||
const elements = this._undoRedoService.getElements(resource);
|
const elements = this._undoRedoService.getElements(resource);
|
||||||
if ((elements.past.length > 0 || elements.future.length > 0) && isEditStackPastFutureElements(elements)) {
|
if ((elements.past.length > 0 || elements.future.length > 0) && isEditStackPastFutureElements(elements)) {
|
||||||
maintainUndoRedoStack = true;
|
maintainUndoRedoStack = true;
|
||||||
@@ -516,8 +518,6 @@ export class ModelServiceImpl extends Disposable implements IModelService {
|
|||||||
heapSize += element.heapSize(resource);
|
heapSize += element.heapSize(resource);
|
||||||
element.setModel(resource); // remove reference from text buffer instance
|
element.setModel(resource); // remove reference from text buffer instance
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
maintainUndoRedoStack = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -527,7 +527,7 @@ export class ModelServiceImpl extends Disposable implements IModelService {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const maxMemory = this._getMaxMemoryForClosedFilesUndoStack();
|
const maxMemory = ModelServiceImpl.MAX_MEMORY_FOR_CLOSED_FILES_UNDO_STACK;
|
||||||
if (heapSize > maxMemory) {
|
if (heapSize > maxMemory) {
|
||||||
// the undo stack for this file would never fit in the configured memory, so don't bother with it.
|
// the undo stack for this file would never fit in the configured memory, so don't bother with it.
|
||||||
this._undoRedoService.removeElements(resource);
|
this._undoRedoService.removeElements(resource);
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ export class AuthenticationTokenService extends Disposable implements IAuthentic
|
|||||||
}
|
}
|
||||||
|
|
||||||
async setToken(token: IUserDataSyncAuthToken | undefined): Promise<void> {
|
async setToken(token: IUserDataSyncAuthToken | undefined): Promise<void> {
|
||||||
if (token && this._token ? token.token !== this._token.token && token.authenticationProviderId !== this._token.authenticationProviderId : token !== this._token) {
|
if (token && this._token ? token.token !== this._token.token || token.authenticationProviderId !== this._token.authenticationProviderId : token !== this._token) {
|
||||||
this._token = token;
|
this._token = token;
|
||||||
this._onDidChangeToken.fire(token);
|
this._onDidChangeToken.fire(token);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService';
|
import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService';
|
||||||
import { URI } from 'vs/base/common/uri';
|
import { URI } from 'vs/base/common/uri';
|
||||||
|
import { $ } from 'vs/base/browser/dom';
|
||||||
|
|
||||||
export class BrowserClipboardService implements IClipboardService {
|
export class BrowserClipboardService implements IClipboardService {
|
||||||
|
|
||||||
@@ -14,39 +15,57 @@ export class BrowserClipboardService implements IClipboardService {
|
|||||||
|
|
||||||
async writeText(text: string, type?: string): Promise<void> {
|
async writeText(text: string, type?: string): Promise<void> {
|
||||||
if (type) {
|
if (type) {
|
||||||
return; // TODO@sbatten
|
return; // TODO@sbatten support for writing a specific type into clipboard is unsupported
|
||||||
}
|
}
|
||||||
|
|
||||||
if (navigator.clipboard && navigator.clipboard.writeText) {
|
// Guard access to navigator.clipboard with try/catch
|
||||||
return navigator.clipboard.writeText(text);
|
// as we have seen DOMExceptions in certain browsers
|
||||||
} else {
|
// due to security policies.
|
||||||
const activeElement = <HTMLElement>document.activeElement;
|
try {
|
||||||
const newTextarea = document.createElement('textarea');
|
return await navigator.clipboard.writeText(text);
|
||||||
newTextarea.className = 'clipboard-copy';
|
} catch (error) {
|
||||||
newTextarea.style.visibility = 'false';
|
console.error(error);
|
||||||
newTextarea.style.height = '1px';
|
|
||||||
newTextarea.style.width = '1px';
|
|
||||||
newTextarea.setAttribute('aria-hidden', 'true');
|
|
||||||
newTextarea.style.position = 'absolute';
|
|
||||||
newTextarea.style.top = '-1000';
|
|
||||||
newTextarea.style.left = '-1000';
|
|
||||||
document.body.appendChild(newTextarea);
|
|
||||||
newTextarea.value = text;
|
|
||||||
newTextarea.focus();
|
|
||||||
newTextarea.select();
|
|
||||||
document.execCommand('copy');
|
|
||||||
activeElement.focus();
|
|
||||||
document.body.removeChild(newTextarea);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fallback to textarea and execCommand solution
|
||||||
|
|
||||||
|
const activeElement = document.activeElement;
|
||||||
|
|
||||||
|
const textArea: HTMLTextAreaElement = document.body.appendChild($('textarea', { 'aria-hidden': true }));
|
||||||
|
textArea.style.height = '1px';
|
||||||
|
textArea.style.width = '1px';
|
||||||
|
textArea.style.position = 'absolute';
|
||||||
|
|
||||||
|
textArea.value = text;
|
||||||
|
textArea.focus();
|
||||||
|
textArea.select();
|
||||||
|
|
||||||
|
document.execCommand('copy');
|
||||||
|
|
||||||
|
if (activeElement instanceof HTMLElement) {
|
||||||
|
activeElement.focus();
|
||||||
|
}
|
||||||
|
|
||||||
|
document.body.removeChild(textArea);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
async readText(type?: string): Promise<string> {
|
async readText(type?: string): Promise<string> {
|
||||||
if (type) {
|
if (type) {
|
||||||
return ''; // TODO@sbatten
|
return ''; // TODO@sbatten support for reading a specific type from clipboard is unsupported
|
||||||
}
|
}
|
||||||
|
|
||||||
return navigator.clipboard.readText();
|
// Guard access to navigator.clipboard with try/catch
|
||||||
|
// as we have seen DOMExceptions in certain browsers
|
||||||
|
// due to security policies.
|
||||||
|
try {
|
||||||
|
return await navigator.clipboard.readText();
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
|
||||||
|
return '';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
readTextSync(): string | undefined {
|
readTextSync(): string | undefined {
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
import { getErrorMessage, isPromiseCanceledError, canceled } from 'vs/base/common/errors';
|
import { getErrorMessage, isPromiseCanceledError, canceled } from 'vs/base/common/errors';
|
||||||
import { StatisticType, IGalleryExtension, IExtensionGalleryService, IGalleryExtensionAsset, IQueryOptions, SortBy, SortOrder, IExtensionIdentifier, IReportedExtension, InstallOperation, ITranslation, IGalleryExtensionVersion, IGalleryExtensionAssets, isIExtensionIdentifier } from 'vs/platform/extensionManagement/common/extensionManagement';
|
import { StatisticType, IGalleryExtension, IExtensionGalleryService, IGalleryExtensionAsset, IQueryOptions, SortBy, SortOrder, IExtensionIdentifier, IReportedExtension, InstallOperation, ITranslation, IGalleryExtensionVersion, IGalleryExtensionAssets, isIExtensionIdentifier, DefaultIconPath } from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||||
import { getGalleryExtensionId, getGalleryExtensionTelemetryData, adoptToGalleryExtensionId } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
|
import { getGalleryExtensionId, getGalleryExtensionTelemetryData, adoptToGalleryExtensionId } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
|
||||||
import { assign, getOrDefault } from 'vs/base/common/objects';
|
import { assign, getOrDefault } from 'vs/base/common/objects';
|
||||||
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
||||||
@@ -252,7 +252,7 @@ function getIconAsset(version: IRawGalleryExtensionVersion): IGalleryExtensionAs
|
|||||||
if (asset) {
|
if (asset) {
|
||||||
return asset;
|
return asset;
|
||||||
}
|
}
|
||||||
const uri = require.toUrl('./media/defaultIcon.png');
|
const uri = DefaultIconPath;
|
||||||
return { uri, fallbackUri: uri };
|
return { uri, fallbackUri: uri };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -247,7 +247,7 @@ export interface IExtensionTipsService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export const DefaultIconPath = require.toUrl('./media/defaultIcon.png');
|
||||||
export const ExtensionsLabel = localize('extensions', "Extensions");
|
export const ExtensionsLabel = localize('extensions', "Extensions");
|
||||||
export const ExtensionsChannelId = 'extensions';
|
export const ExtensionsChannelId = 'extensions';
|
||||||
export const PreferencesLabel = localize('preferences', "Preferences");
|
export const PreferencesLabel = localize('preferences', "Preferences");
|
||||||
@@ -141,6 +141,9 @@ export interface IPathData {
|
|||||||
// file exists, if false it does not. with
|
// file exists, if false it does not. with
|
||||||
// undefined the state is unknown.
|
// undefined the state is unknown.
|
||||||
exists?: boolean;
|
exists?: boolean;
|
||||||
|
|
||||||
|
// Specifies if the file should be only be opened if it exists
|
||||||
|
openOnlyIfExists?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IOpenFileRequest {
|
export interface IOpenFileRequest {
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import { CommandsRegistry } from 'vs/platform/commands/common/commands';
|
|||||||
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
|
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
|
||||||
import { INotificationService } from 'vs/platform/notification/common/notification';
|
import { INotificationService } from 'vs/platform/notification/common/notification';
|
||||||
import { IStorageKeysSyncRegistryService } from 'vs/platform/userDataSync/common/storageKeys';
|
import { IStorageKeysSyncRegistryService } from 'vs/platform/userDataSync/common/storageKeys';
|
||||||
|
import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService';
|
||||||
|
|
||||||
interface AllowedExtension {
|
interface AllowedExtension {
|
||||||
id: string;
|
id: string;
|
||||||
@@ -25,6 +26,8 @@ interface AllowedExtension {
|
|||||||
|
|
||||||
const accountUsages = new Map<string, { [accountName: string]: string[] }>();
|
const accountUsages = new Map<string, { [accountName: string]: string[] }>();
|
||||||
|
|
||||||
|
const VSO_ALLOWED_EXTENSIONS = ['github.vscode-pull-request-github', 'github.vscode-pull-request-github-insiders', 'vscode.git'];
|
||||||
|
|
||||||
function addAccountUsage(providerId: string, accountName: string, extensionOrFeatureName: string) {
|
function addAccountUsage(providerId: string, accountName: string, extensionOrFeatureName: string) {
|
||||||
const providerAccountUsage = accountUsages.get(providerId);
|
const providerAccountUsage = accountUsages.get(providerId);
|
||||||
if (!providerAccountUsage) {
|
if (!providerAccountUsage) {
|
||||||
@@ -290,7 +293,8 @@ export class MainThreadAuthentication extends Disposable implements MainThreadAu
|
|||||||
@IDialogService private readonly dialogService: IDialogService,
|
@IDialogService private readonly dialogService: IDialogService,
|
||||||
@IStorageService private readonly storageService: IStorageService,
|
@IStorageService private readonly storageService: IStorageService,
|
||||||
@INotificationService private readonly notificationService: INotificationService,
|
@INotificationService private readonly notificationService: INotificationService,
|
||||||
@IStorageKeysSyncRegistryService private readonly storageKeysSyncRegistryService: IStorageKeysSyncRegistryService
|
@IStorageKeysSyncRegistryService private readonly storageKeysSyncRegistryService: IStorageKeysSyncRegistryService,
|
||||||
|
@IRemoteAgentService private readonly remoteAgentService: IRemoteAgentService
|
||||||
) {
|
) {
|
||||||
super();
|
super();
|
||||||
this._proxy = extHostContext.getProxy(ExtHostContext.ExtHostAuthentication);
|
this._proxy = extHostContext.getProxy(ExtHostContext.ExtHostAuthentication);
|
||||||
@@ -319,6 +323,11 @@ export class MainThreadAuthentication extends Disposable implements MainThreadAu
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const remoteConnection = this.remoteAgentService.getConnection();
|
||||||
|
if (remoteConnection && remoteConnection.remoteAuthority === 'vsonline' && VSO_ALLOWED_EXTENSIONS.includes(extensionId)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
const { choice } = await this.dialogService.show(
|
const { choice } = await this.dialogService.show(
|
||||||
Severity.Info,
|
Severity.Info,
|
||||||
nls.localize('confirmAuthenticationAccess', "The extension '{0}' wants to access the {1} account '{2}'.", extensionName, providerName, accountName),
|
nls.localize('confirmAuthenticationAccess', "The extension '{0}' wants to access the {1} account '{2}'.", extensionName, providerName, accountName),
|
||||||
|
|||||||
@@ -124,7 +124,8 @@ export class MainThreadTextEditors implements MainThreadTextEditorsShape {
|
|||||||
selection: options.selection,
|
selection: options.selection,
|
||||||
// preserve pre 1.38 behaviour to not make group active when preserveFocus: true
|
// preserve pre 1.38 behaviour to not make group active when preserveFocus: true
|
||||||
// but make sure to restore the editor to fix https://github.com/microsoft/vscode/issues/79633
|
// but make sure to restore the editor to fix https://github.com/microsoft/vscode/issues/79633
|
||||||
activation: options.preserveFocus ? EditorActivation.RESTORE : undefined
|
activation: options.preserveFocus ? EditorActivation.RESTORE : undefined,
|
||||||
|
ignoreOverrides: true
|
||||||
};
|
};
|
||||||
|
|
||||||
const input: IResourceEditorInput = {
|
const input: IResourceEditorInput = {
|
||||||
|
|||||||
@@ -610,7 +610,7 @@ namespace HotExitState {
|
|||||||
|
|
||||||
class MainThreadCustomEditorModel extends Disposable implements ICustomEditorModel, IWorkingCopy {
|
class MainThreadCustomEditorModel extends Disposable implements ICustomEditorModel, IWorkingCopy {
|
||||||
|
|
||||||
private readonly _fromBackup: boolean = false;
|
private _fromBackup: boolean = false;
|
||||||
private _hotExitState: HotExitState.State = HotExitState.Allowed;
|
private _hotExitState: HotExitState.State = HotExitState.Allowed;
|
||||||
private _backupId: string | undefined;
|
private _backupId: string | undefined;
|
||||||
|
|
||||||
@@ -808,13 +808,14 @@ class MainThreadCustomEditorModel extends Disposable implements ICustomEditorMod
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this._currentEditIndex === this._savePoint && !this._isDirtyFromContentChange) {
|
if (this._currentEditIndex === this._savePoint && !this._isDirtyFromContentChange && !this._fromBackup) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this._proxy.$revert(this._editorResource, this.viewType, CancellationToken.None);
|
this._proxy.$revert(this._editorResource, this.viewType, CancellationToken.None);
|
||||||
this.change(() => {
|
this.change(() => {
|
||||||
this._isDirtyFromContentChange = false;
|
this._isDirtyFromContentChange = false;
|
||||||
|
this._fromBackup = false;
|
||||||
this._currentEditIndex = this._savePoint;
|
this._currentEditIndex = this._savePoint;
|
||||||
this.spliceEdits();
|
this.spliceEdits();
|
||||||
});
|
});
|
||||||
@@ -837,6 +838,7 @@ class MainThreadCustomEditorModel extends Disposable implements ICustomEditorMod
|
|||||||
this.change(() => {
|
this.change(() => {
|
||||||
this._isDirtyFromContentChange = false;
|
this._isDirtyFromContentChange = false;
|
||||||
this._savePoint = this._currentEditIndex;
|
this._savePoint = this._currentEditIndex;
|
||||||
|
this._fromBackup = false;
|
||||||
});
|
});
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -198,8 +198,10 @@ export class ExtHostTerminalService extends BaseExtHostTerminalService {
|
|||||||
);
|
);
|
||||||
|
|
||||||
// Apply extension environment variable collections to the environment
|
// Apply extension environment variable collections to the environment
|
||||||
const mergedCollection = new MergedEnvironmentVariableCollection(this._environmentVariableCollections);
|
if (!shellLaunchConfig.strictEnv) {
|
||||||
mergedCollection.applyToProcessEnvironment(env);
|
const mergedCollection = new MergedEnvironmentVariableCollection(this._environmentVariableCollections);
|
||||||
|
mergedCollection.applyToProcessEnvironment(env);
|
||||||
|
}
|
||||||
|
|
||||||
this._proxy.$sendResolvedLaunchConfig(id, shellLaunchConfig);
|
this._proxy.$sendResolvedLaunchConfig(id, shellLaunchConfig);
|
||||||
// Fork the process and listen for messages
|
// Fork the process and listen for messages
|
||||||
|
|||||||
@@ -576,6 +576,15 @@ export class CompositeDragAndDropObserver extends Disposable {
|
|||||||
private constructor() {
|
private constructor() {
|
||||||
super();
|
super();
|
||||||
this.transferData = LocalSelectionTransfer.getInstance<DraggedCompositeIdentifier | DraggedViewIdentifier>();
|
this.transferData = LocalSelectionTransfer.getInstance<DraggedCompositeIdentifier | DraggedViewIdentifier>();
|
||||||
|
|
||||||
|
this._register(this._onDragEnd.event(e => {
|
||||||
|
const id = e.dragAndDropData.getData().id;
|
||||||
|
const type = e.dragAndDropData.getData().type;
|
||||||
|
const data = this.readDragData(type);
|
||||||
|
if (data && data.getData().id === id) {
|
||||||
|
this.transferData.clearData(type === 'view' ? DraggedViewIdentifier.prototype : DraggedCompositeIdentifier.prototype);
|
||||||
|
}
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
private readDragData(type: ViewType): CompositeDragAndDropData | undefined {
|
private readDragData(type: ViewType): CompositeDragAndDropData | undefined {
|
||||||
if (this.transferData.hasData(type === 'view' ? DraggedViewIdentifier.prototype : DraggedCompositeIdentifier.prototype)) {
|
if (this.transferData.hasData(type === 'view' ? DraggedViewIdentifier.prototype : DraggedCompositeIdentifier.prototype)) {
|
||||||
@@ -658,12 +667,8 @@ export class CompositeDragAndDropObserver extends Disposable {
|
|||||||
}));
|
}));
|
||||||
disposableStore.add(new DragAndDropObserver(element, {
|
disposableStore.add(new DragAndDropObserver(element, {
|
||||||
onDragEnd: e => {
|
onDragEnd: e => {
|
||||||
const { id, type } = draggedItemProvider();
|
const { type } = draggedItemProvider();
|
||||||
|
|
||||||
const data = this.readDragData(type);
|
const data = this.readDragData(type);
|
||||||
if (data && data.getData().id === id) {
|
|
||||||
this.transferData.clearData(type === 'view' ? DraggedViewIdentifier.prototype : DraggedCompositeIdentifier.prototype);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!data) {
|
if (!data) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ import { LineNumbersType } from 'vs/editor/common/config/editorOptions';
|
|||||||
import { ActivitybarPart } from 'vs/workbench/browser/parts/activitybar/activitybarPart';
|
import { ActivitybarPart } from 'vs/workbench/browser/parts/activitybar/activitybarPart';
|
||||||
import { URI } from 'vs/base/common/uri';
|
import { URI } from 'vs/base/common/uri';
|
||||||
|
|
||||||
enum Settings {
|
export enum Settings {
|
||||||
ACTIVITYBAR_VISIBLE = 'workbench.activityBar.visible',
|
ACTIVITYBAR_VISIBLE = 'workbench.activityBar.visible',
|
||||||
STATUSBAR_VISIBLE = 'workbench.statusBar.visible',
|
STATUSBAR_VISIBLE = 'workbench.statusBar.visible',
|
||||||
|
|
||||||
@@ -52,6 +52,7 @@ enum Settings {
|
|||||||
PANEL_POSITION = 'workbench.panel.defaultLocation',
|
PANEL_POSITION = 'workbench.panel.defaultLocation',
|
||||||
|
|
||||||
ZEN_MODE_RESTORE = 'zenMode.restore',
|
ZEN_MODE_RESTORE = 'zenMode.restore',
|
||||||
|
WORKSPACE_FIRST_OPEN = 'workbench.workspaceFirstOpen'
|
||||||
}
|
}
|
||||||
|
|
||||||
enum Storage {
|
enum Storage {
|
||||||
@@ -547,7 +548,12 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi
|
|||||||
|
|
||||||
private applyDefaultLayout(environmentService: IWorkbenchEnvironmentService, storageService: IStorageService) {
|
private applyDefaultLayout(environmentService: IWorkbenchEnvironmentService, storageService: IStorageService) {
|
||||||
const defaultLayout = environmentService.options?.defaultLayout;
|
const defaultLayout = environmentService.options?.defaultLayout;
|
||||||
if (!defaultLayout || !defaultLayout.firstRun) {
|
if (!defaultLayout) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const firstOpen = storageService.getBoolean(Settings.WORKSPACE_FIRST_OPEN, StorageScope.WORKSPACE);
|
||||||
|
if (!firstOpen) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -752,14 +758,25 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi
|
|||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private _openedDefaultEditors: boolean = false;
|
||||||
|
get openedDefaultEditors() {
|
||||||
|
return this._openedDefaultEditors;
|
||||||
|
}
|
||||||
|
|
||||||
private getInitialFilesToOpen(): { filesToOpenOrCreate?: IPath[], filesToDiff?: IPath[] } | undefined {
|
private getInitialFilesToOpen(): { filesToOpenOrCreate?: IPath[], filesToDiff?: IPath[] } | undefined {
|
||||||
const defaultLayout = this.environmentService.options?.defaultLayout;
|
const defaultLayout = this.environmentService.options?.defaultLayout;
|
||||||
if (defaultLayout?.firstRun && defaultLayout?.editors?.length) {
|
if (defaultLayout?.editors?.length && this.storageService.getBoolean(Settings.WORKSPACE_FIRST_OPEN, StorageScope.WORKSPACE)) {
|
||||||
//
|
this._openedDefaultEditors = true;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
filesToOpenOrCreate: defaultLayout.editors
|
filesToOpenOrCreate: defaultLayout.editors
|
||||||
.sort((a, b) => (a.active ? -1 : 1) - (b.active ? -1 : 1))
|
.map<IPath>(f => {
|
||||||
.map(f => ({ fileUri: URI.file(f.path).with({ scheme: f.scheme }), inactive: !f.active }))
|
// Support the old path+scheme api until embedders can migrate
|
||||||
|
if ('path' in f && 'scheme' in f) {
|
||||||
|
return { fileUri: URI.file((f as any).path).with({ scheme: (f as any).scheme }) };
|
||||||
|
}
|
||||||
|
return { fileUri: URI.revive(f.uri), openOnlyIfExists: f.openOnlyIfExists };
|
||||||
|
})
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.1 KiB |
@@ -22,7 +22,7 @@ import { ActivityAction, ActivityActionViewItem, ICompositeBar, ICompositeBarCol
|
|||||||
import { ViewletDescriptor } from 'vs/workbench/browser/viewlet';
|
import { ViewletDescriptor } from 'vs/workbench/browser/viewlet';
|
||||||
import { Extensions as ActionExtensions, IWorkbenchActionRegistry } from 'vs/workbench/common/actions';
|
import { Extensions as ActionExtensions, IWorkbenchActionRegistry } from 'vs/workbench/common/actions';
|
||||||
import { IActivity } from 'vs/workbench/common/activity';
|
import { IActivity } from 'vs/workbench/common/activity';
|
||||||
import { ACTIVITY_BAR_FOREGROUND, ACTIVITY_BAR_ACTIVE_BORDER, ACTIVITY_BAR_ACTIVE_FOCUS_BORDER, ACTIVITY_BAR_ACTIVE_BACKGROUND } from 'vs/workbench/common/theme';
|
import { ACTIVITY_BAR_FOREGROUND, ACTIVITY_BAR_ACTIVE_BORDER, ACTIVITY_BAR_ACTIVE_FOCUS_BORDER, ACTIVITY_BAR_ACTIVE_BACKGROUND, ACTIVITY_BAR_BACKGROUND } from 'vs/workbench/common/theme';
|
||||||
import { IActivityBarService } from 'vs/workbench/services/activityBar/browser/activityBarService';
|
import { IActivityBarService } from 'vs/workbench/services/activityBar/browser/activityBarService';
|
||||||
import { IWorkbenchLayoutService, Parts } from 'vs/workbench/services/layout/browser/layoutService';
|
import { IWorkbenchLayoutService, Parts } from 'vs/workbench/services/layout/browser/layoutService';
|
||||||
import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet';
|
import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet';
|
||||||
@@ -362,35 +362,43 @@ export class HomeAction extends Action {
|
|||||||
}
|
}
|
||||||
|
|
||||||
registerThemingParticipant((theme: IColorTheme, collector: ICssStyleCollector) => {
|
registerThemingParticipant((theme: IColorTheme, collector: ICssStyleCollector) => {
|
||||||
|
const activityBarBackgroundColor = theme.getColor(ACTIVITY_BAR_BACKGROUND);
|
||||||
|
if (activityBarBackgroundColor) {
|
||||||
|
collector.addRule(`
|
||||||
|
.monaco-workbench .activitybar > .content > .home-bar > .home-bar-icon-badge {
|
||||||
|
background-color: ${activityBarBackgroundColor};
|
||||||
|
}
|
||||||
|
`);
|
||||||
|
}
|
||||||
|
|
||||||
const activeForegroundColor = theme.getColor(ACTIVITY_BAR_FOREGROUND);
|
const activityBarForegroundColor = theme.getColor(ACTIVITY_BAR_FOREGROUND);
|
||||||
if (activeForegroundColor) {
|
if (activityBarForegroundColor) {
|
||||||
collector.addRule(`
|
collector.addRule(`
|
||||||
.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item.active .action-label:not(.codicon),
|
.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item.active .action-label:not(.codicon),
|
||||||
.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item:focus .action-label:not(.codicon),
|
.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item:focus .action-label:not(.codicon),
|
||||||
.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item:hover .action-label:not(.codicon) {
|
.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item:hover .action-label:not(.codicon) {
|
||||||
background-color: ${activeForegroundColor} !important;
|
background-color: ${activityBarForegroundColor} !important;
|
||||||
}
|
}
|
||||||
.monaco-workbench .activitybar > .content .home-bar > .monaco-action-bar .action-item .action-label.codicon,
|
.monaco-workbench .activitybar > .content .home-bar > .monaco-action-bar .action-item .action-label.codicon,
|
||||||
.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item.active .action-label.codicon,
|
.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item.active .action-label.codicon,
|
||||||
.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item:focus .action-label.codicon,
|
.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item:focus .action-label.codicon,
|
||||||
.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item:hover .action-label.codicon {
|
.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item:hover .action-label.codicon {
|
||||||
color: ${activeForegroundColor} !important;
|
color: ${activityBarForegroundColor} !important;
|
||||||
}
|
}
|
||||||
`);
|
`);
|
||||||
}
|
}
|
||||||
|
|
||||||
const activeBorderColor = theme.getColor(ACTIVITY_BAR_ACTIVE_BORDER);
|
const activityBarActiveBorderColor = theme.getColor(ACTIVITY_BAR_ACTIVE_BORDER);
|
||||||
if (activeBorderColor) {
|
if (activityBarActiveBorderColor) {
|
||||||
collector.addRule(`
|
collector.addRule(`
|
||||||
.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item.checked .active-item-indicator:before {
|
.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item.checked .active-item-indicator:before {
|
||||||
border-left-color: ${activeBorderColor};
|
border-left-color: ${activityBarActiveBorderColor};
|
||||||
}
|
}
|
||||||
`);
|
`);
|
||||||
}
|
}
|
||||||
|
|
||||||
const activeFocusBorderColor = theme.getColor(ACTIVITY_BAR_ACTIVE_FOCUS_BORDER);
|
const activityBarActiveFocusBorderColor = theme.getColor(ACTIVITY_BAR_ACTIVE_FOCUS_BORDER);
|
||||||
if (activeFocusBorderColor) {
|
if (activityBarActiveFocusBorderColor) {
|
||||||
collector.addRule(`
|
collector.addRule(`
|
||||||
.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item.checked:focus::before {
|
.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item.checked:focus::before {
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
@@ -398,17 +406,17 @@ registerThemingParticipant((theme: IColorTheme, collector: ICssStyleCollector) =
|
|||||||
|
|
||||||
.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item.checked:focus .active-item-indicator:before {
|
.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item.checked:focus .active-item-indicator:before {
|
||||||
visibility: visible;
|
visibility: visible;
|
||||||
border-left-color: ${activeFocusBorderColor};
|
border-left-color: ${activityBarActiveFocusBorderColor};
|
||||||
}
|
}
|
||||||
`);
|
`);
|
||||||
}
|
}
|
||||||
|
|
||||||
const activeBackgroundColor = theme.getColor(ACTIVITY_BAR_ACTIVE_BACKGROUND);
|
const activityBarActiveBackgroundColor = theme.getColor(ACTIVITY_BAR_ACTIVE_BACKGROUND);
|
||||||
if (activeBackgroundColor) {
|
if (activityBarActiveBackgroundColor) {
|
||||||
collector.addRule(`
|
collector.addRule(`
|
||||||
.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item.checked .active-item-indicator {
|
.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item.checked .active-item-indicator {
|
||||||
z-index: 0;
|
z-index: 0;
|
||||||
background-color: ${activeBackgroundColor};
|
background-color: ${activityBarActiveBackgroundColor};
|
||||||
}
|
}
|
||||||
`);
|
`);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -366,6 +366,10 @@ export class ActivitybarPart extends Part implements IActivityBarService {
|
|||||||
animated: false
|
animated: false
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
const homeBarIconBadge = document.createElement('div');
|
||||||
|
addClass(homeBarIconBadge, 'home-bar-icon-badge');
|
||||||
|
this.homeBarContainer.appendChild(homeBarIconBadge);
|
||||||
|
|
||||||
this.homeBar.push(this._register(this.instantiationService.createInstance(HomeAction, command, title, icon)), { icon: true, label: false });
|
this.homeBar.push(this._register(this.instantiationService.createInstance(HomeAction, command, title, icon)), { icon: true, label: false });
|
||||||
|
|
||||||
const content = assertIsDefined(this.content);
|
const content = assertIsDefined(this.content);
|
||||||
@@ -424,7 +428,7 @@ export class ActivitybarPart extends Part implements IActivityBarService {
|
|||||||
this.globalActivityAction = new ActivityAction({
|
this.globalActivityAction = new ActivityAction({
|
||||||
id: 'workbench.actions.manage',
|
id: 'workbench.actions.manage',
|
||||||
name: nls.localize('manage', "Manage"),
|
name: nls.localize('manage', "Manage"),
|
||||||
cssClass: Codicon.gear.classNames
|
cssClass: Codicon.settingsGear.classNames
|
||||||
});
|
});
|
||||||
|
|
||||||
if (getUserDataSyncStore(this.productService, this.configurationService)) {
|
if (getUserDataSyncStore(this.productService, this.configurationService)) {
|
||||||
|
|||||||
@@ -26,6 +26,7 @@
|
|||||||
/** Home Bar */
|
/** Home Bar */
|
||||||
|
|
||||||
.monaco-workbench .activitybar > .content > .home-bar {
|
.monaco-workbench .activitybar > .content > .home-bar {
|
||||||
|
position: relative;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 48px;
|
height: 48px;
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -34,6 +35,22 @@
|
|||||||
order: -1;
|
order: -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.monaco-workbench .activitybar > .content > .home-bar > .home-bar-icon-badge {
|
||||||
|
position: absolute;
|
||||||
|
right: 10px;
|
||||||
|
bottom: 9px;
|
||||||
|
width: 14px;
|
||||||
|
height: 14px;
|
||||||
|
z-index: 1; /* on top of home indicator */
|
||||||
|
background-image: url('../../../media/code-icon.svg');
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center center;
|
||||||
|
background-size: 14px;
|
||||||
|
pointer-events: none;
|
||||||
|
border-top: 2px solid transparent;
|
||||||
|
border-left: 2px solid transparent;
|
||||||
|
}
|
||||||
|
|
||||||
/** Viewlet Switcher */
|
/** Viewlet Switcher */
|
||||||
|
|
||||||
.monaco-workbench .activitybar > .content .monaco-action-bar {
|
.monaco-workbench .activitybar > .content .monaco-action-bar {
|
||||||
|
|||||||
@@ -85,7 +85,7 @@
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
position: relative;
|
position: relative;
|
||||||
z-index: 3000;
|
z-index: 3000;
|
||||||
background-image: url('code-icon.svg');
|
background-image: url('../../../media/code-icon.svg');
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-position: center center;
|
background-position: center center;
|
||||||
background-size: 16px;
|
background-size: 16px;
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ import { FileUserDataProvider } from 'vs/workbench/services/userData/common/file
|
|||||||
import { BACKUPS } from 'vs/platform/environment/common/environment';
|
import { BACKUPS } from 'vs/platform/environment/common/environment';
|
||||||
import { joinPath } from 'vs/base/common/resources';
|
import { joinPath } from 'vs/base/common/resources';
|
||||||
import { BrowserStorageService } from 'vs/platform/storage/browser/storageService';
|
import { BrowserStorageService } from 'vs/platform/storage/browser/storageService';
|
||||||
import { IStorageService } from 'vs/platform/storage/common/storage';
|
import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';
|
||||||
import { getThemeTypeSelector, DARK, HIGH_CONTRAST, LIGHT } from 'vs/platform/theme/common/themeService';
|
import { getThemeTypeSelector, DARK, HIGH_CONTRAST, LIGHT } from 'vs/platform/theme/common/themeService';
|
||||||
import { registerWindowDriver } from 'vs/platform/driver/browser/driver';
|
import { registerWindowDriver } from 'vs/platform/driver/browser/driver';
|
||||||
import { BufferLogService } from 'vs/platform/log/common/bufferLog';
|
import { BufferLogService } from 'vs/platform/log/common/bufferLog';
|
||||||
@@ -52,6 +52,7 @@ import { coalesce } from 'vs/base/common/arrays';
|
|||||||
import { InMemoryFileSystemProvider } from 'vs/platform/files/common/inMemoryFilesystemProvider';
|
import { InMemoryFileSystemProvider } from 'vs/platform/files/common/inMemoryFilesystemProvider';
|
||||||
import { WebResourceIdentityService, IResourceIdentityService } from 'vs/platform/resource/common/resourceIdentityService';
|
import { WebResourceIdentityService, IResourceIdentityService } from 'vs/platform/resource/common/resourceIdentityService';
|
||||||
import { ICommandService } from 'vs/platform/commands/common/commands';
|
import { ICommandService } from 'vs/platform/commands/common/commands';
|
||||||
|
import { Settings } from 'vs/workbench/browser/layout';
|
||||||
|
|
||||||
class BrowserMain extends Disposable {
|
class BrowserMain extends Disposable {
|
||||||
|
|
||||||
@@ -65,12 +66,12 @@ class BrowserMain extends Disposable {
|
|||||||
async open(): Promise<IWorkbench> {
|
async open(): Promise<IWorkbench> {
|
||||||
const services = await this.initServices();
|
const services = await this.initServices();
|
||||||
|
|
||||||
// const defaultLayout = this.configuration?.defaultLayout;
|
const firstOpen = services.storageService.getBoolean(Settings.WORKSPACE_FIRST_OPEN, StorageScope.WORKSPACE);
|
||||||
// if (defaultLayout) {
|
if (firstOpen === undefined || firstOpen) {
|
||||||
// defaultLayout.firstRun = services.storageService.get(firstSessionDateStorageKey, StorageScope.GLOBAL) === undefined;
|
services.storageService.store(Settings.WORKSPACE_FIRST_OPEN, !(firstOpen ?? false), StorageScope.WORKSPACE);
|
||||||
// }
|
}
|
||||||
|
|
||||||
await domContentLoaded();
|
{ await domContentLoaded(); }
|
||||||
mark('willStartWorkbench');
|
mark('willStartWorkbench');
|
||||||
|
|
||||||
// Base Theme
|
// Base Theme
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ import { workbenchConfigurationNodeBase } from 'vs/workbench/common/configuratio
|
|||||||
},
|
},
|
||||||
'workbench.editor.showIcons': {
|
'workbench.editor.showIcons': {
|
||||||
'type': 'boolean',
|
'type': 'boolean',
|
||||||
'description': nls.localize('showIcons', "Controls whether opened editors should show with an icon or not. This requires an file icon theme to be enabled as well."),
|
'description': nls.localize('showIcons', "Controls whether opened editors should show with an icon or not. This requires a file icon theme to be enabled as well."),
|
||||||
'default': true
|
'default': true
|
||||||
},
|
},
|
||||||
'workbench.editor.enablePreview': {
|
'workbench.editor.enablePreview': {
|
||||||
|
|||||||
@@ -1481,6 +1481,9 @@ export async function pathsToEditors(paths: IPathData[] | undefined, fileService
|
|||||||
}
|
}
|
||||||
|
|
||||||
const exists = (typeof path.exists === 'boolean') ? path.exists : await fileService.exists(resource);
|
const exists = (typeof path.exists === 'boolean') ? path.exists : await fileService.exists(resource);
|
||||||
|
if (!exists && path.openOnlyIfExists) {
|
||||||
|
return undefined; // {{SQL CARBON EDIT}} @anthonydresser revert after strictnullchecks
|
||||||
|
}
|
||||||
|
|
||||||
const options: ITextEditorOptions = (exists && typeof path.lineNumber === 'number') ? {
|
const options: ITextEditorOptions = (exists && typeof path.lineNumber === 'number') ? {
|
||||||
selection: {
|
selection: {
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ export class NativeBackupTracker extends BackupTracker implements IWorkbenchCont
|
|||||||
|
|
||||||
// we ran a backup but received an error that we show to the user
|
// we ran a backup but received an error that we show to the user
|
||||||
if (backupError) {
|
if (backupError) {
|
||||||
this.showErrorDialog(localize('backupTrackerBackupFailed', "One or many editors that are dirty could not be saved to the backup location."), backupError);
|
this.showErrorDialog(localize('backupTrackerBackupFailed', "One or more dirty editors could not be saved to the back up location."), backupError);
|
||||||
|
|
||||||
return true; // veto (the backup failed)
|
return true; // veto (the backup failed)
|
||||||
}
|
}
|
||||||
@@ -101,7 +101,7 @@ export class NativeBackupTracker extends BackupTracker implements IWorkbenchCont
|
|||||||
try {
|
try {
|
||||||
return await this.confirmBeforeShutdown(workingCopies.filter(workingCopy => backups.indexOf(workingCopy) === -1));
|
return await this.confirmBeforeShutdown(workingCopies.filter(workingCopy => backups.indexOf(workingCopy) === -1));
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
this.showErrorDialog(localize('backupTrackerConfirmFailed', "One or many editors that are dirty could not be saved or reverted."), error);
|
this.showErrorDialog(localize('backupTrackerConfirmFailed', "One or more dirty editors could not be saved or reverted."), error);
|
||||||
|
|
||||||
return true; // veto (save or revert failed)
|
return true; // veto (save or revert failed)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -119,6 +119,10 @@ export class CustomEditorInput extends LazilyResolvedWebviewEditorInput {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public isSaving(): boolean {
|
public isSaving(): boolean {
|
||||||
|
if (this.isUntitled()) {
|
||||||
|
return false; // untitled is never saving automatically
|
||||||
|
}
|
||||||
|
|
||||||
if (!this.isDirty()) {
|
if (!this.isDirty()) {
|
||||||
return false; // the editor needs to be dirty for being saved
|
return false; // the editor needs to be dirty for being saved
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
|||||||
// {{SQL CARBON EDIT}}
|
// {{SQL CARBON EDIT}}
|
||||||
import {
|
import {
|
||||||
IExtensionManagementService, IExtensionGalleryService, ILocalExtension, IGalleryExtension, IQueryOptions,
|
IExtensionManagementService, IExtensionGalleryService, ILocalExtension, IGalleryExtension, IQueryOptions,
|
||||||
InstallExtensionEvent, DidInstallExtensionEvent, DidUninstallExtensionEvent, IExtensionIdentifier, InstallOperation
|
InstallExtensionEvent, DidInstallExtensionEvent, DidUninstallExtensionEvent, IExtensionIdentifier, InstallOperation, DefaultIconPath
|
||||||
} from 'vs/platform/extensionManagement/common/extensionManagement';
|
} from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||||
import { IWorkbenchExtensionEnablementService, EnablementState, IExtensionManagementServerService, IExtensionManagementServer } from 'vs/workbench/services/extensionManagement/common/extensionManagement';
|
import { IWorkbenchExtensionEnablementService, EnablementState, IExtensionManagementServerService, IExtensionManagementServer } from 'vs/workbench/services/extensionManagement/common/extensionManagement';
|
||||||
import { getGalleryExtensionTelemetryData, getLocalExtensionTelemetryData, areSameExtensions, getMaliciousExtensionsSet, groupByExtension, ExtensionIdentifierWithVersion } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
|
import { getGalleryExtensionTelemetryData, getLocalExtensionTelemetryData, areSameExtensions, getMaliciousExtensionsSet, groupByExtension, ExtensionIdentifierWithVersion } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
|
||||||
@@ -172,7 +172,7 @@ class Extension implements IExtension {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return require.toUrl('./media/defaultIcon.png');
|
return DefaultIconPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
get repository(): string | undefined {
|
get repository(): string | undefined {
|
||||||
|
|||||||
@@ -205,7 +205,7 @@ configurationRegistry.registerConfiguration({
|
|||||||
'properties': {
|
'properties': {
|
||||||
[FILES_EXCLUDE_CONFIG]: {
|
[FILES_EXCLUDE_CONFIG]: {
|
||||||
'type': 'object',
|
'type': 'object',
|
||||||
'markdownDescription': nls.localize('exclude', "Configure glob patterns for excluding files and folders. For example, the files explorer decides which files and folders to show or hide based on this setting. Refer to the `#search.exclude#` setting to define search specific excludes. Read more about glob patterns [here](https://code.visualstudio.com/docs/editor/codebasics#_advanced-search-options)."),
|
'markdownDescription': nls.localize('exclude', "Configure glob patterns for excluding files and folders. For example, the file Explorer decides which files and folders to show or hide based on this setting. Refer to the `#search.exclude#` setting to define search specific excludes. Read more about glob patterns [here](https://code.visualstudio.com/docs/editor/codebasics#_advanced-search-options)."),
|
||||||
'default': { '**/.git': true, '**/.svn': true, '**/.hg': true, '**/CVS': true, '**/.DS_Store': true },
|
'default': { '**/.git': true, '**/.svn': true, '**/.hg': true, '**/CVS': true, '**/.DS_Store': true },
|
||||||
'scope': ConfigurationScope.RESOURCE,
|
'scope': ConfigurationScope.RESOURCE,
|
||||||
'additionalProperties': {
|
'additionalProperties': {
|
||||||
@@ -321,10 +321,10 @@ configurationRegistry.registerConfiguration({
|
|||||||
'markdownDescription': nls.localize('maxMemoryForLargeFilesMB', "Controls the memory available to Azure Data Studio after restart when trying to open large files. Same effect as specifying `--max-memory=NEWSIZE` on the command line."), // {{SQL CARBON EDIT}} Change product name to ADS
|
'markdownDescription': nls.localize('maxMemoryForLargeFilesMB', "Controls the memory available to Azure Data Studio after restart when trying to open large files. Same effect as specifying `--max-memory=NEWSIZE` on the command line."), // {{SQL CARBON EDIT}} Change product name to ADS
|
||||||
included: platform.isNative
|
included: platform.isNative
|
||||||
},
|
},
|
||||||
'files.maxMemoryForClosedFilesUndoStackMB': {
|
'files.restoreUndoStack': {
|
||||||
'type': 'number',
|
'type': 'boolean',
|
||||||
'default': 20,
|
'description': nls.localize('files.restoreUndoStack', "Restore the undo stack when a file is reopened."),
|
||||||
'markdownDescription': nls.localize('maxMemoryForClosedFilesUndoStackMB', "Controls the maximum ammount of memory the undo stack should hold for files that have been closed.")
|
'default': true
|
||||||
},
|
},
|
||||||
'files.saveConflictResolution': {
|
'files.saveConflictResolution': {
|
||||||
'type': 'string',
|
'type': 'string',
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
overflow: visible !important;
|
overflow: visible !important;
|
||||||
} */
|
} */
|
||||||
|
|
||||||
.monaco-workbench .part.editor > .content .notebook-editor .cell-list-container .monaco-editor-hover {
|
.monaco-workbench .part.editor > .content .notebook-editor .cell-list-container .overflowingContentWidgets > div {
|
||||||
z-index: 600 !important; /* @rebornix: larger than the editor title bar */
|
z-index: 600 !important; /* @rebornix: larger than the editor title bar */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -157,7 +157,15 @@ export class NotebookEditorInput extends EditorInput {
|
|||||||
return this.textModel?.isDirty() || false;
|
return this.textModel?.isDirty() || false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isReadonly() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public isSaving(): boolean {
|
public isSaving(): boolean {
|
||||||
|
if (this.isUntitled()) {
|
||||||
|
return false; // untitled is never saving automatically
|
||||||
|
}
|
||||||
|
|
||||||
if (!this.isDirty()) {
|
if (!this.isDirty()) {
|
||||||
return false; // the editor needs to be dirty for being saved
|
return false; // the editor needs to be dirty for being saved
|
||||||
}
|
}
|
||||||
@@ -210,7 +218,7 @@ export class NotebookEditorInput extends EditorInput {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async backup(): Promise<IWorkingCopyBackup> {
|
async backup(): Promise<IWorkingCopyBackup> {
|
||||||
return {};
|
throw new Error();
|
||||||
}
|
}
|
||||||
|
|
||||||
matches(otherInput: unknown): boolean {
|
matches(otherInput: unknown): boolean {
|
||||||
|
|||||||
@@ -233,7 +233,7 @@ abstract class AbstractCellRenderer {
|
|||||||
addMarkdownCell.tabIndex = 0;
|
addMarkdownCell.tabIndex = 0;
|
||||||
const insertMarkdownBelow = this.instantiationService.createInstance(InsertMarkdownCellAction);
|
const insertMarkdownBelow = this.instantiationService.createInstance(InsertMarkdownCellAction);
|
||||||
disposables.add(DOM.addDisposableListener(addMarkdownCell, DOM.EventType.CLICK, e => {
|
disposables.add(DOM.addDisposableListener(addMarkdownCell, DOM.EventType.CLICK, e => {
|
||||||
this.actionRunner.run(insertMarkdownBelow, context);
|
this.actionRunner.run(insertMarkdownBelow, toolbarContext);
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
@@ -242,7 +242,7 @@ abstract class AbstractCellRenderer {
|
|||||||
if ((event.equals(KeyCode.Enter) || event.equals(KeyCode.Space))) {
|
if ((event.equals(KeyCode.Enter) || event.equals(KeyCode.Space))) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
this.actionRunner.run(insertMarkdownBelow, context);
|
this.actionRunner.run(insertMarkdownBelow, toolbarContext);
|
||||||
}
|
}
|
||||||
})));
|
})));
|
||||||
|
|
||||||
|
|||||||
@@ -40,7 +40,10 @@ export class CodeCell extends Disposable {
|
|||||||
const width = this.viewCell.layoutInfo.editorWidth;
|
const width = this.viewCell.layoutInfo.editorWidth;
|
||||||
const lineNum = this.viewCell.lineCount;
|
const lineNum = this.viewCell.lineCount;
|
||||||
const lineHeight = this.viewCell.layoutInfo.fontInfo?.lineHeight || 17;
|
const lineHeight = this.viewCell.layoutInfo.fontInfo?.lineHeight || 17;
|
||||||
const totalHeight = lineNum * lineHeight + EDITOR_TOP_PADDING + EDITOR_BOTTOM_PADDING;
|
const totalHeight = this.viewCell.layoutInfo.editorHeight === 0
|
||||||
|
? lineNum * lineHeight + EDITOR_TOP_PADDING + EDITOR_BOTTOM_PADDING
|
||||||
|
: this.viewCell.layoutInfo.editorHeight;
|
||||||
|
|
||||||
this.layoutEditor(
|
this.layoutEditor(
|
||||||
{
|
{
|
||||||
width: width,
|
width: width,
|
||||||
|
|||||||
@@ -173,8 +173,7 @@ export class CodeCellViewModel extends BaseCellViewModel implements ICellViewMod
|
|||||||
|
|
||||||
save() {
|
save() {
|
||||||
if (this._textModel && !this._textModel.isDisposed() && this.editState === CellEditState.Editing) {
|
if (this._textModel && !this._textModel.isDisposed() && this.editState === CellEditState.Editing) {
|
||||||
let cnt = this._textModel.getLineCount();
|
this.model.source = this._textModel.getLinesContent();
|
||||||
this.model.source = this._textModel.getLinesContent().map((str, index) => str + (index !== cnt - 1 ? '\n' : ''));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -185,6 +184,7 @@ export class CodeCellViewModel extends BaseCellViewModel implements ICellViewMod
|
|||||||
this._buffer = this._textModel.getTextBuffer();
|
this._buffer = this._textModel.getTextBuffer();
|
||||||
this._register(ref);
|
this._register(ref);
|
||||||
this._register(this._textModel.onDidChangeContent(() => {
|
this._register(this._textModel.onDidChangeContent(() => {
|
||||||
|
this.editState = CellEditState.Editing;
|
||||||
this.model.contentChange();
|
this.model.contentChange();
|
||||||
this._onDidChangeState.fire({ contentChanged: true });
|
this._onDidChangeState.fire({ contentChanged: true });
|
||||||
}));
|
}));
|
||||||
|
|||||||
@@ -808,7 +808,7 @@ configurationRegistry.registerConfiguration({
|
|||||||
'search.seedOnFocus': {
|
'search.seedOnFocus': {
|
||||||
type: 'boolean',
|
type: 'boolean',
|
||||||
default: false,
|
default: false,
|
||||||
description: nls.localize('search.seedOnFocus', "Update workspace seach query to the editor's selected text when focusing the search view. This happens either on click or when triggering the `workbench.views.search.focus` command.")
|
description: nls.localize('search.seedOnFocus', "Update workspace search query to the editor's selected text when focusing the search view. This happens either on click or when triggering the `workbench.views.search.focus` command.")
|
||||||
},
|
},
|
||||||
'search.searchOnTypeDebouncePeriod': {
|
'search.searchOnTypeDebouncePeriod': {
|
||||||
type: 'number',
|
type: 'number',
|
||||||
|
|||||||
@@ -208,11 +208,11 @@ registry.registerWorkbenchAction(
|
|||||||
'Search Editor: Open New Search Editor to Side', category);
|
'Search Editor: Open New Search Editor to Side', category);
|
||||||
|
|
||||||
registry.registerWorkbenchAction(SyncActionDescriptor.from(RerunSearchEditorSearchAction,
|
registry.registerWorkbenchAction(SyncActionDescriptor.from(RerunSearchEditorSearchAction,
|
||||||
{ mac: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_R } }, ContextKeyExpr.and(SearchEditorConstants.InSearchEditor)),
|
{ mac: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_R } }),
|
||||||
'Search Editor: Search Again', category, SearchEditorConstants.InSearchEditor);
|
'Search Editor: Search Again', category, SearchEditorConstants.InSearchEditor);
|
||||||
|
|
||||||
registry.registerWorkbenchAction(SyncActionDescriptor.from(FocusQueryEditorWidgetAction,
|
registry.registerWorkbenchAction(SyncActionDescriptor.from(FocusQueryEditorWidgetAction,
|
||||||
{ primary: KeyCode.Escape }, ContextKeyExpr.and(SearchEditorConstants.InSearchEditor)),
|
{ primary: KeyCode.Escape }),
|
||||||
'Search Editor: Focus Query Editor Widget', category, SearchEditorConstants.InSearchEditor);
|
'Search Editor: Focus Query Editor Widget', category, SearchEditorConstants.InSearchEditor);
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
|
|||||||
@@ -248,10 +248,7 @@ export class SearchEditor extends BaseTextEditor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
focusSearchInput() {
|
focusSearchInput() {
|
||||||
const viewState = this.loadViewState();
|
this.queryEditorWidget.searchInput.focus();
|
||||||
if (viewState && viewState.focused === 'editor') {
|
|
||||||
this.queryEditorWidget.searchInput.focus();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
focusNextInput() {
|
focusNextInput() {
|
||||||
|
|||||||
@@ -161,7 +161,7 @@ export class RerunSearchEditorSearchAction extends Action {
|
|||||||
|
|
||||||
export class FocusQueryEditorWidgetAction extends Action {
|
export class FocusQueryEditorWidgetAction extends Action {
|
||||||
static readonly ID: string = Constants.FocusQueryEditorWidgetCommandId;
|
static readonly ID: string = Constants.FocusQueryEditorWidgetCommandId;
|
||||||
static readonly LABEL = localize('search.action.focusQueryEditorWidget', "Focus Query Editor Widget");
|
static readonly LABEL = localize('search.action.focusQueryEditorWidget', "Focus Search Editor Input");
|
||||||
|
|
||||||
constructor(id: string, label: string,
|
constructor(id: string, label: string,
|
||||||
@IEditorService private readonly editorService: IEditorService,
|
@IEditorService private readonly editorService: IEditorService,
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import { IWorkbenchContributionsRegistry, IWorkbenchContribution, Extensions as
|
|||||||
import { Registry } from 'vs/platform/registry/common/platform';
|
import { Registry } from 'vs/platform/registry/common/platform';
|
||||||
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
||||||
import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';
|
import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';
|
||||||
|
import { IStorageKeysSyncRegistryService } from 'vs/platform/userDataSync/common/storageKeys';
|
||||||
import { ISurveyData, IProductService } from 'vs/platform/product/common/productService';
|
import { ISurveyData, IProductService } from 'vs/platform/product/common/productService';
|
||||||
import { LifecyclePhase } from 'vs/platform/lifecycle/common/lifecycle';
|
import { LifecyclePhase } from 'vs/platform/lifecycle/common/lifecycle';
|
||||||
import { Severity, INotificationService } from 'vs/platform/notification/common/notification';
|
import { Severity, INotificationService } from 'vs/platform/notification/common/notification';
|
||||||
@@ -25,6 +26,7 @@ class LanguageSurvey extends Disposable {
|
|||||||
constructor(
|
constructor(
|
||||||
data: ISurveyData,
|
data: ISurveyData,
|
||||||
storageService: IStorageService,
|
storageService: IStorageService,
|
||||||
|
storageKeysSyncRegistryService: IStorageKeysSyncRegistryService,
|
||||||
notificationService: INotificationService,
|
notificationService: INotificationService,
|
||||||
telemetryService: ITelemetryService,
|
telemetryService: ITelemetryService,
|
||||||
modelService: IModelService,
|
modelService: IModelService,
|
||||||
@@ -41,6 +43,14 @@ class LanguageSurvey extends Disposable {
|
|||||||
const EDITED_LANGUAGE_COUNT_KEY = `${data.surveyId}.editedCount`;
|
const EDITED_LANGUAGE_COUNT_KEY = `${data.surveyId}.editedCount`;
|
||||||
const EDITED_LANGUAGE_DATE_KEY = `${data.surveyId}.editedDate`;
|
const EDITED_LANGUAGE_DATE_KEY = `${data.surveyId}.editedDate`;
|
||||||
|
|
||||||
|
// opt-in to syncing
|
||||||
|
storageKeysSyncRegistryService.registerStorageKey({ key: SESSION_COUNT_KEY, version: 1 });
|
||||||
|
storageKeysSyncRegistryService.registerStorageKey({ key: LAST_SESSION_DATE_KEY, version: 1 });
|
||||||
|
storageKeysSyncRegistryService.registerStorageKey({ key: SKIP_VERSION_KEY, version: 1 });
|
||||||
|
storageKeysSyncRegistryService.registerStorageKey({ key: IS_CANDIDATE_KEY, version: 1 });
|
||||||
|
storageKeysSyncRegistryService.registerStorageKey({ key: EDITED_LANGUAGE_COUNT_KEY, version: 1 });
|
||||||
|
storageKeysSyncRegistryService.registerStorageKey({ key: EDITED_LANGUAGE_DATE_KEY, version: 1 });
|
||||||
|
|
||||||
const skipVersion = storageService.get(SKIP_VERSION_KEY, StorageScope.GLOBAL, '');
|
const skipVersion = storageService.get(SKIP_VERSION_KEY, StorageScope.GLOBAL, '');
|
||||||
if (skipVersion) {
|
if (skipVersion) {
|
||||||
return;
|
return;
|
||||||
@@ -131,6 +141,7 @@ class LanguageSurveysContribution implements IWorkbenchContribution {
|
|||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
@IStorageService storageService: IStorageService,
|
@IStorageService storageService: IStorageService,
|
||||||
|
@IStorageKeysSyncRegistryService storageKeysSyncRegistryService: IStorageKeysSyncRegistryService,
|
||||||
@INotificationService notificationService: INotificationService,
|
@INotificationService notificationService: INotificationService,
|
||||||
@ITelemetryService telemetryService: ITelemetryService,
|
@ITelemetryService telemetryService: ITelemetryService,
|
||||||
@IModelService modelService: IModelService,
|
@IModelService modelService: IModelService,
|
||||||
@@ -144,7 +155,7 @@ class LanguageSurveysContribution implements IWorkbenchContribution {
|
|||||||
|
|
||||||
productService.surveys
|
productService.surveys
|
||||||
.filter(surveyData => surveyData.surveyId && surveyData.editCount && surveyData.languageId && surveyData.surveyUrl && surveyData.userProbability)
|
.filter(surveyData => surveyData.surveyId && surveyData.editCount && surveyData.languageId && surveyData.surveyUrl && surveyData.userProbability)
|
||||||
.map(surveyData => new LanguageSurvey(surveyData, storageService, notificationService, telemetryService, modelService, textFileService, openerService, productService));
|
.map(surveyData => new LanguageSurvey(surveyData, storageService, storageKeysSyncRegistryService, notificationService, telemetryService, modelService, textFileService, openerService, productService));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import { IWorkbenchContributionsRegistry, IWorkbenchContribution, Extensions as
|
|||||||
import { Registry } from 'vs/platform/registry/common/platform';
|
import { Registry } from 'vs/platform/registry/common/platform';
|
||||||
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
||||||
import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';
|
import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';
|
||||||
|
import { IStorageKeysSyncRegistryService } from 'vs/platform/userDataSync/common/storageKeys';
|
||||||
import { IProductService } from 'vs/platform/product/common/productService';
|
import { IProductService } from 'vs/platform/product/common/productService';
|
||||||
import { LifecyclePhase } from 'vs/platform/lifecycle/common/lifecycle';
|
import { LifecyclePhase } from 'vs/platform/lifecycle/common/lifecycle';
|
||||||
import { Severity, INotificationService } from 'vs/platform/notification/common/notification';
|
import { Severity, INotificationService } from 'vs/platform/notification/common/notification';
|
||||||
@@ -26,6 +27,7 @@ class NPSContribution implements IWorkbenchContribution {
|
|||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
@IStorageService storageService: IStorageService,
|
@IStorageService storageService: IStorageService,
|
||||||
|
@IStorageKeysSyncRegistryService storageKeysSyncRegistryService: IStorageKeysSyncRegistryService,
|
||||||
@INotificationService notificationService: INotificationService,
|
@INotificationService notificationService: INotificationService,
|
||||||
@ITelemetryService telemetryService: ITelemetryService,
|
@ITelemetryService telemetryService: ITelemetryService,
|
||||||
@IOpenerService openerService: IOpenerService,
|
@IOpenerService openerService: IOpenerService,
|
||||||
@@ -35,6 +37,12 @@ class NPSContribution implements IWorkbenchContribution {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// opt-in to syncing
|
||||||
|
storageKeysSyncRegistryService.registerStorageKey({ key: SESSION_COUNT_KEY, version: 1 });
|
||||||
|
storageKeysSyncRegistryService.registerStorageKey({ key: LAST_SESSION_DATE_KEY, version: 1 });
|
||||||
|
storageKeysSyncRegistryService.registerStorageKey({ key: SKIP_VERSION_KEY, version: 1 });
|
||||||
|
storageKeysSyncRegistryService.registerStorageKey({ key: IS_CANDIDATE_KEY, version: 1 });
|
||||||
|
|
||||||
const skipVersion = storageService.get(SKIP_VERSION_KEY, StorageScope.GLOBAL, '');
|
const skipVersion = storageService.get(SKIP_VERSION_KEY, StorageScope.GLOBAL, '');
|
||||||
if (skipVersion) {
|
if (skipVersion) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
import { Action, IAction } from 'vs/base/common/actions';
|
import { Action, IAction } from 'vs/base/common/actions';
|
||||||
import { EndOfLinePreference } from 'vs/editor/common/model';
|
import { EndOfLinePreference } from 'vs/editor/common/model';
|
||||||
import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService';
|
import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService';
|
||||||
import { TERMINAL_VIEW_ID, ITerminalConfigHelper, TitleEventSource, TERMINAL_COMMAND_ID, KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_FOCUSED, TERMINAL_ACTION_CATEGORY, KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_VISIBLE, KEYBINDING_CONTEXT_TERMINAL_TEXT_SELECTED, KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_NOT_VISIBLE, KEYBINDING_CONTEXT_TERMINAL_A11Y_TREE_FOCUS } from 'vs/workbench/contrib/terminal/common/terminal';
|
import { TERMINAL_VIEW_ID, ITerminalConfigHelper, TitleEventSource, TERMINAL_COMMAND_ID, KEYBINDING_CONTEXT_TERMINAL_FIND_FOCUSED, TERMINAL_ACTION_CATEGORY, KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_FIND_VISIBLE, KEYBINDING_CONTEXT_TERMINAL_TEXT_SELECTED, KEYBINDING_CONTEXT_TERMINAL_FIND_NOT_VISIBLE, KEYBINDING_CONTEXT_TERMINAL_A11Y_TREE_FOCUS } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||||
import { SelectActionViewItem } from 'vs/base/browser/ui/actionbar/actionbar';
|
import { SelectActionViewItem } from 'vs/base/browser/ui/actionbar/actionbar';
|
||||||
import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService';
|
import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService';
|
||||||
import { attachSelectBoxStyler, attachStylerCallback } from 'vs/platform/theme/common/styler';
|
import { attachSelectBoxStyler, attachStylerCallback } from 'vs/platform/theme/common/styler';
|
||||||
@@ -834,7 +834,7 @@ export function registerTerminalActions() {
|
|||||||
category,
|
category,
|
||||||
keybinding: {
|
keybinding: {
|
||||||
primary: KeyCode.Escape,
|
primary: KeyCode.Escape,
|
||||||
when: ContextKeyExpr.and(KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_TEXT_SELECTED, KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_NOT_VISIBLE),
|
when: ContextKeyExpr.and(KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_TEXT_SELECTED, KEYBINDING_CONTEXT_TERMINAL_FIND_NOT_VISIBLE),
|
||||||
weight: KeybindingWeight.WorkbenchContrib
|
weight: KeybindingWeight.WorkbenchContrib
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -883,13 +883,13 @@ export function registerTerminalActions() {
|
|||||||
registerAction2(class extends Action2 {
|
registerAction2(class extends Action2 {
|
||||||
constructor() {
|
constructor() {
|
||||||
super({
|
super({
|
||||||
id: TERMINAL_COMMAND_ID.FIND_WIDGET_FOCUS,
|
id: TERMINAL_COMMAND_ID.FIND_FOCUS,
|
||||||
title: localize('workbench.action.terminal.focusFindWidget', "Focus Find Widget"),
|
title: localize('workbench.action.terminal.focusFind', "Focus Find"),
|
||||||
f1: true,
|
f1: true,
|
||||||
category,
|
category,
|
||||||
keybinding: {
|
keybinding: {
|
||||||
primary: KeyMod.CtrlCmd | KeyCode.KEY_F,
|
primary: KeyMod.CtrlCmd | KeyCode.KEY_F,
|
||||||
when: ContextKeyExpr.or(KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_FOCUSED, KEYBINDING_CONTEXT_TERMINAL_FOCUS),
|
when: ContextKeyExpr.or(KEYBINDING_CONTEXT_TERMINAL_FIND_FOCUSED, KEYBINDING_CONTEXT_TERMINAL_FOCUS),
|
||||||
weight: KeybindingWeight.WorkbenchContrib
|
weight: KeybindingWeight.WorkbenchContrib
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -901,14 +901,14 @@ export function registerTerminalActions() {
|
|||||||
registerAction2(class extends Action2 {
|
registerAction2(class extends Action2 {
|
||||||
constructor() {
|
constructor() {
|
||||||
super({
|
super({
|
||||||
id: TERMINAL_COMMAND_ID.FIND_WIDGET_HIDE,
|
id: TERMINAL_COMMAND_ID.FIND_HIDE,
|
||||||
title: localize('workbench.action.terminal.hideFindWidget', "Hide Find Widget"),
|
title: localize('workbench.action.terminal.hideFind', "Hide Find"),
|
||||||
f1: true,
|
f1: true,
|
||||||
category,
|
category,
|
||||||
keybinding: {
|
keybinding: {
|
||||||
primary: KeyCode.Escape,
|
primary: KeyCode.Escape,
|
||||||
secondary: [KeyMod.Shift | KeyCode.Escape],
|
secondary: [KeyMod.Shift | KeyCode.Escape],
|
||||||
when: ContextKeyExpr.and(KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_VISIBLE),
|
when: ContextKeyExpr.and(KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_FIND_VISIBLE),
|
||||||
weight: KeybindingWeight.WorkbenchContrib
|
weight: KeybindingWeight.WorkbenchContrib
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -1159,13 +1159,13 @@ export function registerTerminalActions() {
|
|||||||
constructor() {
|
constructor() {
|
||||||
super({
|
super({
|
||||||
id: TERMINAL_COMMAND_ID.TOGGLE_FIND_REGEX,
|
id: TERMINAL_COMMAND_ID.TOGGLE_FIND_REGEX,
|
||||||
title: localize('workbench.action.terminal.toggleFindRegex', "Toggle find using regex"),
|
title: localize('workbench.action.terminal.toggleFindRegex', "Toggle Find Using Regex"),
|
||||||
f1: true,
|
f1: true,
|
||||||
category,
|
category,
|
||||||
keybinding: {
|
keybinding: {
|
||||||
primary: KeyMod.Alt | KeyCode.KEY_R,
|
primary: KeyMod.Alt | KeyCode.KEY_R,
|
||||||
mac: { primary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.KEY_R },
|
mac: { primary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.KEY_R },
|
||||||
when: ContextKeyExpr.or(KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_FOCUSED),
|
when: ContextKeyExpr.or(KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_FIND_FOCUSED),
|
||||||
weight: KeybindingWeight.WorkbenchContrib
|
weight: KeybindingWeight.WorkbenchContrib
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -1179,13 +1179,13 @@ export function registerTerminalActions() {
|
|||||||
constructor() {
|
constructor() {
|
||||||
super({
|
super({
|
||||||
id: TERMINAL_COMMAND_ID.TOGGLE_FIND_WHOLE_WORD,
|
id: TERMINAL_COMMAND_ID.TOGGLE_FIND_WHOLE_WORD,
|
||||||
title: localize('workbench.action.terminal.toggleFindWholeWord', "Toggle find using whole word"),
|
title: localize('workbench.action.terminal.toggleFindWholeWord', "Toggle Find Using Whole Word"),
|
||||||
f1: true,
|
f1: true,
|
||||||
category,
|
category,
|
||||||
keybinding: {
|
keybinding: {
|
||||||
primary: KeyMod.Alt | KeyCode.KEY_W,
|
primary: KeyMod.Alt | KeyCode.KEY_W,
|
||||||
mac: { primary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.KEY_W },
|
mac: { primary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.KEY_W },
|
||||||
when: ContextKeyExpr.or(KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_FOCUSED),
|
when: ContextKeyExpr.or(KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_FIND_FOCUSED),
|
||||||
weight: KeybindingWeight.WorkbenchContrib
|
weight: KeybindingWeight.WorkbenchContrib
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
@@ -1199,13 +1199,13 @@ export function registerTerminalActions() {
|
|||||||
constructor() {
|
constructor() {
|
||||||
super({
|
super({
|
||||||
id: TERMINAL_COMMAND_ID.TOGGLE_FIND_CASE_SENSITIVE,
|
id: TERMINAL_COMMAND_ID.TOGGLE_FIND_CASE_SENSITIVE,
|
||||||
title: localize('workbench.action.terminal.toggleFindCaseSensitive', "Toggle find using case sensitive"),
|
title: localize('workbench.action.terminal.toggleFindCaseSensitive', "Toggle Find Using Case Sensitive"),
|
||||||
f1: true,
|
f1: true,
|
||||||
category,
|
category,
|
||||||
keybinding: {
|
keybinding: {
|
||||||
primary: KeyMod.Alt | KeyCode.KEY_C,
|
primary: KeyMod.Alt | KeyCode.KEY_C,
|
||||||
mac: { primary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.KEY_C },
|
mac: { primary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.KEY_C },
|
||||||
when: ContextKeyExpr.or(KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_FOCUSED),
|
when: ContextKeyExpr.or(KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_FIND_FOCUSED),
|
||||||
weight: KeybindingWeight.WorkbenchContrib
|
weight: KeybindingWeight.WorkbenchContrib
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -1226,12 +1226,12 @@ export function registerTerminalActions() {
|
|||||||
{
|
{
|
||||||
primary: KeyCode.F3,
|
primary: KeyCode.F3,
|
||||||
mac: { primary: KeyMod.CtrlCmd | KeyCode.KEY_G, secondary: [KeyCode.F3] },
|
mac: { primary: KeyMod.CtrlCmd | KeyCode.KEY_G, secondary: [KeyCode.F3] },
|
||||||
when: ContextKeyExpr.or(KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_FOCUSED),
|
when: ContextKeyExpr.or(KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_FIND_FOCUSED),
|
||||||
weight: KeybindingWeight.WorkbenchContrib
|
weight: KeybindingWeight.WorkbenchContrib
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
primary: KeyMod.Shift | KeyCode.Enter,
|
primary: KeyMod.Shift | KeyCode.Enter,
|
||||||
when: KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_FOCUSED,
|
when: KEYBINDING_CONTEXT_TERMINAL_FIND_FOCUSED,
|
||||||
weight: KeybindingWeight.WorkbenchContrib
|
weight: KeybindingWeight.WorkbenchContrib
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -1252,12 +1252,12 @@ export function registerTerminalActions() {
|
|||||||
{
|
{
|
||||||
primary: KeyMod.Shift | KeyCode.F3,
|
primary: KeyMod.Shift | KeyCode.F3,
|
||||||
mac: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_G, secondary: [KeyMod.Shift | KeyCode.F3] },
|
mac: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_G, secondary: [KeyMod.Shift | KeyCode.F3] },
|
||||||
when: ContextKeyExpr.or(KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_FOCUSED),
|
when: ContextKeyExpr.or(KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_FIND_FOCUSED),
|
||||||
weight: KeybindingWeight.WorkbenchContrib
|
weight: KeybindingWeight.WorkbenchContrib
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
primary: KeyCode.Enter,
|
primary: KeyCode.Enter,
|
||||||
when: KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_FOCUSED,
|
when: KEYBINDING_CONTEXT_TERMINAL_FIND_FOCUSED,
|
||||||
weight: KeybindingWeight.WorkbenchContrib
|
weight: KeybindingWeight.WorkbenchContrib
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
import { SimpleFindWidget } from 'vs/workbench/contrib/codeEditor/browser/find/simpleFindWidget';
|
import { SimpleFindWidget } from 'vs/workbench/contrib/codeEditor/browser/find/simpleFindWidget';
|
||||||
import { IContextViewService } from 'vs/platform/contextview/browser/contextView';
|
import { IContextViewService } from 'vs/platform/contextview/browser/contextView';
|
||||||
import { KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_INPUT_FOCUSED, KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_FOCUSED } from 'vs/workbench/contrib/terminal/common/terminal';
|
import { KEYBINDING_CONTEXT_TERMINAL_FIND_INPUT_FOCUSED, KEYBINDING_CONTEXT_TERMINAL_FIND_FOCUSED } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||||
import { IContextKeyService, IContextKey } from 'vs/platform/contextkey/common/contextkey';
|
import { IContextKeyService, IContextKey } from 'vs/platform/contextkey/common/contextkey';
|
||||||
import { FindReplaceState } from 'vs/editor/contrib/find/findState';
|
import { FindReplaceState } from 'vs/editor/contrib/find/findState';
|
||||||
import { ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal';
|
import { ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal';
|
||||||
@@ -24,8 +24,8 @@ export class TerminalFindWidget extends SimpleFindWidget {
|
|||||||
this._register(findState.onFindReplaceStateChange(() => {
|
this._register(findState.onFindReplaceStateChange(() => {
|
||||||
this.show();
|
this.show();
|
||||||
}));
|
}));
|
||||||
this._findInputFocused = KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_INPUT_FOCUSED.bindTo(this._contextKeyService);
|
this._findInputFocused = KEYBINDING_CONTEXT_TERMINAL_FIND_INPUT_FOCUSED.bindTo(this._contextKeyService);
|
||||||
this._findWidgetFocused = KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_FOCUSED.bindTo(this._contextKeyService);
|
this._findWidgetFocused = KEYBINDING_CONTEXT_TERMINAL_FIND_FOCUSED.bindTo(this._contextKeyService);
|
||||||
}
|
}
|
||||||
|
|
||||||
public find(previous: boolean) {
|
public find(previous: boolean) {
|
||||||
|
|||||||
@@ -1079,6 +1079,7 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
|
|||||||
|
|
||||||
// Dispose the environment info widget if it exists
|
// Dispose the environment info widget if it exists
|
||||||
this._environmentInfo?.disposable.dispose();
|
this._environmentInfo?.disposable.dispose();
|
||||||
|
this._environmentInfo = undefined;
|
||||||
|
|
||||||
if (!reset) {
|
if (!reset) {
|
||||||
// HACK: Force initialText to be non-falsy for reused terminals such that the
|
// HACK: Force initialText to be non-falsy for reused terminals such that the
|
||||||
@@ -1410,6 +1411,7 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
|
|||||||
if (!info ||
|
if (!info ||
|
||||||
this._configHelper.config.environmentChangesIndicator === 'off' ||
|
this._configHelper.config.environmentChangesIndicator === 'off' ||
|
||||||
this._configHelper.config.environmentChangesIndicator === 'warnonly' && !info.requiresAction) {
|
this._configHelper.config.environmentChangesIndicator === 'warnonly' && !info.requiresAction) {
|
||||||
|
this._environmentInfo = undefined;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -245,12 +245,14 @@ export class TerminalProcessManager extends Disposable implements ITerminalProce
|
|||||||
const env = terminalEnvironment.createTerminalEnvironment(shellLaunchConfig, lastActiveWorkspace, envFromConfigValue, this._configurationResolverService, isWorkspaceShellAllowed, this._productService.version, this._configHelper.config.detectLocale, baseEnv);
|
const env = terminalEnvironment.createTerminalEnvironment(shellLaunchConfig, lastActiveWorkspace, envFromConfigValue, this._configurationResolverService, isWorkspaceShellAllowed, this._productService.version, this._configHelper.config.detectLocale, baseEnv);
|
||||||
|
|
||||||
// Fetch any extension environment additions and apply them
|
// Fetch any extension environment additions and apply them
|
||||||
this._extEnvironmentVariableCollection = this._environmentVariableService.mergedCollection;
|
if (!shellLaunchConfig.strictEnv) {
|
||||||
this._register(this._environmentVariableService.onDidChangeCollections(newCollection => this._onEnvironmentVariableCollectionChange(newCollection)));
|
this._extEnvironmentVariableCollection = this._environmentVariableService.mergedCollection;
|
||||||
this._extEnvironmentVariableCollection.applyToProcessEnvironment(env);
|
this._register(this._environmentVariableService.onDidChangeCollections(newCollection => this._onEnvironmentVariableCollectionChange(newCollection)));
|
||||||
if (this._extEnvironmentVariableCollection.map.size > 0) {
|
this._extEnvironmentVariableCollection.applyToProcessEnvironment(env);
|
||||||
this._environmentVariableInfo = new EnvironmentVariableInfoChangesActive(this._extEnvironmentVariableCollection);
|
if (this._extEnvironmentVariableCollection.map.size > 0) {
|
||||||
this._onEnvironmentVariableInfoChange.fire(this._environmentVariableInfo);
|
this._environmentVariableInfo = new EnvironmentVariableInfoChangesActive(this._extEnvironmentVariableCollection);
|
||||||
|
this._onEnvironmentVariableInfoChange.fire(this._environmentVariableInfo);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const useConpty = this._configHelper.config.windowsEnableConpty && !isScreenReaderModeEnabled;
|
const useConpty = this._configHelper.config.windowsEnableConpty && !isScreenReaderModeEnabled;
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
import * as nls from 'vs/nls';
|
import * as nls from 'vs/nls';
|
||||||
import { TERMINAL_VIEW_ID, IShellLaunchConfig, ITerminalConfigHelper, ITerminalNativeService, ISpawnExtHostProcessRequest, IStartExtensionTerminalRequest, IAvailableShellsRequest, KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_VISIBLE, KEYBINDING_CONTEXT_TERMINAL_IS_OPEN, ITerminalProcessExtHostProxy, IShellDefinition, LinuxDistro, KEYBINDING_CONTEXT_TERMINAL_SHELL_TYPE } from 'vs/workbench/contrib/terminal/common/terminal';
|
import { TERMINAL_VIEW_ID, IShellLaunchConfig, ITerminalConfigHelper, ITerminalNativeService, 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 } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||||
import { IContextKeyService, IContextKey } from 'vs/platform/contextkey/common/contextkey';
|
import { IContextKeyService, IContextKey } from 'vs/platform/contextkey/common/contextkey';
|
||||||
import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService';
|
import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService';
|
||||||
import { ILifecycleService } from 'vs/platform/lifecycle/common/lifecycle';
|
import { ILifecycleService } from 'vs/platform/lifecycle/common/lifecycle';
|
||||||
@@ -121,7 +121,7 @@ export class TerminalService implements ITerminalService {
|
|||||||
}
|
}
|
||||||
this._terminalFocusContextKey = KEYBINDING_CONTEXT_TERMINAL_FOCUS.bindTo(this._contextKeyService);
|
this._terminalFocusContextKey = KEYBINDING_CONTEXT_TERMINAL_FOCUS.bindTo(this._contextKeyService);
|
||||||
this._terminalShellTypeContextKey = KEYBINDING_CONTEXT_TERMINAL_SHELL_TYPE.bindTo(this._contextKeyService);
|
this._terminalShellTypeContextKey = KEYBINDING_CONTEXT_TERMINAL_SHELL_TYPE.bindTo(this._contextKeyService);
|
||||||
this._findWidgetVisible = KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_VISIBLE.bindTo(this._contextKeyService);
|
this._findWidgetVisible = KEYBINDING_CONTEXT_TERMINAL_FIND_VISIBLE.bindTo(this._contextKeyService);
|
||||||
this._configHelper = this._instantiationService.createInstance(TerminalConfigHelper, this._terminalNativeService?.linuxDistro || LinuxDistro.Unknown);
|
this._configHelper = this._instantiationService.createInstance(TerminalConfigHelper, this._terminalNativeService?.linuxDistro || LinuxDistro.Unknown);
|
||||||
this.onTabDisposed(tab => this._removeTab(tab));
|
this.onTabDisposed(tab => this._removeTab(tab));
|
||||||
this.onActiveTabChanged(() => {
|
this.onActiveTabChanged(() => {
|
||||||
|
|||||||
@@ -37,15 +37,15 @@ export const KEYBINDING_CONTEXT_TERMINAL_TEXT_SELECTED = new RawContextKey<boole
|
|||||||
export const KEYBINDING_CONTEXT_TERMINAL_TEXT_NOT_SELECTED = KEYBINDING_CONTEXT_TERMINAL_TEXT_SELECTED.toNegated();
|
export const KEYBINDING_CONTEXT_TERMINAL_TEXT_NOT_SELECTED = KEYBINDING_CONTEXT_TERMINAL_TEXT_SELECTED.toNegated();
|
||||||
|
|
||||||
/** A context key that is set when the find widget in integrated terminal is visible. */
|
/** A context key that is set when the find widget in integrated terminal is visible. */
|
||||||
export const KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_VISIBLE = new RawContextKey<boolean>('terminalFindWidgetVisible', false);
|
export const KEYBINDING_CONTEXT_TERMINAL_FIND_VISIBLE = new RawContextKey<boolean>('terminalFindVisible', false);
|
||||||
/** A context key that is set when the find widget in integrated terminal is not visible. */
|
/** A context key that is set when the find widget in integrated terminal is not visible. */
|
||||||
export const KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_NOT_VISIBLE = KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_VISIBLE.toNegated();
|
export const KEYBINDING_CONTEXT_TERMINAL_FIND_NOT_VISIBLE = KEYBINDING_CONTEXT_TERMINAL_FIND_VISIBLE.toNegated();
|
||||||
/** A context key that is set when the find widget find input in integrated terminal is focused. */
|
/** A context key that is set when the find widget find input in integrated terminal is focused. */
|
||||||
export const KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_INPUT_FOCUSED = new RawContextKey<boolean>('terminalFindWidgetInputFocused', false);
|
export const KEYBINDING_CONTEXT_TERMINAL_FIND_INPUT_FOCUSED = new RawContextKey<boolean>('terminalFindInputFocused', false);
|
||||||
/** A context key that is set when the find widget in integrated terminal is focused. */
|
/** A context key that is set when the find widget in integrated terminal is focused. */
|
||||||
export const KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_FOCUSED = new RawContextKey<boolean>('terminalFindWidgetFocused', false);
|
export const KEYBINDING_CONTEXT_TERMINAL_FIND_FOCUSED = new RawContextKey<boolean>('terminalFindFocused', false);
|
||||||
/** A context key that is set when the find widget find input in integrated terminal is not focused. */
|
/** A context key that is set when the find widget find input in integrated terminal is not focused. */
|
||||||
export const KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_INPUT_NOT_FOCUSED = KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_INPUT_FOCUSED.toNegated();
|
export const KEYBINDING_CONTEXT_TERMINAL_FIND_INPUT_NOT_FOCUSED = KEYBINDING_CONTEXT_TERMINAL_FIND_INPUT_FOCUSED.toNegated();
|
||||||
|
|
||||||
export const IS_WORKSPACE_SHELL_ALLOWED_STORAGE_KEY = 'terminal.integrated.isWorkspaceShellAllowed';
|
export const IS_WORKSPACE_SHELL_ALLOWED_STORAGE_KEY = 'terminal.integrated.isWorkspaceShellAllowed';
|
||||||
export const NEVER_MEASURE_RENDER_TIME_STORAGE_KEY = 'terminal.integrated.neverMeasureRenderTime';
|
export const NEVER_MEASURE_RENDER_TIME_STORAGE_KEY = 'terminal.integrated.neverMeasureRenderTime';
|
||||||
@@ -474,8 +474,8 @@ export const enum TERMINAL_COMMAND_ID {
|
|||||||
MANAGE_WORKSPACE_SHELL_PERMISSIONS = 'workbench.action.terminal.manageWorkspaceShellPermissions',
|
MANAGE_WORKSPACE_SHELL_PERMISSIONS = 'workbench.action.terminal.manageWorkspaceShellPermissions',
|
||||||
RENAME = 'workbench.action.terminal.rename',
|
RENAME = 'workbench.action.terminal.rename',
|
||||||
RENAME_WITH_ARG = 'workbench.action.terminal.renameWithArg',
|
RENAME_WITH_ARG = 'workbench.action.terminal.renameWithArg',
|
||||||
FIND_WIDGET_FOCUS = 'workbench.action.terminal.focusFindWidget',
|
FIND_FOCUS = 'workbench.action.terminal.focusFind',
|
||||||
FIND_WIDGET_HIDE = 'workbench.action.terminal.hideFindWidget',
|
FIND_HIDE = 'workbench.action.terminal.hideFind',
|
||||||
QUICK_OPEN_TERM = 'workbench.action.quickOpenTerm',
|
QUICK_OPEN_TERM = 'workbench.action.quickOpenTerm',
|
||||||
SCROLL_TO_PREVIOUS_COMMAND = 'workbench.action.terminal.scrollToPreviousCommand',
|
SCROLL_TO_PREVIOUS_COMMAND = 'workbench.action.terminal.scrollToPreviousCommand',
|
||||||
SCROLL_TO_NEXT_COMMAND = 'workbench.action.terminal.scrollToNextCommand',
|
SCROLL_TO_NEXT_COMMAND = 'workbench.action.terminal.scrollToNextCommand',
|
||||||
@@ -501,8 +501,8 @@ export const DEFAULT_COMMANDS_TO_SKIP_SHELL: string[] = [
|
|||||||
TERMINAL_COMMAND_ID.DELETE_TO_LINE_START,
|
TERMINAL_COMMAND_ID.DELETE_TO_LINE_START,
|
||||||
TERMINAL_COMMAND_ID.DELETE_WORD_LEFT,
|
TERMINAL_COMMAND_ID.DELETE_WORD_LEFT,
|
||||||
TERMINAL_COMMAND_ID.DELETE_WORD_RIGHT,
|
TERMINAL_COMMAND_ID.DELETE_WORD_RIGHT,
|
||||||
TERMINAL_COMMAND_ID.FIND_WIDGET_FOCUS,
|
TERMINAL_COMMAND_ID.FIND_FOCUS,
|
||||||
TERMINAL_COMMAND_ID.FIND_WIDGET_HIDE,
|
TERMINAL_COMMAND_ID.FIND_HIDE,
|
||||||
TERMINAL_COMMAND_ID.FIND_NEXT,
|
TERMINAL_COMMAND_ID.FIND_NEXT,
|
||||||
TERMINAL_COMMAND_ID.FIND_PREVIOUS,
|
TERMINAL_COMMAND_ID.FIND_PREVIOUS,
|
||||||
TERMINAL_COMMAND_ID.TOGGLE_FIND_REGEX,
|
TERMINAL_COMMAND_ID.TOGGLE_FIND_REGEX,
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 1024 1024">
|
|
||||||
<path d="M1024,1024H0V0H1024Z" fill="#f6f6f6" fill-opacity="0"/>
|
|
||||||
<g>
|
|
||||||
<g>
|
|
||||||
<path d="M582.813,821.171,558.39,811.078h-218.7L281.039,972.344,175.172,681.078l-47.313,130H42.7V874.61c0,82.436,133.634,149.265,298.65,149.265,98.328,0,185.57-23.688,239.93-60.453l-5.922-14.8-16.094-39.672-15.829-39.391,39.344-16.048,14.829-6.046c-.2-3.423-.282-6.751-.282-10.125s.078-6.8.282-10.125Z" fill="#008575"/>
|
|
||||||
<path d="M469.32,469.266A209.424,209.424,0,0,1,386.164,452.5a210.842,210.842,0,0,1-92.828-75.656H42.7V768.437H98.016L175.172,556.2,281.039,847.469l28.805-79.032h248.5l1.046-2.749,16.047-39.672,16.094-39.859L631.25,702.5l8.718,3.624V469.266Z" fill="#008575"/>
|
|
||||||
</g>
|
|
||||||
<g opacity="0.25">
|
|
||||||
<path d="M175.172,556.2,281.039,847.469l28.805-79.032h31.508V426.906a209.408,209.408,0,0,1-23.008-19.89,212.537,212.537,0,0,1-25.008-30.172H42.7V768.437H98.016Z" fill="#fff"/>
|
|
||||||
<path d="M339.688,811.078,281.039,972.344,175.172,681.078l-47.313,130H42.7V874.61c0,82.436,133.634,149.265,298.65,149.265v-212.8Z" fill="#fff"/>
|
|
||||||
</g>
|
|
||||||
<path d="M469.32,469.266A209.424,209.424,0,0,1,386.164,452.5a212.329,212.329,0,0,1-67.82-45.484,215.513,215.513,0,0,1-45.555-67.7,210.416,210.416,0,0,1-16.8-83.375,221.318,221.318,0,0,1,1.125-22.359C133.234,251.8,42.7,309.031,42.7,376.844c0,82.484,133.673,149.359,298.65,149.359,95.164,0,179.859-22.3,234.507-56.937Z" fill="#b8d432"/>
|
|
||||||
<path d="M469.32,469.266A209.424,209.424,0,0,1,386.164,452.5a212.329,212.329,0,0,1-67.82-45.484,215.513,215.513,0,0,1-45.555-67.7,210.416,210.416,0,0,1-16.8-83.375,221.318,221.318,0,0,1,1.125-22.359C133.234,251.8,42.7,309.031,42.7,376.844c0,82.484,133.673,149.359,298.65,149.359,95.164,0,179.859-22.3,234.507-56.937Z" fill="#008575"/>
|
|
||||||
<path d="M852.3,170.625a126.119,126.119,0,0,1,50.139,10,132.135,132.135,0,0,1,41.048,27.156,126.539,126.539,0,0,1,27.64,40.516,129.321,129.321,0,0,1,.173,100.14,128.033,128.033,0,0,1-27.517,40.657,130.32,130.32,0,0,1-40.765,27.515,123.843,123.843,0,0,1-49.688,9.985H469.32a166.759,166.759,0,0,1-66.484-13.344,170.1,170.1,0,0,1-54.352-36.406,172.108,172.108,0,0,1-36.476-54.313,172.741,172.741,0,0,1,0-133.109,171.229,171.229,0,0,1,36.429-54.3A173.023,173.023,0,0,1,402.8,98.61,167.87,167.87,0,0,1,469.32,85.282,164.541,164.541,0,0,1,500.328,88.3a200.977,200.977,0,0,1,30.8-37.157,189.149,189.149,0,0,1,38.312-27.829A189.23,189.23,0,0,1,661.344,0a187.037,187.037,0,0,1,69.813,12.984,191.558,191.558,0,0,1,58.155,35.8,194.176,194.176,0,0,1,41.845,54.265A200.919,200.919,0,0,1,852.3,170.625Z" fill="#008575"/>
|
|
||||||
<path d="M386.289,399.328a191.554,191.554,0,0,1,0-147.047A188.377,188.377,0,0,1,486.821,151.8a186.583,186.583,0,0,1,107.913-11.423A222.149,222.149,0,0,1,628.75,99.3a203.4,203.4,0,0,1,42.312-30.813,205.773,205.773,0,0,1,48.594-19.157,212.357,212.357,0,0,1,53.11-6.672c3.3,0,6.2.734,9.5.8a191.241,191.241,0,0,0-51.109-30.469A187.037,187.037,0,0,0,661.344,0a192.068,192.068,0,0,0-48.016,5.954,194.156,194.156,0,0,0-44.016,17.358,189.427,189.427,0,0,0-38.218,27.829A197.207,197.207,0,0,0,500.328,88.3a164.541,164.541,0,0,0-31.008-3.016A167.543,167.543,0,0,0,402.836,98.61a169.992,169.992,0,0,0-90.828,90.765,171.365,171.365,0,0,0,36.429,187.406c12.172,12.172,26.391,21.563,41.766,29.656C389.039,404.016,387.414,401.953,386.289,399.328Z" fill="#fff" opacity="0.2" style="isolation: isolate"/>
|
|
||||||
<path d="M938.647,833.672a152.447,152.447,0,0,1-4.672,37.016l45.61,18.624L963.617,929l-46.063-19.016a149.169,149.169,0,0,1-51.891,52.062l19,45.564L844.991,1024l-18.766-45.656a149.9,149.9,0,0,1-74.015,0L733.569,1024l-39.64-16.39L712.9,962.046a144.7,144.7,0,0,1-52.015-52.062L614.866,929l-15.921-39.688,45.64-18.624a152.468,152.468,0,0,1-4.626-37.016,147.047,147.047,0,0,1,4.751-36.97l-45.735-18.718,15.97-39.64,46.062,18.922A148.589,148.589,0,0,1,712.975,705.3l-19-46.016,39.719-16.016,18.641,45.64a150.28,150.28,0,0,1,73.984,0l18.7-45.64,39.687,16.016L865.742,705.3a154.853,154.853,0,0,1,51.937,51.968l46.015-18.922,15.969,39.64L934.07,796.7A157.427,157.427,0,0,1,938.647,833.672ZM789.3,940.344A103.068,103.068,0,0,0,830.647,932a107.121,107.121,0,0,0,33.813-22.843,109.322,109.322,0,0,0,23-34.016,105.036,105.036,0,0,0,0-82.781,109.269,109.269,0,0,0-56.813-56.845,101.608,101.608,0,0,0-41.344-8.5,102.956,102.956,0,0,0-41.515,8.5,110.282,110.282,0,0,0-34.016,23,106.128,106.128,0,0,0-22.8,33.845,106.831,106.831,0,0,0,0,82.781A105.967,105.967,0,0,0,747.788,932,104.438,104.438,0,0,0,789.3,940.344Z" fill="#008575"/>
|
|
||||||
<path d="M469.32,469.266A209.424,209.424,0,0,1,386.164,452.5a212.329,212.329,0,0,1-67.82-45.484,215.513,215.513,0,0,1-45.555-67.7,210.416,210.416,0,0,1-16.8-83.375,221.318,221.318,0,0,1,1.125-22.359C133.234,251.8,42.7,309.031,42.7,376.844c0,82.484,133.673,149.359,298.65,149.359,95.164,0,179.859-22.3,234.507-56.937Z" fill="#fff" opacity="0.55"/>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 4.8 KiB |
@@ -88,7 +88,7 @@ export class ReleaseNotesManager {
|
|||||||
this._currentReleaseNotes.webview.onDidClickLink(uri => this.onDidClickLink(URI.parse(uri)));
|
this._currentReleaseNotes.webview.onDidClickLink(uri => this.onDidClickLink(URI.parse(uri)));
|
||||||
this._currentReleaseNotes.onDispose(() => { this._currentReleaseNotes = undefined; });
|
this._currentReleaseNotes.onDispose(() => { this._currentReleaseNotes = undefined; });
|
||||||
|
|
||||||
const iconPath = URI.parse(require.toUrl('./media/code-icon.svg'));
|
const iconPath = URI.parse(require.toUrl('vs/workbench/browser/media/code-icon.svg'));
|
||||||
this._currentReleaseNotes.iconPath = {
|
this._currentReleaseNotes.iconPath = {
|
||||||
light: iconPath,
|
light: iconPath,
|
||||||
dark: iconPath
|
dark: iconPath
|
||||||
|
|||||||
@@ -136,8 +136,8 @@ export class ProductContribution implements IWorkbenchContribution {
|
|||||||
|
|
||||||
// was there an update? if so, open release notes
|
// was there an update? if so, open release notes
|
||||||
const releaseNotesUrl = productService.releaseNotesUrl;
|
const releaseNotesUrl = productService.releaseNotesUrl;
|
||||||
if (shouldShowReleaseNotes && releaseNotesUrl && lastVersion && productService.version !== lastVersion && productService.quality === 'stable') { // {{SQL CARBON EDIT}} Only show release notes for stable build) {
|
if (shouldShowReleaseNotes && !environmentService.skipReleaseNotes && releaseNotesUrl && lastVersion && productService.version !== lastVersion && productService.quality === 'stable') { // {{SQL CARBON EDIT}} Only show release notes for stable build) {
|
||||||
/*showReleaseNotes(instantiationService, productService.version) {{SQL CARBON EDIT}} Prompt user to open release notes in browser until we can get ADS release notes from the web
|
/*showReleaseNotes(instantiationService, productService.version)
|
||||||
.then(undefined, () => {*/
|
.then(undefined, () => {*/
|
||||||
notificationService.prompt(
|
notificationService.prompt(
|
||||||
severity.Info,
|
severity.Info,
|
||||||
|
|||||||
@@ -102,8 +102,8 @@ export class DynamicWebviewEditorOverlay extends Disposable implements WebviewOv
|
|||||||
this.container.style.position = 'absolute';
|
this.container.style.position = 'absolute';
|
||||||
this.container.style.top = `${frameRect.top - containerRect.top}px`;
|
this.container.style.top = `${frameRect.top - containerRect.top}px`;
|
||||||
this.container.style.left = `${frameRect.left - containerRect.left}px`;
|
this.container.style.left = `${frameRect.left - containerRect.left}px`;
|
||||||
this.container.style.width = `${dimension ? dimension.width : frameRect.width}px`;
|
this.container.style.width = `${dimension && frameRect.width > 0 ? dimension.width : frameRect.width}px`;
|
||||||
this.container.style.height = `${dimension ? dimension.height : frameRect.height}px`;
|
this.container.style.height = `${dimension && frameRect.height > 0 ? dimension.height : frameRect.height}px`;
|
||||||
}
|
}
|
||||||
|
|
||||||
private show() {
|
private show() {
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 1024 1024">
|
|
||||||
<path d="M1024,1024H0V0H1024Z" fill="#f6f6f6" fill-opacity="0"/>
|
|
||||||
<g>
|
|
||||||
<g>
|
|
||||||
<path d="M582.813,821.171,558.39,811.078h-218.7L281.039,972.344,175.172,681.078l-47.313,130H42.7V874.61c0,82.436,133.634,149.265,298.65,149.265,98.328,0,185.57-23.688,239.93-60.453l-5.922-14.8-16.094-39.672-15.829-39.391,39.344-16.048,14.829-6.046c-.2-3.423-.282-6.751-.282-10.125s.078-6.8.282-10.125Z" fill="#008575"/>
|
|
||||||
<path d="M469.32,469.266A209.424,209.424,0,0,1,386.164,452.5a210.842,210.842,0,0,1-92.828-75.656H42.7V768.437H98.016L175.172,556.2,281.039,847.469l28.805-79.032h248.5l1.046-2.749,16.047-39.672,16.094-39.859L631.25,702.5l8.718,3.624V469.266Z" fill="#008575"/>
|
|
||||||
</g>
|
|
||||||
<g opacity="0.25">
|
|
||||||
<path d="M175.172,556.2,281.039,847.469l28.805-79.032h31.508V426.906a209.408,209.408,0,0,1-23.008-19.89,212.537,212.537,0,0,1-25.008-30.172H42.7V768.437H98.016Z" fill="#fff"/>
|
|
||||||
<path d="M339.688,811.078,281.039,972.344,175.172,681.078l-47.313,130H42.7V874.61c0,82.436,133.634,149.265,298.65,149.265v-212.8Z" fill="#fff"/>
|
|
||||||
</g>
|
|
||||||
<path d="M469.32,469.266A209.424,209.424,0,0,1,386.164,452.5a212.329,212.329,0,0,1-67.82-45.484,215.513,215.513,0,0,1-45.555-67.7,210.416,210.416,0,0,1-16.8-83.375,221.318,221.318,0,0,1,1.125-22.359C133.234,251.8,42.7,309.031,42.7,376.844c0,82.484,133.673,149.359,298.65,149.359,95.164,0,179.859-22.3,234.507-56.937Z" fill="#b8d432"/>
|
|
||||||
<path d="M469.32,469.266A209.424,209.424,0,0,1,386.164,452.5a212.329,212.329,0,0,1-67.82-45.484,215.513,215.513,0,0,1-45.555-67.7,210.416,210.416,0,0,1-16.8-83.375,221.318,221.318,0,0,1,1.125-22.359C133.234,251.8,42.7,309.031,42.7,376.844c0,82.484,133.673,149.359,298.65,149.359,95.164,0,179.859-22.3,234.507-56.937Z" fill="#008575"/>
|
|
||||||
<path d="M852.3,170.625a126.119,126.119,0,0,1,50.139,10,132.135,132.135,0,0,1,41.048,27.156,126.539,126.539,0,0,1,27.64,40.516,129.321,129.321,0,0,1,.173,100.14,128.033,128.033,0,0,1-27.517,40.657,130.32,130.32,0,0,1-40.765,27.515,123.843,123.843,0,0,1-49.688,9.985H469.32a166.759,166.759,0,0,1-66.484-13.344,170.1,170.1,0,0,1-54.352-36.406,172.108,172.108,0,0,1-36.476-54.313,172.741,172.741,0,0,1,0-133.109,171.229,171.229,0,0,1,36.429-54.3A173.023,173.023,0,0,1,402.8,98.61,167.87,167.87,0,0,1,469.32,85.282,164.541,164.541,0,0,1,500.328,88.3a200.977,200.977,0,0,1,30.8-37.157,189.149,189.149,0,0,1,38.312-27.829A189.23,189.23,0,0,1,661.344,0a187.037,187.037,0,0,1,69.813,12.984,191.558,191.558,0,0,1,58.155,35.8,194.176,194.176,0,0,1,41.845,54.265A200.919,200.919,0,0,1,852.3,170.625Z" fill="#008575"/>
|
|
||||||
<path d="M386.289,399.328a191.554,191.554,0,0,1,0-147.047A188.377,188.377,0,0,1,486.821,151.8a186.583,186.583,0,0,1,107.913-11.423A222.149,222.149,0,0,1,628.75,99.3a203.4,203.4,0,0,1,42.312-30.813,205.773,205.773,0,0,1,48.594-19.157,212.357,212.357,0,0,1,53.11-6.672c3.3,0,6.2.734,9.5.8a191.241,191.241,0,0,0-51.109-30.469A187.037,187.037,0,0,0,661.344,0a192.068,192.068,0,0,0-48.016,5.954,194.156,194.156,0,0,0-44.016,17.358,189.427,189.427,0,0,0-38.218,27.829A197.207,197.207,0,0,0,500.328,88.3a164.541,164.541,0,0,0-31.008-3.016A167.543,167.543,0,0,0,402.836,98.61a169.992,169.992,0,0,0-90.828,90.765,171.365,171.365,0,0,0,36.429,187.406c12.172,12.172,26.391,21.563,41.766,29.656C389.039,404.016,387.414,401.953,386.289,399.328Z" fill="#fff" opacity="0.2" style="isolation: isolate"/>
|
|
||||||
<path d="M938.647,833.672a152.447,152.447,0,0,1-4.672,37.016l45.61,18.624L963.617,929l-46.063-19.016a149.169,149.169,0,0,1-51.891,52.062l19,45.564L844.991,1024l-18.766-45.656a149.9,149.9,0,0,1-74.015,0L733.569,1024l-39.64-16.39L712.9,962.046a144.7,144.7,0,0,1-52.015-52.062L614.866,929l-15.921-39.688,45.64-18.624a152.468,152.468,0,0,1-4.626-37.016,147.047,147.047,0,0,1,4.751-36.97l-45.735-18.718,15.97-39.64,46.062,18.922A148.589,148.589,0,0,1,712.975,705.3l-19-46.016,39.719-16.016,18.641,45.64a150.28,150.28,0,0,1,73.984,0l18.7-45.64,39.687,16.016L865.742,705.3a154.853,154.853,0,0,1,51.937,51.968l46.015-18.922,15.969,39.64L934.07,796.7A157.427,157.427,0,0,1,938.647,833.672ZM789.3,940.344A103.068,103.068,0,0,0,830.647,932a107.121,107.121,0,0,0,33.813-22.843,109.322,109.322,0,0,0,23-34.016,105.036,105.036,0,0,0,0-82.781,109.269,109.269,0,0,0-56.813-56.845,101.608,101.608,0,0,0-41.344-8.5,102.956,102.956,0,0,0-41.515,8.5,110.282,110.282,0,0,0-34.016,23,106.128,106.128,0,0,0-22.8,33.845,106.831,106.831,0,0,0,0,82.781A105.967,105.967,0,0,0,747.788,932,104.438,104.438,0,0,0,789.3,940.344Z" fill="#008575"/>
|
|
||||||
<path d="M469.32,469.266A209.424,209.424,0,0,1,386.164,452.5a212.329,212.329,0,0,1-67.82-45.484,215.513,215.513,0,0,1-45.555-67.7,210.416,210.416,0,0,1-16.8-83.375,221.318,221.318,0,0,1,1.125-22.359C133.234,251.8,42.7,309.031,42.7,376.844c0,82.484,133.673,149.359,298.65,149.359,95.164,0,179.859-22.3,234.507-56.937Z" fill="#fff" opacity="0.55"/>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 4.8 KiB |
@@ -220,7 +220,7 @@
|
|||||||
|
|
||||||
.file-icons-enabled .show-file-icons .az_data_welcome_page-name-file-icon.file-icon::before { /* {{SQL CARBON EDIT}} We use azdata welcome page */
|
.file-icons-enabled .show-file-icons .az_data_welcome_page-name-file-icon.file-icon::before { /* {{SQL CARBON EDIT}} We use azdata welcome page */
|
||||||
content: ' ';
|
content: ' ';
|
||||||
background-image: url('../../code-icon.svg');
|
background-image: url('../../../../browser/media/code-icon.svg');
|
||||||
}
|
}
|
||||||
|
|
||||||
.monaco-workbench .part.editor > .content .welcomePage .mac-only,
|
.monaco-workbench .part.editor > .content .welcomePage .mac-only,
|
||||||
|
|||||||
@@ -45,8 +45,8 @@ import { CancellationToken } from 'vs/base/common/cancellation';
|
|||||||
import 'sql/workbench/contrib/welcome/page/browser/az_data_welcome_page'; // {{SQL CARBON EDIT}}
|
import 'sql/workbench/contrib/welcome/page/browser/az_data_welcome_page'; // {{SQL CARBON EDIT}}
|
||||||
import { IHostService } from 'vs/workbench/services/host/browser/host';
|
import { IHostService } from 'vs/workbench/services/host/browser/host';
|
||||||
import { IProductService } from 'vs/platform/product/common/productService';
|
import { IProductService } from 'vs/platform/product/common/productService';
|
||||||
import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService';
|
|
||||||
import { IEditorOptions } from 'vs/platform/editor/common/editor';
|
import { IEditorOptions } from 'vs/platform/editor/common/editor';
|
||||||
|
import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService';
|
||||||
|
|
||||||
const configurationKey = 'workbench.startupEditor';
|
const configurationKey = 'workbench.startupEditor';
|
||||||
const oldConfigurationKey = 'workbench.welcome.enabled';
|
const oldConfigurationKey = 'workbench.welcome.enabled';
|
||||||
@@ -62,13 +62,14 @@ export class WelcomePageContribution implements IWorkbenchContribution {
|
|||||||
@IFileService fileService: IFileService,
|
@IFileService fileService: IFileService,
|
||||||
@IWorkspaceContextService contextService: IWorkspaceContextService,
|
@IWorkspaceContextService contextService: IWorkspaceContextService,
|
||||||
@ILifecycleService lifecycleService: ILifecycleService,
|
@ILifecycleService lifecycleService: ILifecycleService,
|
||||||
@IEditorService editorGroupsService: IEditorGroupsService,
|
@IWorkbenchLayoutService layoutService: IWorkbenchLayoutService,
|
||||||
@ICommandService private readonly commandService: ICommandService,
|
@ICommandService private readonly commandService: ICommandService,
|
||||||
) {
|
) {
|
||||||
const enabled = isWelcomePageEnabled(configurationService, contextService);
|
const enabled = isWelcomePageEnabled(configurationService, contextService);
|
||||||
if (enabled && lifecycleService.startupKind !== StartupKind.ReloadedWindow) {
|
if (enabled && lifecycleService.startupKind !== StartupKind.ReloadedWindow) {
|
||||||
backupFileService.hasBackups().then(hasBackups => {
|
backupFileService.hasBackups().then(hasBackups => {
|
||||||
if (!editorGroupsService.willRestoreEditors && !hasBackups) {
|
// Open the welcome even if we opened a set of default editors
|
||||||
|
if ((!editorService.activeEditor || layoutService.openedDefaultEditors) && !hasBackups) {
|
||||||
const openWithReadme = configurationService.getValue(configurationKey) === 'readme';
|
const openWithReadme = configurationService.getValue(configurationKey) === 'readme';
|
||||||
if (openWithReadme) {
|
if (openWithReadme) {
|
||||||
return Promise.all(contextService.getWorkspace().folders.map(folder => {
|
return Promise.all(contextService.getWorkspace().folders.map(folder => {
|
||||||
|
|||||||
@@ -116,7 +116,7 @@
|
|||||||
|
|
||||||
.file-icons-enabled .show-file-icons .vs_code_editor_walkthrough\.md-name-file-icon.md-ext-file-icon.ext-file-icon.markdown-lang-file-icon.file-icon::before {
|
.file-icons-enabled .show-file-icons .vs_code_editor_walkthrough\.md-name-file-icon.md-ext-file-icon.ext-file-icon.markdown-lang-file-icon.file-icon::before {
|
||||||
content: ' ';
|
content: ' ';
|
||||||
background-image: url('../../code-icon.svg');
|
background-image: url('../../../../browser/media/code-icon.svg');
|
||||||
}
|
}
|
||||||
|
|
||||||
.monaco-workbench .part.editor > .content .walkThroughContent .mac-only,
|
.monaco-workbench .part.editor > .content .walkThroughContent .mac-only,
|
||||||
|
|||||||
@@ -192,7 +192,7 @@ class NativeContextMenuService extends Disposable implements IContextMenuService
|
|||||||
private async runAction(actionRunner: IActionRunner, actionToRun: IAction, delegate: IContextMenuDelegate, event: IContextMenuEvent): Promise<void> {
|
private async runAction(actionRunner: IActionRunner, actionToRun: IAction, delegate: IContextMenuDelegate, event: IContextMenuEvent): Promise<void> {
|
||||||
this.telemetryService.publicLog2<WorkbenchActionExecutedEvent, WorkbenchActionExecutedClassification>('workbenchActionExecuted', { id: actionToRun.id, from: 'contextMenu' });
|
this.telemetryService.publicLog2<WorkbenchActionExecutedEvent, WorkbenchActionExecutedClassification>('workbenchActionExecuted', { id: actionToRun.id, from: 'contextMenu' });
|
||||||
|
|
||||||
const context = delegate.getActionsContext ? delegate.getActionsContext(event) : event;
|
const context = delegate.getActionsContext ? delegate.getActionsContext(event) : undefined;
|
||||||
|
|
||||||
const runnable = actionRunner.run(actionToRun, context);
|
const runnable = actionRunner.run(actionToRun, context);
|
||||||
if (runnable) {
|
if (runnable) {
|
||||||
|
|||||||
@@ -709,10 +709,17 @@ let schema: IJSONSchema = {
|
|||||||
'description': nls.localize('keybindings.json.key', "Key or key sequence (separated by space)"),
|
'description': nls.localize('keybindings.json.key', "Key or key sequence (separated by space)"),
|
||||||
},
|
},
|
||||||
'command': {
|
'command': {
|
||||||
'type': 'string',
|
'anyOf': [
|
||||||
'enum': commandsEnum,
|
{
|
||||||
'enumDescriptions': <any>commandsEnumDescriptions,
|
'type': 'string',
|
||||||
'description': nls.localize('keybindings.json.command', "Name of the command to execute"),
|
'enum': commandsEnum,
|
||||||
|
'enumDescriptions': <any>commandsEnumDescriptions,
|
||||||
|
'description': nls.localize('keybindings.json.command', "Name of the command to execute"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'type': 'string'
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
'when': {
|
'when': {
|
||||||
'type': 'string',
|
'type': 'string',
|
||||||
|
|||||||
@@ -224,4 +224,9 @@ export interface IWorkbenchLayoutService extends ILayoutService {
|
|||||||
* Returns the next visible view part in a given direction
|
* Returns the next visible view part in a given direction
|
||||||
*/
|
*/
|
||||||
getVisibleNeighborPart(part: Parts, direction: Direction): Parts | undefined;
|
getVisibleNeighborPart(part: Parts, direction: Direction): Parts | undefined;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* True if a default layout with default editors was applied at startup
|
||||||
|
*/
|
||||||
|
readonly openedDefaultEditors: boolean;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -370,6 +370,8 @@ export class TestLayoutService implements IWorkbenchLayoutService {
|
|||||||
|
|
||||||
_serviceBrand: undefined;
|
_serviceBrand: undefined;
|
||||||
|
|
||||||
|
openedDefaultEditors = false;
|
||||||
|
|
||||||
dimension: IDimension = { width: 800, height: 600 };
|
dimension: IDimension = { width: 800, height: 600 };
|
||||||
|
|
||||||
container: HTMLElement = window.document.body;
|
container: HTMLElement = window.document.body;
|
||||||
|
|||||||
@@ -146,18 +146,14 @@ interface IDefaultPanelLayout {
|
|||||||
}
|
}
|
||||||
|
|
||||||
interface IDefaultEditor {
|
interface IDefaultEditor {
|
||||||
path: string;
|
readonly uri: UriComponents;
|
||||||
scheme: string;
|
readonly openOnlyIfExists?: boolean;
|
||||||
active?: boolean;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
interface IDefaultLayout {
|
interface IDefaultLayout {
|
||||||
sidebar?: IDefaultSideBarLayout;
|
readonly sidebar?: IDefaultSideBarLayout;
|
||||||
panel?: IDefaultPanelLayout;
|
readonly panel?: IDefaultPanelLayout;
|
||||||
editors?: IDefaultEditor[];
|
readonly editors?: IDefaultEditor[];
|
||||||
|
|
||||||
// Internal only
|
|
||||||
firstRun?: boolean;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
interface IWorkbenchConstructionOptions {
|
interface IWorkbenchConstructionOptions {
|
||||||
@@ -270,6 +266,8 @@ interface IWorkbenchConstructionOptions {
|
|||||||
*/
|
*/
|
||||||
readonly homeIndicator?: IHomeIndicator;
|
readonly homeIndicator?: IHomeIndicator;
|
||||||
|
|
||||||
|
readonly defaultLayout?: IDefaultLayout;
|
||||||
|
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
|
|
||||||
@@ -286,8 +284,6 @@ interface IWorkbenchConstructionOptions {
|
|||||||
readonly driver?: boolean;
|
readonly driver?: boolean;
|
||||||
|
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
defaultLayout?: IDefaultLayout;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
interface IWorkbench {
|
interface IWorkbench {
|
||||||
@@ -421,6 +417,7 @@ export {
|
|||||||
IHomeIndicator,
|
IHomeIndicator,
|
||||||
|
|
||||||
// Default layout
|
// Default layout
|
||||||
|
IDefaultEditor,
|
||||||
IDefaultLayout,
|
IDefaultLayout,
|
||||||
IDefaultPanelLayout,
|
IDefaultPanelLayout,
|
||||||
IDefaultSideBarLayout,
|
IDefaultSideBarLayout,
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import { join } from 'path';
|
|||||||
|
|
||||||
export function setup(stableCodePath: string, testDataPath: string) {
|
export function setup(stableCodePath: string, testDataPath: string) {
|
||||||
|
|
||||||
describe('Data Migration: This test MUST run before releasing by providing the --stable-build command line argument', () => {
|
describe('Datamigration', () => {
|
||||||
it(`verifies opened editors are restored`, async function () {
|
it(`verifies opened editors are restored`, async function () {
|
||||||
if (!stableCodePath) {
|
if (!stableCodePath) {
|
||||||
this.skip();
|
this.skip();
|
||||||
|
|||||||
+31
-23
@@ -267,17 +267,7 @@ after(async function () {
|
|||||||
await new Promise((c, e) => rimraf(testDataPath, { maxBusyTries: 10 }, err => err ? e(err) : c()));
|
await new Promise((c, e) => rimraf(testDataPath, { maxBusyTries: 10 }, err => err ? e(err) : c()));
|
||||||
});
|
});
|
||||||
|
|
||||||
describe(`Smoke Tests (${opts.web ? 'Web' : 'Electron'})`, () => {
|
describe(`VSCode Smoke Tests (${opts.web ? 'Web' : 'Electron'})`, () => {
|
||||||
before(async function () {
|
|
||||||
const app = new Application(this.defaultOptions);
|
|
||||||
await app!.start(opts.web ? false : undefined);
|
|
||||||
this.app = app;
|
|
||||||
});
|
|
||||||
|
|
||||||
after(async function () {
|
|
||||||
await this.app.stop();
|
|
||||||
});
|
|
||||||
|
|
||||||
if (screenshotsPath) {
|
if (screenshotsPath) {
|
||||||
afterEach(async function () {
|
afterEach(async function () {
|
||||||
if (this.currentTest.state !== 'failed') {
|
if (this.currentTest.state !== 'failed') {
|
||||||
@@ -299,16 +289,34 @@ describe(`Smoke Tests (${opts.web ? 'Web' : 'Electron'})`, () => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
sqlMain();
|
/*if (!opts.web && opts['stable-build']) {
|
||||||
/*if (!opts.web) { setupDataMigrationTests(opts['stable-build'], testDataPath); }
|
describe(`Stable vs Insiders Smoke Tests: This test MUST run before releasing by providing the --stable-build command line argument`, () => {
|
||||||
if (!opts.web) { setupDataLossTests(); }
|
setupDataMigrationTests(opts['stable-build'], testDataPath);
|
||||||
if (!opts.web) { setupDataPreferencesTests(); }
|
});
|
||||||
setupDataSearchTests();
|
}*/
|
||||||
setupDataLanguagesTests();
|
|
||||||
setupDataEditorTests();
|
describe(`VSCode Smoke Tests (${opts.web ? 'Web' : 'Electron'})`, () => {
|
||||||
setupDataStatusbarTests(!!opts.web);
|
before(async function () {
|
||||||
if (!opts.web) { setupDataExtensionTests(); }
|
const app = new Application(this.defaultOptions);
|
||||||
if (!opts.web) { setupDataMultirootTests(); }
|
await app!.start(opts.web ? false : undefined);
|
||||||
if (!opts.web) { setupDataLocalizationTests(); }
|
this.app = app;
|
||||||
if (!opts.web) { setupLaunchTests(); }*/
|
});
|
||||||
|
|
||||||
|
after(async function () {
|
||||||
|
await this.app.stop();
|
||||||
|
});
|
||||||
|
|
||||||
|
sqlMain();
|
||||||
|
/*if (!opts.web) { setupDataLossTests(); }
|
||||||
|
if (!opts.web) { setupDataPreferencesTests(); }
|
||||||
|
setupDataSearchTests();
|
||||||
|
setupDataLanguagesTests();
|
||||||
|
setupDataEditorTests();
|
||||||
|
setupDataStatusbarTests(!!opts.web);
|
||||||
|
if (!opts.web) { setupDataExtensionTests(); }
|
||||||
|
if (!opts.web) { setupDataMultirootTests(); }
|
||||||
|
if (!opts.web) { setupDataLocalizationTests(); }
|
||||||
|
if (!opts.web) { setupLaunchTests(); }*/
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user