diff --git a/src/vs/workbench/api/browser/mainThreadEditorTabs.ts b/src/vs/workbench/api/browser/mainThreadEditorTabs.ts index af3afd53c47..f8683908975 100644 --- a/src/vs/workbench/api/browser/mainThreadEditorTabs.ts +++ b/src/vs/workbench/api/browser/mainThreadEditorTabs.ts @@ -5,7 +5,7 @@ import { DisposableStore } from 'vs/base/common/lifecycle'; import { URI } from 'vs/base/common/uri'; -import { ExtHostContext, IExtHostEditorTabsShape, MainContext, IEditorTabDto, IEditorTabGroupDto } from 'vs/workbench/api/common/extHost.protocol'; +import { ExtHostContext, IExtHostEditorTabsShape, MainContext, IEditorTabDto, IEditorTabGroupDto, TabKind } from 'vs/workbench/api/common/extHost.protocol'; import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers'; import { EditorResourceAccessor, IUntypedEditorInput, SideBySideEditor, DEFAULT_EDITOR_ASSOCIATION, GroupModelChangeKind } from 'vs/workbench/common/editor'; import { DiffEditorInput } from 'vs/workbench/common/editor/diffEditorInput'; @@ -48,12 +48,14 @@ export class MainThreadEditorTabs { */ private _buildTabObject(editor: EditorInput, group: IEditorGroup): IEditorTabDto { // Even though the id isn't a diff / sideBySide on the main side we need to let the ext host know what type of editor it is - const editorId = editor instanceof DiffEditorInput ? 'diff' : editor instanceof SideBySideEditorInput ? 'sideBySide' : editor.editorId; + const editorId = editor.editorId; + const tabKind = editor instanceof DiffEditorInput ? TabKind.DIFF : editor instanceof SideBySideEditorInput ? TabKind.SIDEBYSIDE : TabKind.SINGULAR; const tab: IEditorTabDto = { viewColumn: editorGroupToColumn(this._editorGroupsService, group), label: editor.getName(), resource: editor instanceof SideBySideEditorInput ? EditorResourceAccessor.getCanonicalUri(editor, { supportSideBySide: SideBySideEditor.PRIMARY }) : EditorResourceAccessor.getCanonicalUri(editor), editorId, + kind: tabKind, additionalResourcesAndViewIds: [], isActive: group.isActive(editor), isDirty: editor.isDirty() diff --git a/src/vs/workbench/api/common/extHost.api.impl.ts b/src/vs/workbench/api/common/extHost.api.impl.ts index de7580fc921..86bc738b792 100644 --- a/src/vs/workbench/api/common/extHost.api.impl.ts +++ b/src/vs/workbench/api/common/extHost.api.impl.ts @@ -13,7 +13,7 @@ import { OverviewRulerLane } from 'vs/editor/common/model'; import * as languageConfiguration from 'vs/editor/common/languages/languageConfiguration'; import { score } from 'vs/editor/common/languageSelector'; import * as files from 'vs/platform/files/common/files'; -import { ExtHostContext, MainContext, CandidatePortSource, ExtHostLogLevelServiceShape } from 'vs/workbench/api/common/extHost.protocol'; +import { ExtHostContext, MainContext, CandidatePortSource, ExtHostLogLevelServiceShape, TabKind } from 'vs/workbench/api/common/extHost.protocol'; import { UIKind } from 'vs/workbench/services/extensions/common/extensionHostProtocol'; import { ExtHostApiCommands } from 'vs/workbench/api/common/extHostApiCommands'; import { ExtHostClipboard } from 'vs/workbench/api/common/extHostClipboard'; @@ -1249,6 +1249,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I SymbolInformation: extHostTypes.SymbolInformation, SymbolKind: extHostTypes.SymbolKind, SymbolTag: extHostTypes.SymbolTag, + TabKind: TabKind, Task: extHostTypes.Task, TaskGroup: extHostTypes.TaskGroup, TaskPanelKind: extHostTypes.TaskPanelKind, diff --git a/src/vs/workbench/api/common/extHost.protocol.ts b/src/vs/workbench/api/common/extHost.protocol.ts index ea632c99395..f5c4a615e34 100644 --- a/src/vs/workbench/api/common/extHost.protocol.ts +++ b/src/vs/workbench/api/common/extHost.protocol.ts @@ -625,6 +625,13 @@ export interface IEditorTabGroupDto { groupId: number; } +export enum TabKind { + SINGULAR = 0, + DIFF = 1, + SIDEBYSIDE = 2, + OTHER = 3 +} + export interface IEditorTabDto { viewColumn: EditorGroupColumn; label: string; @@ -632,6 +639,7 @@ export interface IEditorTabDto { editorId?: string; isActive: boolean; isDirty: boolean; + kind: TabKind; additionalResourcesAndViewIds: { resource?: UriComponents; viewId?: string }[]; } diff --git a/src/vs/workbench/api/common/extHostEditorTabs.ts b/src/vs/workbench/api/common/extHostEditorTabs.ts index 1f780100c5e..29a2bfb42ec 100644 --- a/src/vs/workbench/api/common/extHostEditorTabs.ts +++ b/src/vs/workbench/api/common/extHostEditorTabs.ts @@ -5,7 +5,7 @@ import type * as vscode from 'vscode'; import * as typeConverters from 'vs/workbench/api/common/extHostTypeConverters'; -import { IEditorTabDto, IEditorTabGroupDto, IExtHostEditorTabsShape, MainContext, MainThreadEditorTabsShape } from 'vs/workbench/api/common/extHost.protocol'; +import { IEditorTabDto, IEditorTabGroupDto, IExtHostEditorTabsShape, MainContext, MainThreadEditorTabsShape, TabKind } from 'vs/workbench/api/common/extHost.protocol'; import { URI } from 'vs/base/common/uri'; import { Emitter, Event } from 'vs/base/common/event'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; @@ -17,6 +17,7 @@ export interface IEditorTab { resource: vscode.Uri | undefined; viewId: string | undefined; isActive: boolean; + kind: TabKind; isDirty: boolean; additionalResourcesAndViewIds: { resource: vscode.Uri | undefined; viewId: string | undefined }[]; move(index: number, viewColumn: ViewColumn): Promise; @@ -92,6 +93,7 @@ export class ExtHostEditorTabs implements IExtHostEditorTabs { additionalResourcesAndViewIds: tabDto.additionalResourcesAndViewIds.map(({ resource, viewId }) => ({ resource: URI.revive(resource), viewId })), viewId: tabDto.editorId, isActive: tabDto.isActive, + kind: tabDto.kind, isDirty: tabDto.isDirty, move: async (index: number, viewColumn: ViewColumn) => { this._proxy.$moveTab(tabDto, index, typeConverters.ViewColumn.from(viewColumn)); diff --git a/src/vscode-dts/vscode.proposed.tabs.d.ts b/src/vscode-dts/vscode.proposed.tabs.d.ts index 09fb65e6d7d..3f2ed50f451 100644 --- a/src/vscode-dts/vscode.proposed.tabs.d.ts +++ b/src/vscode-dts/vscode.proposed.tabs.d.ts @@ -7,6 +7,13 @@ declare module 'vscode' { // https://github.com/Microsoft/vscode/issues/15178 + export enum TabKind { + SINGULAR = 0, + DIFF = 1, + SIDEBYSIDE = 2, + OTHER = 3 + } + /** * Represents a tab within the window */ @@ -55,6 +62,11 @@ declare module 'vscode' { */ readonly isDirty: boolean; + /** + * Indicates the type of tab it is. + */ + readonly kind: TabKind; + /** * Moves a tab to the given index within the column. * If the index is out of range, the tab will be moved to the end of the column.