mirror of
https://github.com/Eugeny/tabby.git
synced 2024-09-19 17:07:08 +03:00
feat(tabby-terminal): Eugeny/tabby#5688 add global Save As Profile context menu
This commit is contained in:
parent
3d9b15a82d
commit
d98fbe8b44
@ -28,7 +28,7 @@ import { PathDropDecorator } from './features/pathDrop'
|
|||||||
import { ZModemDecorator } from './features/zmodem'
|
import { ZModemDecorator } from './features/zmodem'
|
||||||
import { TerminalConfigProvider } from './config'
|
import { TerminalConfigProvider } from './config'
|
||||||
import { TerminalHotkeyProvider } from './hotkeys'
|
import { TerminalHotkeyProvider } from './hotkeys'
|
||||||
import { CopyPasteContextMenu, MiscContextMenu, LegacyContextMenu, ReconnectContextMenu } from './tabContextMenu'
|
import { CopyPasteContextMenu, MiscContextMenu, LegacyContextMenu, ReconnectContextMenu, SaveAsProfileContextMenu } from './tabContextMenu'
|
||||||
|
|
||||||
import { Frontend } from './frontends/frontend'
|
import { Frontend } from './frontends/frontend'
|
||||||
import { XTermFrontend, XTermWebGLFrontend } from './frontends/xtermFrontend'
|
import { XTermFrontend, XTermWebGLFrontend } from './frontends/xtermFrontend'
|
||||||
@ -60,6 +60,7 @@ import { DefaultColorSchemes } from './colorSchemes'
|
|||||||
{ provide: TabContextMenuItemProvider, useClass: MiscContextMenu, multi: true },
|
{ provide: TabContextMenuItemProvider, useClass: MiscContextMenu, multi: true },
|
||||||
{ provide: TabContextMenuItemProvider, useClass: LegacyContextMenu, multi: true },
|
{ provide: TabContextMenuItemProvider, useClass: LegacyContextMenu, multi: true },
|
||||||
{ provide: TabContextMenuItemProvider, useClass: ReconnectContextMenu, multi: true },
|
{ provide: TabContextMenuItemProvider, useClass: ReconnectContextMenu, multi: true },
|
||||||
|
{ provide: TabContextMenuItemProvider, useClass: SaveAsProfileContextMenu, multi: true },
|
||||||
|
|
||||||
{ provide: CLIHandler, useClass: TerminalCLIHandler, multi: true },
|
{ provide: CLIHandler, useClass: TerminalCLIHandler, multi: true },
|
||||||
{ provide: TerminalColorSchemeProvider, useClass: DefaultColorSchemes, multi: true },
|
{ provide: TerminalColorSchemeProvider, useClass: DefaultColorSchemes, multi: true },
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import { Injectable, Optional, Inject } from '@angular/core'
|
import { Injectable, Optional, Inject } from '@angular/core'
|
||||||
import { BaseTabComponent, TabContextMenuItemProvider, NotificationsService, MenuItemOptions, TranslateService, SplitTabComponent } from 'tabby-core'
|
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
|
||||||
|
import { BaseTabComponent, TabContextMenuItemProvider, NotificationsService, MenuItemOptions, TranslateService, SplitTabComponent, PromptModalComponent, ConfigService } from 'tabby-core'
|
||||||
import { BaseTerminalTabComponent } from './api/baseTerminalTab.component'
|
import { BaseTerminalTabComponent } from './api/baseTerminalTab.component'
|
||||||
import { TerminalContextMenuItemProvider } from './api/contextMenuProvider'
|
import { TerminalContextMenuItemProvider } from './api/contextMenuProvider'
|
||||||
import { MultifocusService } from './services/multifocus.service'
|
import { MultifocusService } from './services/multifocus.service'
|
||||||
@ -150,3 +151,60 @@ export class LegacyContextMenu extends TabContextMenuItemProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @hidden */
|
||||||
|
@Injectable()
|
||||||
|
export class SaveAsProfileContextMenu extends TabContextMenuItemProvider {
|
||||||
|
constructor (
|
||||||
|
private config: ConfigService,
|
||||||
|
private ngbModal: NgbModal,
|
||||||
|
private notifications: NotificationsService,
|
||||||
|
private translate: TranslateService,
|
||||||
|
) {
|
||||||
|
super()
|
||||||
|
}
|
||||||
|
|
||||||
|
async getItems (tab: BaseTabComponent): Promise<MenuItemOptions[]> {
|
||||||
|
if (tab instanceof BaseTerminalTabComponent) {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
label: this.translate.instant('Save as profile'),
|
||||||
|
click: async () => {
|
||||||
|
const modal = this.ngbModal.open(PromptModalComponent)
|
||||||
|
modal.componentInstance.prompt = this.translate.instant('New profile name')
|
||||||
|
const name = (await modal.result)?.value
|
||||||
|
if (!name) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
let options = {...tab.profile.options}
|
||||||
|
const cwd = await tab.session?.getWorkingDirectory() ?? tab.profile.options.cwd
|
||||||
|
if (cwd) {
|
||||||
|
options = {
|
||||||
|
...options,
|
||||||
|
cwd
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const profile = {
|
||||||
|
options,
|
||||||
|
name,
|
||||||
|
type: tab.profile.type,
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(profile)
|
||||||
|
|
||||||
|
this.config.store.profiles = [
|
||||||
|
...this.config.store.profiles,
|
||||||
|
profile,
|
||||||
|
]
|
||||||
|
this.config.save()
|
||||||
|
this.notifications.info(this.translate.instant('Saved'))
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user