瀏覽代碼

Added support for a Quick Connect CLI command

Ash Neilson 1 年之前
父節點
當前提交
ac95f550d9
共有 2 個文件被更改,包括 30 次插入0 次删除
  1. 10 0
      app/lib/cli.ts
  2. 20 0
      tabby-core/src/cli.ts

+ 10 - 0
app/lib/cli.ts

@@ -28,6 +28,16 @@ export function parseArgs (argv: string[], cwd: string): any {
         .command('recent [index]', 'open a tab with a recent profile', {
         .command('recent [index]', 'open a tab with a recent profile', {
             profileNumber: { type: 'number' },
             profileNumber: { type: 'number' },
         })
         })
+        .command('quickConnect <providerId> <query>', 'open a tab for specified quick connect provider', yargs => {
+            return yargs.positional('providerId', {
+                describe: 'The name of a quick connect profile provider',
+                type: 'string',
+                choices: ['ssh', 'telnet'],
+            }).positional('query', {
+                describe: 'The quick connect query string',
+                type: 'string',
+            })
+        })
         .version(app.getVersion())
         .version(app.getVersion())
         .option('debug', {
         .option('debug', {
             alias: 'd',
             alias: 'd',

+ 20 - 0
tabby-core/src/cli.ts

@@ -2,6 +2,7 @@ import { Injectable } from '@angular/core'
 import { HostAppService } from './api/hostApp'
 import { HostAppService } from './api/hostApp'
 import { CLIHandler, CLIEvent } from './api/cli'
 import { CLIHandler, CLIEvent } from './api/cli'
 import { HostWindowService } from './api/hostWindow'
 import { HostWindowService } from './api/hostWindow'
+import { QuickConnectProfileProvider } from './api/profileProvider'
 import { ProfilesService } from './services/profiles.service'
 import { ProfilesService } from './services/profiles.service'
 
 
 @Injectable()
 @Injectable()
@@ -27,6 +28,10 @@ export class ProfileCLIHandler extends CLIHandler {
             this.handleOpenRecentProfile(event.argv.profileNumber)
             this.handleOpenRecentProfile(event.argv.profileNumber)
             return true
             return true
         }
         }
+        if (op === 'quickConnect') {
+            this.handleOpenQuickConnect(event.argv.providerId, event.argv.query)
+            return true
+        }
         return false
         return false
     }
     }
 
 
@@ -48,6 +53,21 @@ export class ProfileCLIHandler extends CLIHandler {
         this.profiles.openNewTabForProfile(profiles[profileNumber])
         this.profiles.openNewTabForProfile(profiles[profileNumber])
         this.hostWindow.bringToFront()
         this.hostWindow.bringToFront()
     }
     }
+
+    private async handleOpenQuickConnect (providerId: string, query: string) {
+        const provider = this.profiles.getProviders().find(x => x.id === providerId)
+        if(!provider || !(provider instanceof QuickConnectProfileProvider)) {
+            console.error(`Requested provider "${providerId}" not found`)
+            return
+        }
+        const profile = provider.quickConnect(query)
+        if(!profile) {
+            console.error(`Could not parse quick connect query "${query}"`)
+            return
+        }
+        this.profiles.openNewTabForProfile(profile)
+        this.hostWindow.bringToFront()
+    }
 }
 }
 
 
 @Injectable()
 @Injectable()