import { Injectable } from '@angular/core' import { TranslateService } from '@ngx-translate/core' import { ProfilesService } from './services/profiles.service' import { HotkeyDescription, HotkeyProvider } from './api/hotkeyProvider' import { PartialProfile, Profile } from './api' /** @hidden */ @Injectable() export class AppHotkeyProvider extends HotkeyProvider { hotkeys: HotkeyDescription[] = [ { id: 'command-selector', name: this.translate.instant('Show command selector'), }, { id: 'profile-selector', name: this.translate.instant('Show profile selector'), }, { id: 'toggle-fullscreen', name: this.translate.instant('Toggle fullscreen mode'), }, { id: 'rename-tab', name: this.translate.instant('Rename tab'), }, { id: 'close-tab', name: this.translate.instant('Close tab'), }, { id: 'reopen-tab', name: this.translate.instant('Reopen last tab'), }, { id: 'toggle-last-tab', name: this.translate.instant('Toggle last tab'), }, { id: 'next-tab', name: this.translate.instant('Next tab'), }, { id: 'previous-tab', name: this.translate.instant('Previous tab'), }, { id: 'move-tab-left', name: this.translate.instant('Move tab to the left'), }, { id: 'move-tab-right', name: this.translate.instant('Move tab to the right'), }, { id: 'rearrange-panes', name: this.translate.instant('Show pane labels (for rearranging)'), }, { id: 'duplicate-tab', name: this.translate.instant('Duplicate tab'), }, { id: 'restart-tab', name: this.translate.instant('Restart tab'), }, { id: 'explode-tab', name: this.translate.instant('Turn current tab\'s panes into separate tabs'), }, { id: 'combine-tabs', name: this.translate.instant('Combine all tabs into the current tab'), }, { id: 'tab-1', name: this.translate.instant('Tab {number}', { number: 1 }), }, { id: 'tab-2', name: this.translate.instant('Tab {number}', { number: 2 }), }, { id: 'tab-3', name: this.translate.instant('Tab {number}', { number: 3 }), }, { id: 'tab-4', name: this.translate.instant('Tab {number}', { number: 4 }), }, { id: 'tab-5', name: this.translate.instant('Tab {number}', { number: 5 }), }, { id: 'tab-6', name: this.translate.instant('Tab {number}', { number: 6 }), }, { id: 'tab-7', name: this.translate.instant('Tab {number}', { number: 7 }), }, { id: 'tab-8', name: this.translate.instant('Tab {number}', { number: 8 }), }, { id: 'tab-9', name: this.translate.instant('Tab {number}', { number: 9 }), }, { id: 'tab-10', name: this.translate.instant('Tab {number}', { number: 10 }), }, { id: 'tab-11', name: this.translate.instant('Tab {number}', { number: 11 }), }, { id: 'tab-12', name: this.translate.instant('Tab {number}', { number: 12 }), }, { id: 'tab-13', name: this.translate.instant('Tab {number}', { number: 13 }), }, { id: 'tab-14', name: this.translate.instant('Tab {number}', { number: 14 }), }, { id: 'tab-15', name: this.translate.instant('Tab {number}', { number: 15 }), }, { id: 'tab-16', name: this.translate.instant('Tab {number}', { number: 16 }), }, { id: 'tab-17', name: this.translate.instant('Tab {number}', { number: 17 }), }, { id: 'tab-18', name: this.translate.instant('Tab {number}', { number: 18 }), }, { id: 'tab-19', name: this.translate.instant('Tab {number}', { number: 19 }), }, { id: 'tab-20', name: this.translate.instant('Tab {number}', { number: 20 }), }, { id: 'split-right', name: this.translate.instant('Split to the right'), }, { id: 'split-bottom', name: this.translate.instant('Split to the bottom'), }, { id: 'split-left', name: this.translate.instant('Split to the left'), }, { id: 'split-top', name: this.translate.instant('Split to the top'), }, { id: 'pane-maximize', name: this.translate.instant('Maximize the active pane'), }, { id: 'pane-nav-up', name: this.translate.instant('Focus the pane above'), }, { id: 'pane-nav-down', name: this.translate.instant('Focus the pane below'), }, { id: 'pane-nav-left', name: this.translate.instant('Focus the pane on the left'), }, { id: 'pane-nav-right', name: this.translate.instant('Focus the pane on the right'), }, { id: 'pane-nav-previous', name: this.translate.instant('Focus previous pane'), }, { id: 'pane-nav-next', name: this.translate.instant('Focus next pane'), }, { id: 'pane-nav-1', name: this.translate.instant('Focus pane {number}', { number: 1 }), }, { id: 'pane-nav-2', name: this.translate.instant('Focus pane {number}', { number: 2 }), }, { id: 'pane-nav-3', name: this.translate.instant('Focus pane {number}', { number: 3 }), }, { id: 'pane-nav-4', name: this.translate.instant('Focus pane {number}', { number: 4 }), }, { id: 'pane-nav-5', name: this.translate.instant('Focus pane {number}', { number: 5 }), }, { id: 'pane-nav-6', name: this.translate.instant('Focus pane {number}', { number: 6 }), }, { id: 'pane-nav-7', name: this.translate.instant('Focus pane {number}', { number: 7 }), }, { id: 'pane-nav-8', name: this.translate.instant('Focus pane {number}', { number: 8 }), }, { id: 'pane-nav-9', name: this.translate.instant('Focus pane {number}', { number: 9 }), }, { id: 'switch-profile', name: this.translate.instant('Switch profile in the active pane'), }, { id: 'close-pane', name: this.translate.instant('Close focused pane'), }, { id: 'pane-increase-vertical', name: this.translate.instant('Increase vertical split size'), }, { id: 'pane-decrease-vertical', name: this.translate.instant('Decrease vertical split size'), }, { id: 'pane-increase-horizontal', name: this.translate.instant('Increase horizontal split size'), }, { id: 'pane-decrease-horizontal', name: this.translate.instant('Decrease horizontal split size'), }, ] constructor ( private profilesService: ProfilesService, private translate: TranslateService, ) { super() } async provide (): Promise { const profiles = await this.profilesService.getProfiles() return [ ...this.hotkeys, ...profiles.map(profile => ({ id: `profile.${AppHotkeyProvider.getProfileHotkeyName(profile)}`, name: this.translate.instant('New tab: {profile}', { profile: profile.name }), })), ...this.profilesService.getProviders().map(provider => ({ id: `profile-selectors.${provider.id}`, name: this.translate.instant('Show {type} profile selector', { type: provider.name }), })), ] } static getProfileHotkeyName (profile: PartialProfile): string { return (profile.id ?? profile.name).replace(/\./g, '-') } }