mirror of
https://github.com/Eugeny/tabby.git
synced 2025-06-16 17:40:00 +00:00
88 lines
3.3 KiB
TypeScript
88 lines
3.3 KiB
TypeScript
import { Inject, Injectable, Optional } from '@angular/core'
|
|
import { ConfigService, BaseTabComponent, TabContextMenuItemProvider, MenuItemOptions, ProfilesService, TranslateService } from 'tabby-core'
|
|
import { TerminalTabComponent } from './components/terminalTab.component'
|
|
import { TerminalService } from './services/terminal.service'
|
|
import { LocalProfile, UACService } from './api'
|
|
|
|
/** @hidden */
|
|
@Injectable()
|
|
export class NewTabContextMenu extends TabContextMenuItemProvider {
|
|
weight = 10
|
|
|
|
constructor (
|
|
public config: ConfigService,
|
|
private profilesService: ProfilesService,
|
|
private terminalService: TerminalService,
|
|
@Optional() @Inject(UACService) private uac: UACService|undefined,
|
|
private translate: TranslateService,
|
|
) {
|
|
super()
|
|
}
|
|
|
|
async getItems (tab: BaseTabComponent, tabHeader?: boolean): Promise<MenuItemOptions[]> {
|
|
const profiles = (await this.profilesService.getProfiles()).filter(x => x.type === 'local') as LocalProfile[]
|
|
|
|
const items: MenuItemOptions[] = [
|
|
{
|
|
label: this.translate.instant('New terminal'),
|
|
click: () => {
|
|
if (tab instanceof TerminalTabComponent) {
|
|
this.profilesService.openNewTabForProfile(tab.profile)
|
|
} else {
|
|
this.terminalService.openTab()
|
|
}
|
|
},
|
|
},
|
|
{
|
|
label: this.translate.instant('New with profile'),
|
|
submenu: profiles.map(profile => ({
|
|
label: profile.name,
|
|
click: async () => {
|
|
let workingDirectory = profile.options.cwd
|
|
if (!workingDirectory && tab instanceof TerminalTabComponent) {
|
|
workingDirectory = await tab.session?.getWorkingDirectory() ?? undefined
|
|
}
|
|
await this.terminalService.openTab(profile, workingDirectory)
|
|
},
|
|
})),
|
|
},
|
|
]
|
|
|
|
if (this.uac?.isAvailable) {
|
|
items.push({
|
|
label: this.translate.instant('New admin tab'),
|
|
submenu: profiles.map(profile => ({
|
|
label: profile.name,
|
|
click: () => {
|
|
this.profilesService.openNewTabForProfile({
|
|
...profile,
|
|
options: {
|
|
...profile.options,
|
|
runAsAdministrator: true,
|
|
},
|
|
})
|
|
},
|
|
})),
|
|
})
|
|
}
|
|
|
|
if (tab instanceof TerminalTabComponent && tabHeader && this.uac?.isAvailable) {
|
|
const terminalTab = tab
|
|
items.push({
|
|
label: this.translate.instant('Duplicate as administrator'),
|
|
click: () => {
|
|
this.profilesService.openNewTabForProfile({
|
|
...terminalTab.profile,
|
|
options: {
|
|
...terminalTab.profile.options,
|
|
runAsAdministrator: true,
|
|
},
|
|
})
|
|
},
|
|
})
|
|
}
|
|
|
|
return items
|
|
}
|
|
}
|