import { Injectable, Optional, Inject } from '@angular/core' import { BaseTabComponent, TabContextMenuItemProvider, TabHeaderComponent, NotificationsService, MenuItemOptions } from 'tabby-core' import { BaseTerminalTabComponent } from './api/baseTerminalTab.component' import { TerminalContextMenuItemProvider } from './api/contextMenuProvider' /** @hidden */ @Injectable() export class CopyPasteContextMenu extends TabContextMenuItemProvider { weight = -10 constructor ( private notifications: NotificationsService, ) { super() } async getItems (tab: BaseTabComponent, tabHeader?: TabHeaderComponent): Promise { if (tabHeader) { return [] } if (tab instanceof BaseTerminalTabComponent) { return [ { label: 'Copy', click: (): void => { setTimeout(() => { tab.frontend?.copySelection() this.notifications.notice('Copied') }) }, }, { label: 'Paste', click: () => tab.paste(), }, ] } return [] } } /** @hidden */ @Injectable() export class MiscContextMenu extends TabContextMenuItemProvider { weight = 1 async getItems (tab: BaseTabComponent): Promise { if (tab instanceof BaseTerminalTabComponent && tab.session?.supportsWorkingDirectory()) { return [{ label: 'Copy current path', click: () => tab.copyCurrentPath(), }] } return [] } } /** @hidden */ @Injectable() export class LegacyContextMenu extends TabContextMenuItemProvider { weight = 1 constructor ( @Optional() @Inject(TerminalContextMenuItemProvider) protected contextMenuProviders: TerminalContextMenuItemProvider[]|null, ) { super() } async getItems (tab: BaseTabComponent, _tabHeader?: TabHeaderComponent): Promise { if (!this.contextMenuProviders) { return [] } if (tab instanceof BaseTerminalTabComponent) { let items: MenuItemOptions[] = [] for (const p of this.contextMenuProviders) { items = items.concat(await p.getItems(tab)) } return items } return [] } }