Browse Source

added hotkeys to open specific profiles

Eugene Pankov 6 years ago
parent
commit
1675312f75

+ 3 - 0
terminus-terminal/src/config.ts

@@ -6,6 +6,9 @@ export class TerminalConfigProvider extends ConfigProvider {
             shell: {
                 __nonStructural: true,
             },
+            profile: {
+                __nonStructural: true,
+            },
         },
         terminal: {
             frontend: 'xterm',

+ 14 - 5
terminus-terminal/src/hotkeys.ts

@@ -1,5 +1,6 @@
+import slug from 'slug'
 import { Injectable } from '@angular/core'
-import { IHotkeyDescription, HotkeyProvider } from 'terminus-core'
+import { IHotkeyDescription, HotkeyProvider, ConfigService } from 'terminus-core'
 import { TerminalService } from './services/terminal.service'
 
 @Injectable()
@@ -64,14 +65,22 @@ export class TerminalHotkeyProvider extends HotkeyProvider {
     ]
 
     constructor (
+        private config: ConfigService,
         private terminal: TerminalService,
     ) { super() }
 
     async provide (): Promise<IHotkeyDescription[]> {
         let shells = await this.terminal.shells$.toPromise()
-        return this.hotkeys.concat(shells.map(shell => ({
-            id: `shell.${shell.id}`,
-            name: `New tab: ${shell.name}`
-        })))
+        return [
+            ...this.hotkeys,
+            ...shells.map(shell => ({
+                id: `shell.${shell.id}`,
+                name: `New tab: ${shell.name}`
+            })),
+            ...this.config.store.terminal.profiles.map(profile => ({
+                id: `profile.${slug(profile.name)}`,
+                name: `New tab: ${profile.name}`
+            })),
+        ]
     }
 }

+ 8 - 0
terminus-terminal/src/index.ts

@@ -1,4 +1,5 @@
 import * as fs from 'mz/fs'
+import slug from 'slug'
 
 import { NgModule } from '@angular/core'
 import { BrowserModule } from '@angular/platform-browser'
@@ -166,6 +167,13 @@ export default class TerminalModule {
                     terminal.openTab(shell)
                 }
             }
+            if (hotkey.startsWith('profile.')) {
+                let profiles = config.store.terminal.profiles
+                let profile = profiles.find(x => slug(x.name) === hotkey.split('.')[1])
+                if (profile) {
+                    terminal.openTabWithOptions(profile.sessionOptions)
+                }
+            }
         })
 
         hostApp.cliOpenDirectory$.subscribe(async directory => {