index.ts 5.5 KB
Newer Older
E
.  
Eugene Pankov 已提交
1
import { NgModule } from '@angular/core'
E
.  
Eugene Pankov 已提交
2
import { BrowserModule } from '@angular/platform-browser'
E
.  
Eugene Pankov 已提交
3
import { FormsModule } from '@angular/forms'
E
.  
Eugene Pankov 已提交
4
import { NgbModule } from '@ng-bootstrap/ng-bootstrap'
E
Eugene Pankov 已提交
5
import { ToastrModule } from 'ngx-toastr'
6
import TerminusCorePlugin from 'terminus-core'
E
.  
Eugene Pankov 已提交
7

8
import { ToolbarButtonProvider, TabRecoveryProvider, ConfigProvider, HotkeysService, HotkeyProvider, AppService, ConfigService } from 'terminus-core'
E
wip  
Eugene Pankov 已提交
9
import { SettingsTabProvider } from 'terminus-settings'
E
.  
Eugene Pankov 已提交
10

E
.  
Eugene Pankov 已提交
11 12 13 14
import { TerminalTabComponent } from './components/terminalTab.component'
import { TerminalSettingsTabComponent } from './components/terminalSettingsTab.component'
import { ColorPickerComponent } from './components/colorPicker.component'

E
Eugene Pankov 已提交
15
import { SessionsService, BaseSession } from './services/sessions.service'
E
naming  
Eugene Pankov 已提交
16
import { TerminalFrontendService } from './services/terminalFrontend.service'
E
Eugene Pankov 已提交
17
import { TerminalService } from './services/terminal.service'
E
.  
Eugene Pankov 已提交
18

E
Eugene Pankov 已提交
19 20
import { ScreenPersistenceProvider } from './persistence/screen'
import { TMuxPersistenceProvider } from './persistence/tmux'
E
.  
Eugene Pankov 已提交
21
import { ButtonProvider } from './buttonProvider'
E
.  
Eugene Pankov 已提交
22
import { RecoveryProvider } from './recoveryProvider'
E
Eugene Pankov 已提交
23
import { SessionPersistenceProvider, TerminalColorSchemeProvider, TerminalDecorator, ShellProvider } from './api'
E
.  
Eugene Pankov 已提交
24
import { TerminalSettingsTabProvider } from './settings'
25
import { PathDropDecorator } from './pathDrop'
E
.  
Eugene Pankov 已提交
26
import { TerminalConfigProvider } from './config'
27
import { TerminalHotkeyProvider } from './hotkeys'
E
.  
Eugene Pankov 已提交
28
import { HyperColorSchemes } from './colorSchemes'
E
Eugene Pankov 已提交
29

E
Eugene Pankov 已提交
30
import { CmderShellProvider } from './shells/cmder'
E
Eugene Pankov 已提交
31
import { CustomShellProvider } from './shells/custom'
E
Eugene Pankov 已提交
32 33 34 35 36 37 38 39 40
import { Cygwin32ShellProvider } from './shells/cygwin32'
import { Cygwin64ShellProvider } from './shells/cygwin64'
import { GitBashShellProvider } from './shells/gitBash'
import { LinuxDefaultShellProvider } from './shells/linuxDefault'
import { MacOSDefaultShellProvider } from './shells/macDefault'
import { POSIXShellsProvider } from './shells/posix'
import { WindowsStockShellsProvider } from './shells/windowsStock'
import { WSLShellProvider } from './shells/wsl'

E
.  
Eugene Pankov 已提交
41 42
import { hterm } from './hterm'

