From 6d50c71f41c61cd2c8a4e4471bc2e8dbb86ea5b1 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Fri, 15 Jan 2021 17:32:07 +0100 Subject: [PATCH] add editor command, fyi @dbaeumer --- .../api/browser/extensionHost.contribution.ts | 1 + .../api/browser/mainThreadEditorTabs.ts | 52 +++++++++++++++++++ .../workbench/api/common/extHost.protocol.ts | 5 ++ 3 files changed, 58 insertions(+) create mode 100644 src/vs/workbench/api/browser/mainThreadEditorTabs.ts diff --git a/src/vs/workbench/api/browser/extensionHost.contribution.ts b/src/vs/workbench/api/browser/extensionHost.contribution.ts index e94dfa8a519..b0708e2d8b2 100644 --- a/src/vs/workbench/api/browser/extensionHost.contribution.ts +++ b/src/vs/workbench/api/browser/extensionHost.contribution.ts @@ -30,6 +30,7 @@ import './mainThreadDocuments'; import './mainThreadDocumentsAndEditors'; import './mainThreadEditor'; import './mainThreadEditors'; +import './mainThreadEditorTabs'; import './mainThreadErrors'; import './mainThreadExtensionService'; import './mainThreadFileSystem'; diff --git a/src/vs/workbench/api/browser/mainThreadEditorTabs.ts b/src/vs/workbench/api/browser/mainThreadEditorTabs.ts new file mode 100644 index 00000000000..962cf85f267 --- /dev/null +++ b/src/vs/workbench/api/browser/mainThreadEditorTabs.ts @@ -0,0 +1,52 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { IDisposable } from 'vs/base/common/lifecycle'; +import { URI } from 'vs/base/common/uri'; +import { CommandsRegistry } from 'vs/platform/commands/common/commands'; +import { IExtHostContext, MainContext } from 'vs/workbench/api/common/extHost.protocol'; +import { extHostNamedCustomer } from 'vs/workbench/api/common/extHostCustomers'; +import { Verbosity } from 'vs/workbench/common/editor'; +import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; + +export interface ITabInfo { + name: string; + resource: URI; +} + +@extHostNamedCustomer(MainContext.MainThreadEditorTabs) +export class MainThreadEditorTabs { + + private readonly _registration: IDisposable; + + constructor( + _extHostContext: IExtHostContext, + @IEditorGroupsService private readonly _editorGroupsService: IEditorGroupsService, + ) { + this._registration = CommandsRegistry.registerCommand('_textEditorTabs', () => { + return this._fetchTextEditors(); + }); + } + + dispose(): void { + this._registration.dispose(); + } + + private _fetchTextEditors(): ITabInfo[] { + const result: ITabInfo[] = []; + for (const group of this._editorGroupsService.groups) { + for (const editor of group.editors) { + if (editor.isDisposed() || !editor.resource) { + continue; + } + result.push({ + name: editor.getTitle(Verbosity.SHORT) ?? '', + resource: editor.resource + }); + } + } + return result; + } +} diff --git a/src/vs/workbench/api/common/extHost.protocol.ts b/src/vs/workbench/api/common/extHost.protocol.ts index 34618fde866..9ed524ac3b5 100644 --- a/src/vs/workbench/api/common/extHost.protocol.ts +++ b/src/vs/workbench/api/common/extHost.protocol.ts @@ -604,6 +604,10 @@ export interface MainThreadEditorInsetsShape extends IDisposable { $postMessage(handle: number, value: any): Promise; } +export interface MainThreadEditorTabsShape extends IDisposable { + +} + export interface ExtHostEditorInsetsShape { $onDidDispose(handle: number): void; $onDidReceiveMessage(handle: number, message: any): void; @@ -1839,6 +1843,7 @@ export const MainContext = { MainThreadDocumentContentProviders: createMainId('MainThreadDocumentContentProviders'), MainThreadTextEditors: createMainId('MainThreadTextEditors'), MainThreadEditorInsets: createMainId('MainThreadEditorInsets'), + MainThreadEditorTabs: createMainId('MainThreadEditorTabs'), MainThreadErrors: createMainId('MainThreadErrors'), MainThreadTreeViews: createMainId('MainThreadTreeViews'), MainThreadDownloadService: createMainId('MainThreadDownloadService'),