option to auto-start a terminal tab (fixes #107)

This commit is contained in:
Eugene Pankov
2017-10-07 17:47:04 +02:00
parent fb64ca08d3
commit 38cda117e2
5 changed files with 46 additions and 4 deletions

View File

@@ -150,6 +150,8 @@ export class AppRootComponent {
if (this.app.tabs.length === 0) { if (this.app.tabs.length === 0) {
this.app.openDefaultTab() this.app.openDefaultTab()
} }
this.app.emitReady()
} }
@HostListener('dragover') @HostListener('dragover')

View File

@@ -1,4 +1,4 @@
import { Subject } from 'rxjs' import { Subject, AsyncSubject } from 'rxjs'
import { Injectable, ComponentFactoryResolver, Injector, Optional } from '@angular/core' import { Injectable, ComponentFactoryResolver, Injector, Optional } from '@angular/core'
import { DefaultTabProvider } from '../api/defaultTabProvider' import { DefaultTabProvider } from '../api/defaultTabProvider'
import { BaseTabComponent } from '../components/baseTab.component' import { BaseTabComponent } from '../components/baseTab.component'
@@ -12,7 +12,8 @@ export class AppService {
activeTab: BaseTabComponent activeTab: BaseTabComponent
lastTabIndex = 0 lastTabIndex = 0
logger: Logger logger: Logger
tabsChanged$ = new Subject() tabsChanged$ = new Subject<void>()
ready$ = new AsyncSubject<void>()
constructor ( constructor (
private componentFactoryResolver: ComponentFactoryResolver, private componentFactoryResolver: ComponentFactoryResolver,
@@ -97,4 +98,9 @@ export class AppService {
} }
this.tabsChanged$.next() this.tabsChanged$.next()
} }
emitReady () {
this.ready$.next(null)
this.ready$.complete()
}
} }

View File

@@ -287,3 +287,26 @@
*ngFor='let provider of persistenceProviders', *ngFor='let provider of persistenceProviders',
[ngValue]='provider.id' [ngValue]='provider.id'
) {{provider.displayName}} ) {{provider.displayName}}
.form-group
label Auto-open a terminal on app start
br
div(
'[(ngModel)]'='config.store.terminal.autoOpen',
(ngModelChange)='config.save()',
ngbRadioGroup
)
label.btn.btn-secondary(ngbButtonLabel)
input(
type='radio',
ngbButton,
[value]='false'
)
| Off
label.btn.btn-secondary(ngbButtonLabel)
input(
type='radio',
ngbButton,
[value]='true'
)
| On

View File

@@ -3,6 +3,7 @@ import { ConfigProvider, Platform } from 'terminus-core'
export class TerminalConfigProvider extends ConfigProvider { export class TerminalConfigProvider extends ConfigProvider {
defaults = { defaults = {
terminal: { terminal: {
autoOpen: false,
fontSize: 14, fontSize: 14,
linePadding: 0, linePadding: 0,
bell: 'off', bell: 'off',

View File

@@ -3,7 +3,7 @@ import { BrowserModule } from '@angular/platform-browser'
import { FormsModule } from '@angular/forms' import { FormsModule } from '@angular/forms'
import { NgbModule } from '@ng-bootstrap/ng-bootstrap' import { NgbModule } from '@ng-bootstrap/ng-bootstrap'
import { ToolbarButtonProvider, TabRecoveryProvider, ConfigProvider, HotkeysService, HotkeyProvider } from 'terminus-core' import { ToolbarButtonProvider, TabRecoveryProvider, ConfigProvider, HotkeysService, HotkeyProvider, AppService, ConfigService } from 'terminus-core'
import { SettingsTabProvider } from 'terminus-settings' import { SettingsTabProvider } from 'terminus-settings'
import { TerminalTabComponent } from './components/terminalTab.component' import { TerminalTabComponent } from './components/terminalTab.component'
@@ -78,7 +78,12 @@ import { hterm } from './hterm'
], ],
}) })
export default class TerminalModule { export default class TerminalModule {
constructor (hotkeys: HotkeysService) { constructor (
app: AppService,
config: ConfigService,
hotkeys: HotkeysService,
terminal: TerminalService,
) {
let events = [ let events = [
{ {
name: 'keydown', name: 'keydown',
@@ -103,6 +108,11 @@ export default class TerminalModule {
hotkeys.emitKeyEvent(nativeEvent) hotkeys.emitKeyEvent(nativeEvent)
} }
}) })
if (config.store.terminal.autoOpen) {
app.ready$.subscribe(() => {
terminal.openTab()
})
}
} }
} }