From 41b6e1d54ec28bc28f525991c3385987568f5fa7 Mon Sep 17 00:00:00 2001 From: Eugene Pankov Date: Wed, 2 Aug 2017 13:47:00 +0200 Subject: [PATCH] expose TerminalService --- app/src/plugins.ts | 5 ++- terminus-community-color-schemes/package.json | 2 +- terminus-core/package.json | 2 +- terminus-plugin-manager/package.json | 2 +- terminus-settings/package.json | 2 +- terminus-terminal/package.json | 2 +- terminus-terminal/src/api.ts | 1 + terminus-terminal/src/buttonProvider.ts | 28 ++----------- terminus-terminal/src/hterm.ts | 4 +- terminus-terminal/src/index.ts | 3 ++ .../src/services/terminal.service.ts | 40 +++++++++++++++++++ 11 files changed, 59 insertions(+), 32 deletions(-) create mode 100644 terminus-terminal/src/services/terminal.service.ts diff --git a/app/src/plugins.ts b/app/src/plugins.ts index 60072267..4480275e 100644 --- a/app/src/plugins.ts +++ b/app/src/plugins.ts @@ -108,8 +108,9 @@ export async function findPlugins (): Promise { continue } - if (foundPlugins.some(x => x.name === pluginName)) { - console.info(`Plugin ${pluginName} already exists`) + if (foundPlugins.some(x => x.name === pluginName.substring('terminus-'.length))) { + console.info(`Plugin ${pluginName} already exists, overriding`) + foundPlugins = foundPlugins.filter(x => x.name !== pluginName.substring('terminus-'.length)) } try { diff --git a/terminus-community-color-schemes/package.json b/terminus-community-color-schemes/package.json index 50cf28bf..bde749c4 100644 --- a/terminus-community-color-schemes/package.json +++ b/terminus-community-color-schemes/package.json @@ -1,6 +1,6 @@ { "name": "terminus-community-color-schemes", - "version": "1.0.0-alpha.16-8-gfc060ac", + "version": "1.0.0-alpha.23-6-g1c62f30", "description": "Community color schemes for Terminus", "keywords": [ "terminus-plugin" diff --git a/terminus-core/package.json b/terminus-core/package.json index 3b0d638b..521f05aa 100644 --- a/terminus-core/package.json +++ b/terminus-core/package.json @@ -1,6 +1,6 @@ { "name": "terminus-core", - "version": "1.0.0-alpha.16-8-gfc060ac", + "version": "1.0.0-alpha.23-6-g1c62f30", "description": "Terminus core", "keywords": [ "terminus-plugin" diff --git a/terminus-plugin-manager/package.json b/terminus-plugin-manager/package.json index e7f73126..02fad725 100644 --- a/terminus-plugin-manager/package.json +++ b/terminus-plugin-manager/package.json @@ -1,6 +1,6 @@ { "name": "terminus-plugin-manager", - "version": "1.0.0-alpha.16-8-gfc060ac", + "version": "1.0.0-alpha.23-6-g1c62f30", "description": "Terminus' plugin manager", "keywords": [ "terminus-plugin" diff --git a/terminus-settings/package.json b/terminus-settings/package.json index ae878982..8c1d6485 100644 --- a/terminus-settings/package.json +++ b/terminus-settings/package.json @@ -1,6 +1,6 @@ { "name": "terminus-settings", - "version": "1.0.0-alpha.16-8-gfc060ac", + "version": "1.0.0-alpha.23-6-g1c62f30", "description": "Terminus terminal settings page", "keywords": [ "terminus-plugin" diff --git a/terminus-terminal/package.json b/terminus-terminal/package.json index 95e1cccf..bf160155 100644 --- a/terminus-terminal/package.json +++ b/terminus-terminal/package.json @@ -1,6 +1,6 @@ { "name": "terminus-terminal", - "version": "1.0.0-alpha.16-8-gfc060ac", + "version": "1.0.0-alpha.23-6-g1c62f30", "description": "Terminus' terminal emulation core", "keywords": [ "terminus-plugin" diff --git a/terminus-terminal/src/api.ts b/terminus-terminal/src/api.ts index 9e238ad8..729f845c 100644 --- a/terminus-terminal/src/api.ts +++ b/terminus-terminal/src/api.ts @@ -2,6 +2,7 @@ import { Observable } from 'rxjs' import { TerminalTabComponent } from './components/terminalTab.component' export { TerminalTabComponent } export { IChildProcess } from './services/sessions.service' +export { TerminalService } from './services/terminal.service' export abstract class TerminalDecorator { // tslint:disable-next-line no-empty diff --git a/terminus-terminal/src/buttonProvider.ts b/terminus-terminal/src/buttonProvider.ts index e5961e75..ec1c2f40 100644 --- a/terminus-terminal/src/buttonProvider.ts +++ b/terminus-terminal/src/buttonProvider.ts @@ -2,11 +2,10 @@ import { AsyncSubject } from 'rxjs' import * as fs from 'mz/fs' import * as path from 'path' import { Injectable, Inject } from '@angular/core' -import { HotkeysService, ToolbarButtonProvider, IToolbarButton, AppService, ConfigService, HostAppService, ElectronService, Logger, LogService } from 'terminus-core' +import { HotkeysService, ToolbarButtonProvider, IToolbarButton, ConfigService, HostAppService, ElectronService, Logger, LogService } from 'terminus-core' import { IShell, ShellProvider } from './api' -import { SessionsService } from './services/sessions.service' -import { TerminalTabComponent } from './components/terminalTab.component' +import { TerminalService } from './services/terminal.service' @Injectable() export class ButtonProvider extends ToolbarButtonProvider { @@ -14,8 +13,7 @@ export class ButtonProvider extends ToolbarButtonProvider { private logger: Logger constructor ( - private app: AppService, - private sessions: SessionsService, + private terminal: TerminalService, private config: ConfigService, log: LogService, hostApp: HostAppService, @@ -57,27 +55,9 @@ export class ButtonProvider extends ToolbarButtonProvider { } async openNewTab (cwd?: string): Promise { - if (!cwd && this.app.activeTab instanceof TerminalTabComponent) { - cwd = await this.app.activeTab.session.getWorkingDirectory() - } let shells = await this.shells$.first().toPromise() let shell = shells.find(x => x.id === this.config.store.terminal.shell) || shells[0] - let env: any = Object.assign({}, process.env, shell.env || {}) - - this.logger.log(`Starting shell ${shell.name}`, shell) - let sessionOptions = await this.sessions.prepareNewSession({ - command: shell.command, - args: shell.args || [], - cwd, - env, - }) - - this.logger.log('Using session options:', sessionOptions) - - this.app.openNewTab( - TerminalTabComponent, - { sessionOptions } - ) + this.terminal.openTab(shell, cwd) } provide (): IToolbarButton[] { diff --git a/terminus-terminal/src/hterm.ts b/terminus-terminal/src/hterm.ts index 4ad2090b..2c1454fa 100644 --- a/terminus-terminal/src/hterm.ts +++ b/terminus-terminal/src/hterm.ts @@ -71,5 +71,7 @@ const _collapseToEnd = Selection.prototype.collapseToEnd Selection.prototype.collapseToEnd = function () { try { _collapseToEnd.apply(this) - } catch (err) { ; } + } catch (err) { + // tslint-disable-line + } } diff --git a/terminus-terminal/src/index.ts b/terminus-terminal/src/index.ts index 75a0c574..def3cba1 100644 --- a/terminus-terminal/src/index.ts +++ b/terminus-terminal/src/index.ts @@ -11,6 +11,7 @@ import { TerminalSettingsTabComponent } from './components/terminalSettingsTab.c import { ColorPickerComponent } from './components/colorPicker.component' import { SessionsService } from './services/sessions.service' +import { TerminalService } from './services/terminal.service' import { ScreenPersistenceProvider } from './persistence/screen' import { TMuxPersistenceProvider } from './persistence/tmux' @@ -42,6 +43,8 @@ import { hterm } from './hterm' ], providers: [ SessionsService, + TerminalService, + { provide: ToolbarButtonProvider, useClass: ButtonProvider, multi: true }, { provide: TabRecoveryProvider, useClass: RecoveryProvider, multi: true }, { provide: SettingsTabProvider, useClass: TerminalSettingsTabProvider, multi: true }, diff --git a/terminus-terminal/src/services/terminal.service.ts b/terminus-terminal/src/services/terminal.service.ts new file mode 100644 index 00000000..4e7d0fc9 --- /dev/null +++ b/terminus-terminal/src/services/terminal.service.ts @@ -0,0 +1,40 @@ +import { Injectable } from '@angular/core' +import { AppService, Logger, LogService } from 'terminus-core' +import { IShell } from '../api' +import { SessionsService } from './sessions.service' +import { TerminalTabComponent } from '../components/terminalTab.component' + +@Injectable() +export class TerminalService { + private logger: Logger + + constructor ( + private app: AppService, + private sessions: SessionsService, + log: LogService, + ) { + this.logger = log.create('terminal') + } + + async openTab (shell: IShell, cwd?: string): Promise { + if (!cwd && this.app.activeTab instanceof TerminalTabComponent) { + cwd = await this.app.activeTab.session.getWorkingDirectory() + } + let env: any = Object.assign({}, process.env, shell.env || {}) + + this.logger.log(`Starting shell ${shell.name}`, shell) + let sessionOptions = await this.sessions.prepareNewSession({ + command: shell.command, + args: shell.args || [], + cwd, + env, + }) + + this.logger.log('Using session options:', sessionOptions) + + return this.app.openNewTab( + TerminalTabComponent, + { sessionOptions } + ) as TerminalTabComponent + } +}