Просмотр исходного кода

cli option to launch a specific profile

Eugene Pankov 7 лет назад
Родитель
Сommit
1da7c85973
3 измененных файлов с 20 добавлено и 0 удалено
  1. 3 0
      app/lib/cli.ts
  2. 4 0
      terminus-core/src/services/hostApp.service.ts
  3. 13 0
      terminus-terminal/src/index.ts

+ 3 - 0
app/lib/cli.ts

@@ -13,6 +13,9 @@ export function parseArgs (argv, cwd) {
         .command('run [command...]', 'run a command in the terminal', {
             command: { type: 'string' },
         })
+        .command('profile [profileName]', 'open a tab with specified profile', {
+            profileName: { type: 'string' },
+        })
         .command('paste [text]', 'paste stdin into the active tab', yargs => {
             return yargs.option('escape', {
                 alias: 'e',

+ 4 - 0
terminus-core/src/services/hostApp.service.ts

@@ -27,6 +27,7 @@ export class HostAppService {
     private cliOpenDirectory = new Subject<string>()
     private cliRunCommand = new Subject<string[]>()
     private cliPaste = new Subject<string>()
+    private cliOpenProfile = new Subject<string>()
     private configChangeBroadcast = new Subject<void>()
     private windowCloseRequest = new Subject<void>()
     private logger: Logger
@@ -37,6 +38,7 @@ export class HostAppService {
     get cliOpenDirectory$ (): Observable<string> { return this.cliOpenDirectory }
     get cliRunCommand$ (): Observable<string[]> { return this.cliRunCommand }
     get cliPaste$ (): Observable<string> { return this.cliPaste }
+    get cliOpenProfile$ (): Observable<string> { return this.cliOpenProfile }
     get configChangeBroadcast$ (): Observable<void> { return this.configChangeBroadcast }
     get windowCloseRequest$ (): Observable<void> { return this.windowCloseRequest }
 
@@ -91,6 +93,8 @@ export class HostAppService {
                     text = shellEscape([text])
                 }
                 this.cliPaste.next(text)
+            } else if (op === 'profile') {
+                this.cliOpenProfile.next(argv.profileName)
             } else {
                 this.secondInstance.next()
             }

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

@@ -164,6 +164,7 @@ export default class TerminalModule {
                 }
             }
         })
+
         hostApp.cliOpenDirectory$.subscribe(async directory => {
             if (await fs.exists(directory)) {
                 if ((await fs.stat(directory)).isDirectory()) {
@@ -172,6 +173,7 @@ export default class TerminalModule {
                 }
             }
         })
+
         hostApp.cliRunCommand$.subscribe(async command => {
             terminal.openTab({
                 id: '',
@@ -180,6 +182,7 @@ export default class TerminalModule {
             }, null, true)
             hostApp.bringToFront()
         })
+
         hostApp.cliPaste$.subscribe(text => {
             if (app.activeTab instanceof TerminalTabComponent && app.activeTab.session) {
                 (app.activeTab as TerminalTabComponent).sendInput(text)
@@ -187,6 +190,16 @@ export default class TerminalModule {
             }
         })
 
+        hostApp.cliOpenProfile$.subscribe(async profileName => {
+            let profile = config.store.terminal.profiles.find(x => x.name === profileName)
+            if (!profile) {
+                console.error('Requested profile', profileName, 'not found')
+                return
+            }
+            terminal.openTabWithOptions(profile.sessionOptions)
+            hostApp.bringToFront()
+        })
+
         dockMenu.update()
     }
 }