Browse Source

better handling of CLI args - fixes #1436

Eugene Pankov 5 years ago
parent
commit
f103e71285
4 changed files with 17 additions and 7 deletions
  1. 1 1
      app/lib/app.ts
  2. 5 2
      app/lib/index.ts
  3. 3 2
      app/lib/window.ts
  4. 8 2
      terminus-core/src/services/hostApp.service.ts

+ 1 - 1
app/lib/app.ts

@@ -147,7 +147,7 @@ export class Application {
 
     handleSecondInstance (argv: string[], cwd: string): void {
         this.presentAllWindows()
-        this.windows[this.windows.length - 1].handleSecondInstance(argv, cwd)
+        this.windows[this.windows.length - 1].passCliArguments(argv, cwd, true)
     }
 
     private setupMenu () {

+ 5 - 2
app/lib/index.ts

@@ -53,7 +53,7 @@ if (argv.d) {
     })
 }
 
-app.on('ready', () => {
+app.on('ready', async () => {
     if (process.platform === 'darwin') {
         app.dock.setMenu(Menu.buildFromTemplate([
             {
@@ -65,5 +65,8 @@ app.on('ready', () => {
         ]))
     }
     application.init()
-    application.newWindow({ hidden: argv.hidden })
+
+    const window = await application.newWindow({ hidden: argv.hidden })
+    await window.ready
+    window.passCliArguments(process.argv, process.cwd(), false)
 })

+ 3 - 2
app/lib/window.ts

@@ -65,6 +65,7 @@ export class Window {
                 enableRemoteModule: true,
                 contextIsolation: false,
             },
+            maximizable: true,
             frame: false,
             show: false,
             backgroundColor: '#00000000',
@@ -225,8 +226,8 @@ export class Window {
         }
     }
 
-    handleSecondInstance (argv: string[], cwd: string): void {
-        this.send('host:second-instance', parseArgs(argv, cwd), cwd)
+    passCliArguments (argv: string[], cwd: string, secondInstance: boolean): void {
+        this.send('cli', parseArgs(argv, cwd), cwd, secondInstance)
     }
 
     private setupWindowManagement () {

+ 8 - 2
terminus-core/src/services/hostApp.service.ts

@@ -1,5 +1,6 @@
 import type { BrowserWindow, TouchBar, MenuItemConstructorOptions } from 'electron'
 import * as path from 'path'
+import * as fs from 'mz/fs'
 import shellEscape from 'shell-escape'
 import { Observable, Subject } from 'rxjs'
 import { Injectable, NgZone, EventEmitter } from '@angular/core'
@@ -150,9 +151,10 @@ export class HostAppService {
             this.zone.run(() => this.displaysChanged.next())
         })
 
-        electron.ipcRenderer.on('host:second-instance', (_$event, argv: any, cwd: string) => this.zone.run(() => {
+        electron.ipcRenderer.on('cli', (_$event, argv: any, cwd: string, secondInstance: boolean) => this.zone.run(async () => {
             this.logger.info('Second instance', argv)
             const op = argv._[0]
+            const opAsPath = path.resolve(cwd, op)
             if (op === 'open') {
                 this.cliOpenDirectory.next(path.resolve(cwd, argv.directory))
             } else if (op === 'run') {
@@ -167,7 +169,11 @@ export class HostAppService {
                 this.cliOpenProfile.next(argv.profileName)
             } else if (op === undefined) {
                 this.newWindow()
-            } else {
+            } else if ((await fs.lstat(opAsPath)).isDirectory()) {
+                this.cliOpenDirectory.next(opAsPath)
+            }
+
+            if (secondInstance) {
                 this.secondInstance.next()
             }
         }))