E
.  
Eugene Pankov 已提交
43 44 45 46
@NgModule({
    imports: [
        BrowserModule,
        FormsModule,
E
.  
Eugene Pankov 已提交
47
        NgbModule,
E
Eugene Pankov 已提交
48
        ToastrModule,
49
        TerminusCorePlugin,
E
.  
Eugene Pankov 已提交
50 51
    ],
    providers: [
E
.  
Eugene Pankov 已提交
52
        SessionsService,
E
naming  
Eugene Pankov 已提交
53
        TerminalFrontendService,
E
Eugene Pankov 已提交
54 55
        TerminalService,

E
.  
Eugene Pankov 已提交
56 57
        { provide: ToolbarButtonProvider, useClass: ButtonProvider, multi: true },
        { provide: TabRecoveryProvider, useClass: RecoveryProvider, multi: true },
E
.  
Eugene Pankov 已提交
58
        { provide: SettingsTabProvider, useClass: TerminalSettingsTabProvider, multi: true },
E
.  
Eugene Pankov 已提交
59
        { provide: ConfigProvider, useClass: TerminalConfigProvider, multi: true },
60
        { provide: HotkeyProvider, useClass: TerminalHotkeyProvider, multi: true },
E
.  
Eugene Pankov 已提交
61
        { provide: TerminalColorSchemeProvider, useClass: HyperColorSchemes, multi: true },
62
        { provide: TerminalDecorator, useClass: PathDropDecorator, multi: true },
E
Eugene Pankov 已提交
63

E
Eugene Pankov 已提交
64 65 66
        { provide: SessionPersistenceProvider, useClass: ScreenPersistenceProvider, multi: true },
        { provide: SessionPersistenceProvider, useClass: TMuxPersistenceProvider, multi: true },

E
Eugene Pankov 已提交
67
        { provide: ShellProvider, useClass: CmderShellProvider, multi: true },
E
Eugene Pankov 已提交
68 69 70
        { provide: ShellProvider, useClass: WindowsStockShellsProvider, multi: true },
        { provide: ShellProvider, useClass: MacOSDefaultShellProvider, multi: true },
        { provide: ShellProvider, useClass: LinuxDefaultShellProvider, multi: true },
E
Eugene Pankov 已提交
71
        { provide: ShellProvider, useClass: CustomShellProvider, multi: true },
E
Eugene Pankov 已提交
72 73 74 75 76
        { provide: ShellProvider, useClass: Cygwin32ShellProvider, multi: true },
        { provide: ShellProvider, useClass: Cygwin64ShellProvider, multi: true },
        { provide: ShellProvider, useClass: GitBashShellProvider, multi: true },
        { provide: ShellProvider, useClass: POSIXShellsProvider, multi: true },
        { provide: ShellProvider, useClass: WSLShellProvider, multi: true },
E
.  
Eugene Pankov 已提交
77 78 79
    ],
    entryComponents: [
        TerminalTabComponent,
E
.  
Eugene Pankov 已提交
80
        TerminalSettingsTabComponent,
E
.  
Eugene Pankov 已提交
81 82
    ],
    declarations: [
E
.  
Eugene Pankov 已提交
83
        ColorPickerComponent,
E
.  
Eugene Pankov 已提交
84
        TerminalTabComponent,
E
.  
Eugene Pankov 已提交
85
        TerminalSettingsTabComponent,
E
.  
Eugene Pankov 已提交
86 87
    ],
})
E
wip  
Eugene Pankov 已提交
88
export default class TerminalModule {
89 90 91 92 93 94
    constructor (
        app: AppService,
        config: ConfigService,
        hotkeys: HotkeysService,
        terminal: TerminalService,
    ) {
E
.  
Eugene Pankov 已提交
95 96 97 98 99 100 101 102 103 104 105 106 107 108
        let events = [
            {
                name: 'keydown',
                htermHandler: 'onKeyDown_',
            },
            {
                name: 'keyup',
                htermHandler: 'onKeyUp_',
            },
        ]
        events.forEach((event) => {
            let oldHandler = hterm.hterm.Keyboard.prototype[event.htermHandler]
            hterm.hterm.Keyboard.prototype[event.htermHandler] = function (nativeEvent) {
                hotkeys.pushKeystroke(event.name, nativeEvent)
E
lint  
Eugene Pankov 已提交
109
                if (hotkeys.getCurrentPartiallyMatchedHotkeys().length === 0) {
E
.  
Eugene Pankov 已提交
110 111 112 113 114 115 116 117 118
                    oldHandler.bind(this)(nativeEvent)
                } else {
                    nativeEvent.stopPropagation()
                    nativeEvent.preventDefault()
                }
                hotkeys.processKeystrokes()
                hotkeys.emitKeyEvent(nativeEvent)
            }
        })
119 120 121 122 123
        if (config.store.terminal.autoOpen) {
            app.ready$.subscribe(() => {
                terminal.openTab()
            })
        }
E
.  
Eugene Pankov 已提交
124
    }
E
.  
Eugene Pankov 已提交
125 126
}

E
wip  
Eugene Pankov 已提交
127
export * from './api'
E
naming  
Eugene Pankov 已提交
128
export { TerminalService, BaseSession, TerminalTabComponent, TerminalFrontendService }