tabby/terminus-terminal/src/buttonProvider.ts
2019-09-18 20:56:59 +02:00

54 lines
1.8 KiB
TypeScript

import * as fs from 'mz/fs'
import { Injectable } from '@angular/core'
import { ToolbarButtonProvider, ToolbarButton, ElectronService } from 'terminus-core'
import { TerminalService } from './services/terminal.service'
/** @hidden */
@Injectable()
export class ButtonProvider extends ToolbarButtonProvider {
constructor (
electron: ElectronService,
private terminal: TerminalService,
) {
super()
if (!electron.remote.process.env.TERMINUS_DEV) {
setImmediate(async () => {
const argv: string[] = electron.remote.process.argv
for (const arg of argv.slice(1).concat([electron.remote.process.argv0])) {
if (await fs.exists(arg)) {
if ((await fs.stat(arg)).isDirectory()) {
this.terminal.openTab(undefined, arg)
}
}
}
})
}
}
provide (): ToolbarButton[] {
return [
{
icon: require('./icons/plus.svg'),
title: 'New terminal',
touchBarNSImage: 'NSTouchBarAddDetailTemplate',
click: async () => {
this.terminal.openTab()
},
},
{
icon: require('./icons/profiles.svg'),
title: 'New terminal with profile',
submenu: async () => {
const profiles = await this.terminal.getProfiles()
return profiles.map(profile => ({
icon: profile.icon,
title: profile.name,
click: () => this.terminal.openTab(profile),
}))
},
},
]
}
}