tabby/tabby-core/src/hotkeys.ts
2022-11-01 17:13:23 +01:00

285 lines
8.8 KiB
TypeScript

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<HotkeyDescription[]> {
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<Profile>): string {
return (profile.id ?? profile.name).replace(/\./g, '-')
}
}