1
1
mirror of https://github.com/Eugeny/tabby.git synced 2024-11-27 10:42:35 +03:00
This commit is contained in:
Eugene Pankov 2017-04-24 21:26:59 +02:00
parent 64556806e6
commit 2d1dca41d7
9 changed files with 48 additions and 27 deletions

View File

@ -27,7 +27,9 @@ if (!process.env.TERMINUS_PLUGINS) {
process.env.TERMINUS_PLUGINS = ''
}
process.env.TERMINUS_PLUGINS += `:${path.resolve(__dirname, '..')}`
if (process.env.DEV) {
process.env.TERMINUS_PLUGINS += `:${path.resolve(__dirname, '..')}`
}
setupWindowManagement = () => {
let windowCloseable

View File

@ -12,7 +12,7 @@ import { enableProdMode } from '@angular/core'
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'
import { getRootModule } from './app.module'
import { loadPlugins } from './plugins'
import { findPlugins, loadPlugins } from './plugins'
if ((<any>global).require('electron-is-dev')) {
console.warn('Running in debug mode')
@ -20,9 +20,10 @@ if ((<any>global).require('electron-is-dev')) {
enableProdMode()
}
loadPlugins((current, total) => {
(<HTMLElement>document.querySelector('.progress .bar')).style.width = 100 * current / total + '%'
}).then(async plugins => {
let module = await getRootModule(plugins)
findPlugins().then(async plugins => {
let pluginsModules = loadPlugins(plugins, (current, total) => {
(<HTMLElement>document.querySelector('.progress .bar')).style.width = 100 * current / total + '%'
})
let module = await getRootModule(pluginsModules)
platformBrowserDynamic().bootstrapModule(module)
})

View File

@ -19,27 +19,46 @@ if (process.env.TERMINUS_PLUGINS) {
export declare type ProgressCallback = (current, total) => void
interface IFoundPlugin {
interface IPluginEntry {
name: string
path: string
info: any
}
export async function loadPlugins (progress: ProgressCallback): Promise<any[]> {
export async function findPlugins (): Promise<IPluginEntry[]> {
let paths = nodeModule.globalPaths
let plugins: any[] = []
let foundPlugins: IFoundPlugin[] = []
let foundPlugins: IPluginEntry[] = []
progress(0, 1)
for (let pluginDir of paths) {
pluginDir = normalizePath(pluginDir)
if (!await fs.exists(pluginDir)) {
continue
}
let pluginNames = await fs.readdir(pluginDir)
pluginNames.filter(pluginName => /^terminus-/.exec(pluginName)).forEach(name => {
foundPlugins.push({ name, path: path.join(pluginDir, name) })
})
for (let pluginName of pluginNames.filter(x => /^terminus-/.exec(x))) {
let pluginPath = path.join(pluginDir, pluginName)
let infoPath = path.join(pluginPath, 'package.json')
if (!await fs.exists(infoPath)) {
continue
}
try {
foundPlugins.push({
name: pluginName,
path: pluginPath,
info: await fs.readJson(infoPath),
})
} catch (error) {
console.error('Cannot load package info for', pluginName)
}
}
}
return foundPlugins
}
export function loadPlugins (foundPlugins: IPluginEntry[], progress: ProgressCallback): any[] {
let plugins: any[] = []
progress(0, 1)
foundPlugins.forEach((foundPlugin, index) => {
console.info(`Loading ${foundPlugin.name}: ${(<any>global).require.resolve(foundPlugin.path)}`)
progress(index, foundPlugins.length)
@ -50,7 +69,6 @@ export async function loadPlugins (progress: ProgressCallback): Promise<any[]> {
console.error(`Could not load ${foundPlugin.name}:`, error)
}
})
progress(1, 1)
return plugins
}

View File

@ -40,7 +40,6 @@ module.exports = {
'fs-promise',
'path',
'node-pty',
'child-process-promise',
'fs-promise',
/^rxjs/,
/^@angular/,

View File

@ -12,6 +12,7 @@
"license": "MIT",
"devDependencies": {
"@types/deep-equal": "^1.0.0",
"@types/mz": "0.0.31",
"@types/node": "7.0.12",
"@types/webpack-env": "1.13.0",
"@types/winreg": "^1.2.30",
@ -38,10 +39,10 @@
"rxjs": "5.3.0"
},
"dependencies": {
"child-process-promise": "2.2.1",
"font-manager": "0.2.2",
"fs-promise": "2.0.2",
"hterm-commonjs": "1.0.0",
"mz": "^2.6.0",
"node-pty": "0.6.2",
"winreg": "^1.2.3"
}

View File

@ -1,9 +1,9 @@
import { Observable } from 'rxjs'
import * as fs from 'fs-promise'
import * as path from 'path'
import { exec } from 'mz/child_process'
const equal = require('deep-equal')
const fontManager = require('font-manager')
const { exec } = require('child-process-promise')
import { Component, Inject } from '@angular/core'
import { ConfigService, HostAppService, Platform } from 'terminus-core'
@ -44,8 +44,8 @@ export class TerminalSettingsTabComponent {
this.fonts.sort()
}
if (this.hostApp.platform == Platform.Linux) {
exec('fc-list :spacing=mono').then((result) => {
this.fonts = result.stdout
exec('fc-list :spacing=mono').then(([stdout, _]) => {
this.fonts = stdout
.split('\n')
.filter(x => !!x)
.map(x => x.split(':')[1].trim())

View File

@ -1,5 +1,5 @@
import * as fs from 'fs-promise'
const { exec, spawn } = require('child-process-promise')
import { exec, spawn } from 'mz/child_process'
import { Injectable } from '@angular/core'
import { Logger, LogService } from 'terminus-core'
@ -13,7 +13,7 @@ interface IChildProcess {
}
async function listProcesses (): Promise<IChildProcess[]> {
return (await exec(`ps -A -o pid,ppid,command`)).stdout
return (await exec(`ps -A -o pid,ppid,command`))[0].toString()
.split('\n')
.slice(1)
.map(line => line.split(' ').filter(x => x).slice(0, 3))
@ -38,7 +38,7 @@ export class ScreenPersistenceProvider extends SessionPersistenceProvider {
async attachSession (recoveryId: any): Promise<SessionOptions> {
let lines: string[]
try {
lines = (await exec('screen -list')).stdout.split('\n')
lines = (await exec('screen -list'))[0].toString().split('\n')
} catch (result) {
lines = result.stdout.split('\n')
}

View File

@ -3,7 +3,7 @@ import * as fs from 'fs-promise'
import { Subject } from 'rxjs'
import { Injectable } from '@angular/core'
import { Logger, LogService } from 'terminus-core'
const { exec } = require('child-process-promise')
import { exec } from 'mz/child_process'
import { SessionOptions, SessionPersistenceProvider } from '../api'
@ -85,7 +85,7 @@ export class Session {
this.kill()
} else {
await new Promise((resolve) => {
this.kill('SIGTERM')
this.kill('SIGTERM')
setImmediate(() => {
if (!this.open) {
resolve()
@ -114,7 +114,7 @@ export class Session {
async getWorkingDirectory (): Promise<string> {
if (process.platform == 'darwin') {
let lines = (await exec(`lsof -p ${this.truePID} -Fn`)).stdout.split('\n')
let lines = (await exec(`lsof -p ${this.truePID} -Fn`))[0].toString().split('\n')
return lines[2].substring(1)
}
if (process.platform == 'linux') {

View File

@ -40,7 +40,7 @@ module.exports = {
'font-manager',
'path',
'node-pty',
'child-process-promise',
'mz/child_process',
'winreg',
/^rxjs/,
/^@angular/,