mirror of
https://github.com/Eugeny/tabby
synced 2024-11-13 00:17:12 +00:00
wip
This commit is contained in:
parent
d9fd78fb42
commit
5e2dae153e
17 changed files with 217 additions and 115 deletions
115
HACKING.md
Normal file
115
HACKING.md
Normal file
|
@ -0,0 +1,115 @@
|
|||
# Some background
|
||||
|
||||
Terminus is an Electron app, with the frontend written in Typescript with the help of Angular framework. It's built using Webpack.
|
||||
|
||||
# Getting started
|
||||
|
||||
First of all, clone this repository. You'll also need a recent version of Node installed.
|
||||
|
||||
First, install the dependencies:
|
||||
|
||||
```
|
||||
# macOS/Linux:
|
||||
npm i
|
||||
./scripts/install-deps.js
|
||||
./scripts/build-native.js
|
||||
|
||||
# Windows:
|
||||
npm i
|
||||
node scripts\install-deps.js
|
||||
node scripts\build-native.js
|
||||
```
|
||||
|
||||
Now, check if your build is working:
|
||||
|
||||
```
|
||||
npm run build
|
||||
```
|
||||
|
||||
Start Terminus with
|
||||
|
||||
```
|
||||
npm start
|
||||
```
|
||||
|
||||
# Project layout
|
||||
```
|
||||
terminus
|
||||
├─ app # Electron app, just the bare essentials
|
||||
| ├─ src # Electron renderer code
|
||||
| └─ main.js # Electron main entry point
|
||||
├─ build
|
||||
├─ clink # Clink distributive, for Windows
|
||||
├─ scripts # Maintenance scripts
|
||||
├─ terminus-community-color-schemes # Plugin that provides color schemes
|
||||
├─ terminus-core # Plugin that provides base UI and tab management
|
||||
├─ terminus-plugin-manager # Plugin that installs other plugins
|
||||
├─ terminus-settings # Plugin that provides the settings tab
|
||||
└─ terminus-terminal # Plugin that provides terminal tabs
|
||||
```
|
||||
|
||||
# Plugin layout
|
||||
```
|
||||
terminus-pluginname
|
||||
├─ src # Typescript code
|
||||
| ├─ components # Angular components
|
||||
| | ├─ foo.component.ts # Code
|
||||
| | ├─ foo.component.scss # Styles
|
||||
| | └─ foo.component.pug # Template
|
||||
| ├─ services # Angular services
|
||||
| | └─ foo.service.ts
|
||||
| ├─ api.ts # Publicly exported API
|
||||
| └─ index.ts # Module entry point
|
||||
├─ package.json
|
||||
├─ tsconfig.json
|
||||
└─ webpack.config.js
|
||||
```
|
||||
|
||||
# Plugins
|
||||
|
||||
The app will load all plugins from the source checkout in the dev mode, and from the user's plugins directory at all times (click `Open Plugins Directory` under `Settings` > `Plugins`).
|
||||
|
||||
A plugin should only provide a default export, which should be a `NgModule` class (or a `NgModuleWithDependencies` where applicable). This module will be injected as a dependency to the app's root module.
|
||||
|
||||
```javascript
|
||||
import { NgModule } from '@angular/core'
|
||||
|
||||
@NgModule()
|
||||
export default class MyModule {
|
||||
constructor () {
|
||||
console.log('Angular engaged, cap\'n.')
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Plugins provide functionality by exporting singular or multi providers:
|
||||
|
||||
|
||||
```javascript
|
||||
import { NgModule, Injectable } from '@angular/core'
|
||||
import { ToolbarButtonProvider, IToolbarButton } from 'terminus-core'
|
||||
|
||||
@Injectable()
|
||||
export class MyButtonProvider extends ToolbarButtonProvider {
|
||||
provide (): IToolbarButton[] {
|
||||
return [{
|
||||
icon: 'star',
|
||||
title: 'Foobar',
|
||||
weight: 10,
|
||||
click: () => {
|
||||
alert('Woohoo!')
|
||||
}
|
||||
}]
|
||||
}
|
||||
}
|
||||
|
||||
@NgModule({
|
||||
providers: [
|
||||
{ provide: ToolbarButtonProvider, useClass: MyButtonProvider, multi: true },
|
||||
],
|
||||
})
|
||||
export default class MyModule { }
|
||||
```
|
||||
|
||||
|
||||
See `terminus-core/src/api.ts`, `terminus-settings/src/api.ts` and `terminus-terminal/src/api.ts` for the available extension points.
|
21
LICENSE
Normal file
21
LICENSE
Normal file
|
@ -0,0 +1,21 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2017 Eugene Pankov
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
|
@ -1,6 +1,6 @@
|
|||
import 'core-js'
|
||||
import 'zone.js/dist/zone.js'
|
||||
import 'core-js/es7/reflect'
|
||||
import 'core-js/core/delay'
|
||||
import 'rxjs'
|
||||
|
||||
// Always land on the start view
|
||||
|
|
|
@ -62,5 +62,8 @@ module.exports = {
|
|||
'path': 'commonjs path',
|
||||
'rxjs': 'commonjs rxjs',
|
||||
'zone.js': 'commonjs zone.js',
|
||||
}
|
||||
},
|
||||
plugins: [
|
||||
new webpack.optimize.ModuleConcatenationPlugin(),
|
||||
],
|
||||
}
|
||||
|
|
26
package-lock.json
generated
26
package-lock.json
generated
|
@ -27,18 +27,6 @@
|
|||
"integrity": "sha1-JeTdgEtjDJFq5nEjPm1x9s4YEko=",
|
||||
"dev": true
|
||||
},
|
||||
"@types/raven": {
|
||||
"version": "1.2.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/raven/-/raven-1.2.2.tgz",
|
||||
"integrity": "sha1-r+Ur2YGHo6PSi4IS42MUO9FvI78=",
|
||||
"dev": true
|
||||
},
|
||||
"@types/raven-js": {
|
||||
"version": "3.10.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/raven-js/-/raven-js-3.10.0.tgz",
|
||||
"integrity": "sha1-0IMhYuvqdnHq//CKMktWrd5b+cM=",
|
||||
"dev": true
|
||||
},
|
||||
"@types/webpack-env": {
|
||||
"version": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.13.0.tgz",
|
||||
"integrity": "sha1-MEQ4FkfhHulzxa8uklMjkw9pHYA=",
|
||||
|
@ -2780,20 +2768,6 @@
|
|||
"integrity": "sha1-Z0yZdgkBw8QRJ3GjHlIdw0nMCew=",
|
||||
"dev": true
|
||||
},
|
||||
"raven": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/raven/-/raven-2.0.2.tgz",
|
||||
"integrity": "sha1-pD07hwKubbLpGYdii+jyiVAIEK4=",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"uuid": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.0.tgz",
|
||||
"integrity": "sha1-Zyj8BFnEUNeWqZwxg3VpvfZy1yg=",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"raven-js": {
|
||||
"version": "3.16.0",
|
||||
"resolved": "https://registry.npmjs.org/raven-js/-/raven-js-3.16.0.tgz",
|
||||
|
|
78
package.json
78
package.json
|
@ -1,50 +1,50 @@
|
|||
{
|
||||
"name": "term",
|
||||
"devDependencies": {
|
||||
"@types/core-js": "^0.9.35",
|
||||
"@types/core-js": "0.9.35",
|
||||
"@types/electron": "1.4.34",
|
||||
"@types/fs-promise": "^1.0.1",
|
||||
"@types/node": "^7.0.5",
|
||||
"@types/raven": "^1.2.2",
|
||||
"@types/raven-js": "^3.10.0",
|
||||
"@types/webpack-env": "^1.13.0",
|
||||
"apply-loader": "^0.1.0",
|
||||
"@types/fs-promise": "1.0.1",
|
||||
"@types/node": "7.0.5",
|
||||
"@types/webpack-env": "1.13.0",
|
||||
"apply-loader": "0.1.0",
|
||||
"awesome-typescript-loader": "3.1.2",
|
||||
"core-js": "^2.4.1",
|
||||
"cross-env": "^4.0.0",
|
||||
"css-loader": "0.26.1",
|
||||
"electron": "1.7.2",
|
||||
"electron-builder": "^17.1.1",
|
||||
"electron-builder-squirrel-windows": "^17.0.1",
|
||||
"core-js": "2.4.1",
|
||||
"cross-env": "4.0.0",
|
||||
"css-loader": "0.28.0",
|
||||
"electron-builder-squirrel-windows": "17.0.1",
|
||||
"electron-builder": "17.1.1",
|
||||
"electron-osx-sign": "electron-userland/electron-osx-sign#f092181a1bffa2b3248a23ee28447a47e14a8f04",
|
||||
"electron-rebuild": "^1.5.11",
|
||||
"file-loader": "^0.9.0",
|
||||
"electron-rebuild": "1.5.11",
|
||||
"electron": "1.7.2",
|
||||
"file-loader": "0.9.0",
|
||||
"font-awesome": "4.7.0",
|
||||
"html-loader": "^0.4.4",
|
||||
"less": "^2.7.1",
|
||||
"less-loader": "^2.2.3",
|
||||
"node-abi": "^2.0.3",
|
||||
"node-gyp": "^3.4.0",
|
||||
"node-sass": "^4.5.0",
|
||||
"npmlog": "^4.1.0",
|
||||
"pug-html-loader": "^1.0.9",
|
||||
"pug-loader": "^2.3.0",
|
||||
"html-loader": "0.4.4",
|
||||
"json-loader": "0.5.4",
|
||||
"less-loader": "2.2.3",
|
||||
"less": "2.7.1",
|
||||
"node-abi": "2.0.3",
|
||||
"node-gyp": "3.4.0",
|
||||
"node-sass": "4.5.2",
|
||||
"npmlog": "4.1.0",
|
||||
"pug-html-loader": "1.0.9",
|
||||
"pug-loader": "2.3.0",
|
||||
"pug-static-loader": "0.0.1",
|
||||
"raven": "^2.0.2",
|
||||
"raven-js": "^3.16.0",
|
||||
"raw-loader": "^0.5.1",
|
||||
"sass-loader": "^6.0.3",
|
||||
"shelljs": "^0.7.7",
|
||||
"source-sans-pro": "^2.0.10",
|
||||
"style-loader": "^0.13.1",
|
||||
"to-string-loader": "^1.1.5",
|
||||
"tslint": "^5.1.0",
|
||||
"tslint-config-standard": "^5.0.2",
|
||||
"tslint-eslint-rules": "^4.0.0",
|
||||
"typescript": "~2.1.0",
|
||||
"url-loader": "^0.5.7",
|
||||
"val-loader": "^0.5.0",
|
||||
"webpack": "2.4.1"
|
||||
"pug": "2.0.0-beta11",
|
||||
"raven-js": "3.16.0",
|
||||
"raw-loader": "0.5.1",
|
||||
"sass-loader": "6.0.3",
|
||||
"shelljs": "0.7.7",
|
||||
"source-sans-pro": "2.0.10",
|
||||
"style-loader": "0.13.1",
|
||||
"to-string-loader": "1.1.5",
|
||||
"tslint-config-standard": "5.0.2",
|
||||
"tslint-eslint-rules": "4.0.0",
|
||||
"tslint": "5.1.0",
|
||||
"typescript": "2.2.2",
|
||||
"url-loader": "0.5.7",
|
||||
"val-loader": "0.5.0",
|
||||
"yaml-loader": "0.4.0",
|
||||
"webpack": "3.0.0"
|
||||
},
|
||||
"build": {
|
||||
"appId": "org.terminus",
|
||||
|
|
|
@ -8,6 +8,11 @@ log.info('deps', 'app')
|
|||
sh.exec('npm prune')
|
||||
sh.exec('npm install')
|
||||
|
||||
sh.cd('app')
|
||||
sh.exec('npm prune')
|
||||
sh.exec('npm install')
|
||||
sh.cd('..')
|
||||
|
||||
vars.builtinPlugins.forEach(plugin => {
|
||||
log.info('deps', plugin)
|
||||
sh.cd(plugin)
|
||||
|
|
|
@ -20,10 +20,7 @@
|
|||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "7.0.12",
|
||||
"@types/webpack-env": "^1.13.0",
|
||||
"awesome-typescript-loader": "3.1.2",
|
||||
"raw-loader": "0.5.1",
|
||||
"webpack": "2.3.3"
|
||||
"@types/webpack-env": "^1.13.0"
|
||||
},
|
||||
"false": {}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
const path = require('path')
|
||||
const webpack = require('webpack')
|
||||
|
||||
module.exports = {
|
||||
target: 'node',
|
||||
|
@ -38,5 +39,8 @@ module.exports = {
|
|||
/^@angular/,
|
||||
/^@ng-bootstrap/,
|
||||
/^terminus-/,
|
||||
]
|
||||
],
|
||||
plugins: [
|
||||
new webpack.optimize.ModuleConcatenationPlugin(),
|
||||
],
|
||||
}
|
||||
|
|
|
@ -19,16 +19,10 @@
|
|||
"@types/js-yaml": "^3.5.29",
|
||||
"@types/node": "^7.0.12",
|
||||
"@types/webpack-env": "^1.13.0",
|
||||
"awesome-typescript-loader": "^3.1.2",
|
||||
"bootstrap": "4.0.0-alpha.6",
|
||||
"core-js": "^2.4.1",
|
||||
"json-loader": "^0.5.4",
|
||||
"ngx-perfect-scrollbar": "^4.0.0",
|
||||
"style-loader": "^0.13.1",
|
||||
"to-string-loader": "^1.1.5",
|
||||
"typescript": "^2.2.2",
|
||||
"webpack": "^2.3.3",
|
||||
"yaml-loader": "^0.4.0"
|
||||
"ngx-perfect-scrollbar": "4.0.0",
|
||||
"typescript": "^2.2.2"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@angular/animations": "4.0.1",
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
const path = require('path')
|
||||
const webpack = require('webpack')
|
||||
|
||||
module.exports = {
|
||||
target: 'node',
|
||||
|
@ -48,5 +49,8 @@ module.exports = {
|
|||
/^rxjs/,
|
||||
/^@angular/,
|
||||
/^@ng-bootstrap/,
|
||||
]
|
||||
],
|
||||
plugins: [
|
||||
new webpack.optimize.ModuleConcatenationPlugin(),
|
||||
],
|
||||
}
|
||||
|
|
|
@ -16,20 +16,11 @@
|
|||
"devDependencies": {
|
||||
"@types/mz": "0.0.31",
|
||||
"@types/node": "7.0.12",
|
||||
"@types/npm": "^2.0.28",
|
||||
"@types/semver": "^5.3.31",
|
||||
"@types/webpack-env": "1.13.0",
|
||||
"awesome-typescript-loader": "3.1.2",
|
||||
"css-loader": "^0.28.0",
|
||||
"ngx-pipes": "^1.6.1",
|
||||
"pug": "^2.0.0-beta11",
|
||||
"pug-loader": "^2.3.0",
|
||||
"raw-loader": "^0.5.1",
|
||||
"sass-loader": "^6.0.3",
|
||||
"semver": "^5.3.0",
|
||||
"to-string-loader": "^1.1.5",
|
||||
"typescript": "^2.2.2",
|
||||
"webpack": "2.3.3"
|
||||
"css-loader": "^0.28.0",
|
||||
"semver": "^5.3.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@angular/common": "4.0.1",
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
const path = require('path')
|
||||
const webpack = require('webpack')
|
||||
|
||||
module.exports = {
|
||||
target: 'node',
|
||||
|
@ -45,5 +46,8 @@ module.exports = {
|
|||
/^@angular/,
|
||||
/^@ng-bootstrap/,
|
||||
/^terminus-/,
|
||||
]
|
||||
],
|
||||
plugins: [
|
||||
new webpack.optimize.ModuleConcatenationPlugin(),
|
||||
],
|
||||
}
|
||||
|
|
|
@ -17,16 +17,7 @@
|
|||
"@types/deep-equal": "1.0.0",
|
||||
"@types/node": "7.0.12",
|
||||
"@types/webpack-env": "1.13.0",
|
||||
"awesome-typescript-loader": "3.1.2",
|
||||
"css-loader": "^0.28.0",
|
||||
"ngx-pipes": "^1.6.1",
|
||||
"node-sass": "^4.5.2",
|
||||
"pug": "^2.0.0-beta3",
|
||||
"pug-loader": "^2.3.0",
|
||||
"raw-loader": "^0.5.1",
|
||||
"sass-loader": "^6.0.3",
|
||||
"to-string-loader": "^1.1.5",
|
||||
"webpack": "2.3.3"
|
||||
"ngx-pipes": "^1.6.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@angular/common": "4.0.1",
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
const path = require('path')
|
||||
const webpack = require('webpack')
|
||||
|
||||
module.exports = {
|
||||
target: 'node',
|
||||
|
@ -44,5 +45,8 @@ module.exports = {
|
|||
/^@angular/,
|
||||
/^@ng-bootstrap/,
|
||||
/^terminus-/,
|
||||
]
|
||||
],
|
||||
plugins: [
|
||||
new webpack.optimize.ModuleConcatenationPlugin(),
|
||||
],
|
||||
}
|
||||
|
|
|
@ -19,17 +19,8 @@
|
|||
"@types/node": "7.0.12",
|
||||
"@types/webpack-env": "1.13.0",
|
||||
"@types/winreg": "^1.2.30",
|
||||
"awesome-typescript-loader": "3.1.2",
|
||||
"css-loader": "^0.28.0",
|
||||
"dataurl": "0.1.0",
|
||||
"deep-equal": "1.0.1",
|
||||
"pug": "^2.0.0-beta11",
|
||||
"pug-loader": "^2.3.0",
|
||||
"raw-loader": "^0.5.1",
|
||||
"sass-loader": "^6.0.3",
|
||||
"to-string-loader": "^1.1.5",
|
||||
"typescript": "^2.2.2",
|
||||
"webpack": "2.3.3"
|
||||
"deep-equal": "1.0.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@angular/common": "4.0.1",
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
const path = require('path')
|
||||
const webpack = require('webpack')
|
||||
|
||||
module.exports = {
|
||||
target: 'node',
|
||||
|
@ -46,5 +47,8 @@ module.exports = {
|
|||
/^@angular/,
|
||||
/^@ng-bootstrap/,
|
||||
/^terminus-/,
|
||||
]
|
||||
],
|
||||
plugins: [
|
||||
new webpack.optimize.ModuleConcatenationPlugin(),
|
||||
],
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue