mirror of
https://github.com/Eugeny/tabby.git
synced 2025-06-17 18:09:59 +00:00
285 lines
8.8 KiB
TypeScript
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, '-')
|
|
}
|
|
}
|