Compare commits

..

306 Commits

Author SHA1 Message Date
Eugene Pankov
71780a707a linux build fix 2019-05-26 20:54:10 +02:00
Eugene Pankov
8e390eef05 added welcome tab (fixes #845) 2019-05-25 22:52:25 +02:00
Eugene
96f1342c84 Bump @types/electron-config from 0.2.1 to 3.2.2 (#929)
Bump @types/electron-config from 0.2.1 to 3.2.2
2019-05-25 11:43:53 +02:00
Eugene
2f93202d1d Bump electron-config from 0.2.1 to 2.0.0 in /app (#858)
Bump electron-config from 0.2.1 to 2.0.0 in /app
2019-05-25 11:43:42 +02:00
Eugene
29ba16a68f [Security] Bump bootstrap from 4.1.3 to 4.3.1 in /terminus-core (#887)
[Security] Bump bootstrap from 4.1.3 to 4.3.1 in /terminus-core
2019-05-25 11:43:25 +02:00
Eugene
5da0ef1f0d Bump electron-builder from 20.40.2 to 20.41.0 (#952)
Bump electron-builder from 20.40.2 to 20.41.0
2019-05-25 11:42:42 +02:00
dependabot-preview[bot]
878e846150 Bump electron-builder from 20.40.2 to 20.41.0
Bumps [electron-builder](https://github.com/electron-userland/electron-builder) from 20.40.2 to 20.41.0.
- [Release notes](https://github.com/electron-userland/electron-builder/releases)
- [Changelog](https://github.com/electron-userland/electron-builder/blob/master/CHANGELOG.md)
- [Commits](https://github.com/electron-userland/electron-builder/compare/v20.40.2...v20.41.0)
2019-05-25 09:39:24 +00:00
Eugene
aebbe3dbfd Bump keytar from 4.8.0 to 4.9.0 in /terminus-ssh (#950)
Bump keytar from 4.8.0 to 4.9.0 in /terminus-ssh
2019-05-25 11:38:56 +02:00
Eugene
b9132ac5cb Bump electron-rebuild from 1.8.4 to 1.8.5 (#951)
Bump electron-rebuild from 1.8.4 to 1.8.5
2019-05-25 11:38:45 +02:00
Eugene
bbbaaaa61c Bump app-builder-lib from 20.41.0 to 20.42.0 (#953)
Bump app-builder-lib from 20.41.0 to 20.42.0
2019-05-25 11:37:36 +02:00
dependabot-preview[bot]
9795efd965 Bump app-builder-lib from 20.41.0 to 20.42.0
Bumps [app-builder-lib](https://github.com/electron-userland/electron-builder) from 20.41.0 to 20.42.0.
- [Release notes](https://github.com/electron-userland/electron-builder/releases)
- [Changelog](https://github.com/electron-userland/electron-builder/blob/master/CHANGELOG.md)
- [Commits](https://github.com/electron-userland/electron-builder/compare/v20.41.0...v20.42.0)
2019-05-25 08:53:36 +00:00
dependabot-preview[bot]
c350b99465 Bump electron-rebuild from 1.8.4 to 1.8.5
Bumps [electron-rebuild](https://github.com/electron/electron-rebuild) from 1.8.4 to 1.8.5.
- [Release notes](https://github.com/electron/electron-rebuild/releases)
- [Commits](https://github.com/electron/electron-rebuild/compare/v1.8.4...v1.8.5)
2019-05-25 08:52:32 +00:00
dependabot-preview[bot]
6a64ea5254 Bump keytar from 4.8.0 to 4.9.0 in /terminus-ssh
Bumps [keytar](https://github.com/atom/node-keytar) from 4.8.0 to 4.9.0.
- [Release notes](https://github.com/atom/node-keytar/releases)
- [Commits](https://github.com/atom/node-keytar/compare/v4.8.0...v4.9.0)
2019-05-25 08:51:42 +00:00
Eugene Pankov
ad469c08fe lint 2019-05-24 21:23:03 +02:00
Eugene Pankov
661ada154e cleanup 2019-05-24 21:21:42 +02:00
Eugene Pankov
a8bbdea224 compat fixes 2019-05-24 21:19:08 +02:00
Eugene Pankov
4c0bf62b7b Merge branch 'master' of github.com:Eugeny/terminus 2019-05-24 21:10:23 +02:00
Eugene Pankov
f5b096e6d4 Update yarn.lock 2019-05-24 21:10:20 +02:00
Eugene
463edc2822 Bump electron-installer-snap from 3.0.0 to 3.2.0 (#943)
Bump electron-installer-snap from 3.0.0 to 3.2.0
2019-05-24 21:10:02 +02:00
Eugene
02ef0fcd5e Bump val-loader from 0.5.0 to 1.1.1 (#846)
Bump val-loader from 0.5.0 to 1.1.1
2019-05-24 21:09:47 +02:00
dependabot-preview[bot]
556f622527 Bump val-loader from 0.5.0 to 1.1.1
Bumps [val-loader](https://github.com/webpack-contrib/val-loader) from 0.5.0 to 1.1.1.
- [Release notes](https://github.com/webpack-contrib/val-loader/releases)
- [Changelog](https://github.com/webpack-contrib/val-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/val-loader/commits/v1.1.1)
2019-05-24 19:09:24 +00:00
dependabot-preview[bot]
8bb194ddda Bump electron-installer-snap from 3.0.0 to 3.2.0
Bumps [electron-installer-snap](https://github.com/electron-userland/electron-installer-snap) from 3.0.0 to 3.2.0.
- [Release notes](https://github.com/electron-userland/electron-installer-snap/releases)
- [Changelog](https://github.com/electron-userland/electron-installer-snap/blob/master/NEWS.md)
- [Commits](https://github.com/electron-userland/electron-installer-snap/compare/v3.0.0...v3.2.0)
2019-05-24 19:09:10 +00:00
Eugene
4a040be01e Bump raw-loader from 0.5.1 to 2.0.0 (#871)
Bump raw-loader from 0.5.1 to 2.0.0
2019-05-24 21:07:31 +02:00
Eugene
8d90dcca0e Bump pug-static-loader from 0.0.1 to 2.0.0 (#944)
Bump pug-static-loader from 0.0.1 to 2.0.0
2019-05-24 21:06:06 +02:00
Eugene
9f7643b0d3 Bump css-loader from 0.28.0 to 2.1.1 (#942)
Bump css-loader from 0.28.0 to 2.1.1
2019-05-24 21:05:36 +02:00
dependabot-preview[bot]
528852ba83 Bump pug-static-loader from 0.0.1 to 2.0.0
Bumps pug-static-loader from 0.0.1 to 2.0.0.
2019-05-24 19:05:01 +00:00
Eugene Pankov
7d92f24a02 Merge branch 'master' of github.com:Eugeny/terminus 2019-05-24 21:04:45 +02:00
Eugene
d66afd0e13 Bump node-gyp from 3.8.0 to 4.0.0 (#941)
Bump node-gyp from 3.8.0 to 4.0.0
2019-05-24 21:04:25 +02:00
dependabot-preview[bot]
e1c3329d75 Bump css-loader from 0.28.0 to 2.1.1
Bumps [css-loader](https://github.com/webpack-contrib/css-loader) from 0.28.0 to 2.1.1.
- [Release notes](https://github.com/webpack-contrib/css-loader/releases)
- [Changelog](https://github.com/webpack-contrib/css-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/css-loader/compare/v0.28.0...v2.1.1)
2019-05-24 19:04:12 +00:00
dependabot-preview[bot]
a8635d0882 Bump node-gyp from 3.8.0 to 4.0.0
Bumps [node-gyp](https://github.com/nodejs/node-gyp) from 3.8.0 to 4.0.0.
- [Release notes](https://github.com/nodejs/node-gyp/releases)
- [Changelog](https://github.com/nodejs/node-gyp/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodejs/node-gyp/compare/v3.8.0...v4.0.0)
2019-05-24 19:03:44 +00:00
dependabot-preview[bot]
0c75e46a3b [Security] Bump bootstrap from 4.1.3 to 4.3.1 in /terminus-core
Bumps [bootstrap](https://github.com/twbs/bootstrap) from 4.1.3 to 4.3.1. **This update includes security fixes.**
- [Release notes](https://github.com/twbs/bootstrap/releases)
- [Commits](https://github.com/twbs/bootstrap/compare/v4.1.3...v4.3.1)
2019-05-24 19:01:46 +00:00
dependabot-preview[bot]
450349b006 Bump @types/electron-config from 0.2.1 to 3.2.2
Bumps [@types/electron-config](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/electron-config) from 0.2.1 to 3.2.2.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/electron-config)
2019-05-24 19:01:10 +00:00
Eugene
b416570ebf Bump source-sans-pro from 2.0.10 to 2.45.0 (#938)
Bump source-sans-pro from 2.0.10 to 2.45.0
2019-05-24 21:01:05 +02:00
dependabot-preview[bot]
bb6b4921b4 Bump electron-config from 0.2.1 to 2.0.0 in /app
Bumps [electron-config](https://github.com/sindresorhus/electron-config) from 0.2.1 to 2.0.0.
- [Release notes](https://github.com/sindresorhus/electron-config/releases)
- [Commits](https://github.com/sindresorhus/electron-config/compare/v0.2.1...v2.0.0)
2019-05-24 19:00:52 +00:00
Eugene
857fb7feeb Bump @types/webpack-env from 1.13.0 to 1.13.9 (#939)
Bump @types/webpack-env from 1.13.0 to 1.13.9
2019-05-24 21:00:51 +02:00
dependabot-preview[bot]
84dbe1f2df Bump raw-loader from 0.5.1 to 2.0.0
Bumps [raw-loader](https://github.com/webpack-contrib/raw-loader) from 0.5.1 to 2.0.0.
- [Release notes](https://github.com/webpack-contrib/raw-loader/releases)
- [Changelog](https://github.com/webpack-contrib/raw-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/raw-loader/commits/v2.0.0)
2019-05-24 19:00:45 +00:00
Eugene
96d86ca93f Bump electron from 5.0.1 to 5.0.2 (#937)
Bump electron from 5.0.1 to 5.0.2
2019-05-24 21:00:40 +02:00
Eugene
47a5362863 Bump @ng-bootstrap/ng-bootstrap from 3.3.1 to 4.1.3 in /app (#919)
Bump @ng-bootstrap/ng-bootstrap from 3.3.1 to 4.1.3 in /app
2019-05-24 21:00:25 +02:00
Eugene
f7740e3030 Bump @types/fs-promise from 1.0.1 to 1.0.3 (#936)
Bump @types/fs-promise from 1.0.1 to 1.0.3
2019-05-24 20:59:27 +02:00
dependabot-preview[bot]
1187dfe4a9 Bump @types/fs-promise from 1.0.1 to 1.0.3
Bumps [@types/fs-promise](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/fs-promise) from 1.0.1 to 1.0.3.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/fs-promise)
2019-05-24 18:59:15 +00:00
Eugene
e652800a65 Bump @fortawesome/fontawesome-free from 5.6.3 to 5.8.2 (#935)
Bump @fortawesome/fontawesome-free from 5.6.3 to 5.8.2
2019-05-24 20:59:12 +02:00
Eugene
12bc1025c7 Bump npmlog from 4.1.0 to 4.1.2 (#933)
Bump npmlog from 4.1.0 to 4.1.2
2019-05-24 20:59:02 +02:00
Eugene
800720e578 Bump apply-loader from 0.1.0 to 2.0.0 (#934)
Bump apply-loader from 0.1.0 to 2.0.0
2019-05-24 20:58:54 +02:00
dependabot-preview[bot]
aba9c73974 Bump @fortawesome/fontawesome-free from 5.6.3 to 5.8.2
Bumps [@fortawesome/fontawesome-free](https://github.com/FortAwesome/Font-Awesome) from 5.6.3 to 5.8.2.
- [Release notes](https://github.com/FortAwesome/Font-Awesome/releases)
- [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/master/CHANGELOG.md)
- [Commits](https://github.com/FortAwesome/Font-Awesome/compare/5.6.3...5.8.2)
2019-05-24 18:58:43 +00:00
dependabot-preview[bot]
8faafb1014 Bump apply-loader from 0.1.0 to 2.0.0
Bumps [apply-loader](https://github.com/mogelbrod/apply-loader) from 0.1.0 to 2.0.0.
- [Release notes](https://github.com/mogelbrod/apply-loader/releases)
- [Commits](https://github.com/mogelbrod/apply-loader/commits/v2.0.0)
2019-05-24 18:57:52 +00:00
dependabot-preview[bot]
88f1816c62 Bump npmlog from 4.1.0 to 4.1.2
Bumps [npmlog](https://github.com/npm/npmlog) from 4.1.0 to 4.1.2.
- [Release notes](https://github.com/npm/npmlog/releases)
- [Changelog](https://github.com/npm/npmlog/blob/master/CHANGELOG.md)
- [Commits](https://github.com/npm/npmlog/compare/v4.1.0...v4.1.2)
2019-05-24 18:57:49 +00:00
dependabot-preview[bot]
35e8e5f525 Bump @types/webpack-env from 1.13.0 to 1.13.9
Bumps [@types/webpack-env](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/webpack-env) from 1.13.0 to 1.13.9.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/webpack-env)
2019-05-24 18:57:46 +00:00
dependabot-preview[bot]
2d845069c1 Bump source-sans-pro from 2.0.10 to 2.45.0
Bumps [source-sans-pro](https://github.com/adobe-fonts/source-sans-pro) from 2.0.10 to 2.45.0.
- [Release notes](https://github.com/adobe-fonts/source-sans-pro/releases)
- [Commits](https://github.com/adobe-fonts/source-sans-pro/commits)
2019-05-24 18:57:19 +00:00
dependabot-preview[bot]
64c65d35c9 Bump electron from 5.0.1 to 5.0.2
Bumps [electron](https://github.com/electron/electron) from 5.0.1 to 5.0.2.
- [Release notes](https://github.com/electron/electron/releases)
- [Commits](https://github.com/electron/electron/compare/v5.0.1...v5.0.2)
2019-05-24 18:57:09 +00:00
Eugene
8925b20447 Bump @types/electron-debug from 1.1.0 to 2.1.0 (#931)
Bump @types/electron-debug from 1.1.0 to 2.1.0
2019-05-24 20:57:01 +02:00
Eugene
ca0680519c Bump typescript from 3.1.3 to 3.4.5 (#926)
Bump typescript from 3.1.3 to 3.4.5
2019-05-24 20:56:44 +02:00
Eugene
e9036ebeac Bump shelljs from 0.7.7 to 0.8.3 (#928)
Bump shelljs from 0.7.7 to 0.8.3
2019-05-24 20:56:35 +02:00
Eugene
f35d47ee4f Bump tslint from 5.12.0 to 5.16.0 (#927)
Bump tslint from 5.12.0 to 5.16.0
2019-05-24 20:56:16 +02:00
dependabot-preview[bot]
d6e6e7e511 Bump typescript from 3.1.3 to 3.4.5
Bumps [typescript](https://github.com/Microsoft/TypeScript) from 3.1.3 to 3.4.5.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/compare/v3.1.3...v3.4.5)
2019-05-24 18:55:41 +00:00
Eugene
903fa12ac4 Merge pull request #930 from Eugeny/dependabot/npm_and_yarn/pug-html-loader-1.1.5
Bump pug-html-loader from 1.0.9 to 1.1.5
2019-05-24 20:55:41 +02:00
dependabot-preview[bot]
9071c8ca23 Bump pug-html-loader from 1.0.9 to 1.1.5
Bumps [pug-html-loader](https://github.com/willyelm/pug-html-loader) from 1.0.9 to 1.1.5.
- [Release notes](https://github.com/willyelm/pug-html-loader/releases)
- [Commits](https://github.com/willyelm/pug-html-loader/commits)
2019-05-24 18:54:53 +00:00
Eugene Pankov
6bff52c951 removed yarn from deps 2019-05-24 20:54:36 +02:00
Eugene
7c450ec6b2 Bump @types/semver from 5.4.0 to 6.0.0 in /terminus-plugin-manager (#920)
Bump @types/semver from 5.4.0 to 6.0.0 in /terminus-plugin-manager
2019-05-24 20:53:34 +02:00
Eugene
e791190558 Bump rxjs from 6.3.3 to 6.5.2 in /app (#921)
Bump rxjs from 6.3.3 to 6.5.2 in /app
2019-05-24 20:52:59 +02:00
dependabot-preview[bot]
a6e6c425a5 Bump @types/electron-debug from 1.1.0 to 2.1.0
Bumps [@types/electron-debug](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/electron-debug) from 1.1.0 to 2.1.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/electron-debug)
2019-05-24 18:52:56 +00:00
Eugene
14dcb22afe Bump @types/js-yaml from 3.11.2 to 3.12.1 (#922)
Bump @types/js-yaml from 3.11.2 to 3.12.1
2019-05-24 20:52:43 +02:00
Eugene
1e25a45b4a Merge pull request #923 from Eugeny/dependabot/npm_and_yarn/yaml-loader-0.5.0
Bump yaml-loader from 0.4.0 to 0.5.0
2019-05-24 20:52:24 +02:00
Eugene
3e5a722b66 Bump webpack from 4.31.0 to 4.32.2 (#924)
Bump webpack from 4.31.0 to 4.32.2
2019-05-24 20:51:58 +02:00
dependabot-preview[bot]
524e5511c9 Bump shelljs from 0.7.7 to 0.8.3
Bumps [shelljs](https://github.com/shelljs/shelljs) from 0.7.7 to 0.8.3.
- [Release notes](https://github.com/shelljs/shelljs/releases)
- [Changelog](https://github.com/shelljs/shelljs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/shelljs/shelljs/compare/v0.7.7...v0.8.3)
2019-05-24 18:51:38 +00:00
Eugene
946306c28b Bump html-loader from 0.4.4 to 0.5.5 (#925)
Bump html-loader from 0.4.4 to 0.5.5
2019-05-24 20:51:33 +02:00
dependabot-preview[bot]
c2d9416fec Bump tslint from 5.12.0 to 5.16.0
Bumps [tslint](https://github.com/palantir/tslint) from 5.12.0 to 5.16.0.
- [Release notes](https://github.com/palantir/tslint/releases)
- [Changelog](https://github.com/palantir/tslint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/palantir/tslint/compare/5.12.0...5.16.0)
2019-05-24 18:51:16 +00:00
dependabot-preview[bot]
d55f54d90b Bump html-loader from 0.4.4 to 0.5.5
Bumps [html-loader](https://github.com/webpack-contrib/html-loader) from 0.4.4 to 0.5.5.
- [Release notes](https://github.com/webpack-contrib/html-loader/releases)
- [Changelog](https://github.com/webpack-contrib/html-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/html-loader/compare/v0.4.4...v0.5.5)
2019-05-24 18:50:19 +00:00
dependabot-preview[bot]
cbb6a7ab9a Bump webpack from 4.31.0 to 4.32.2
Bumps [webpack](https://github.com/webpack/webpack) from 4.31.0 to 4.32.2.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.31.0...v4.32.2)
2019-05-24 18:49:56 +00:00
Eugene
2e7caf7118 Bump keytar from 4.7.0 to 4.8.0 in /terminus-ssh (#917)
Bump keytar from 4.7.0 to 4.8.0 in /terminus-ssh
2019-05-24 20:49:47 +02:00
Eugene
bf56659907 Bump @types/webpack-env from 1.13.1 to 1.13.9 in /terminus-core (#918)
Bump @types/webpack-env from 1.13.1 to 1.13.9 in /terminus-core
2019-05-24 20:49:36 +02:00
dependabot-preview[bot]
dfa95dbd78 Bump yaml-loader from 0.4.0 to 0.5.0
Bumps [yaml-loader](https://github.com/okonet/yaml-loader) from 0.4.0 to 0.5.0.
- [Release notes](https://github.com/okonet/yaml-loader/releases)
- [Commits](https://github.com/okonet/yaml-loader/compare/v0.4.0...v0.5.0)
2019-05-24 18:49:27 +00:00
dependabot-preview[bot]
d41021b3cc Bump @types/js-yaml from 3.11.2 to 3.12.1
Bumps [@types/js-yaml](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/js-yaml) from 3.11.2 to 3.12.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/js-yaml)
2019-05-24 18:49:04 +00:00
dependabot-preview[bot]
0ddc1bed76 Bump rxjs from 6.3.3 to 6.5.2 in /app
Bumps [rxjs](https://github.com/reactivex/rxjs) from 6.3.3 to 6.5.2.
- [Release notes](https://github.com/reactivex/rxjs/releases)
- [Changelog](https://github.com/ReactiveX/rxjs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/reactivex/rxjs/compare/6.3.3...6.5.2)
2019-05-24 18:48:54 +00:00
dependabot-preview[bot]
8f7f10dc8f Bump @types/semver from 5.4.0 to 6.0.0 in /terminus-plugin-manager
Bumps [@types/semver](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/semver) from 5.4.0 to 6.0.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/semver)
2019-05-24 18:48:34 +00:00
dependabot-preview[bot]
dea7ee8ee1 Bump @ng-bootstrap/ng-bootstrap from 3.3.1 to 4.1.3 in /app
Bumps [@ng-bootstrap/ng-bootstrap](https://github.com/ng-bootstrap/ng-bootstrap) from 3.3.1 to 4.1.3.
- [Release notes](https://github.com/ng-bootstrap/ng-bootstrap/releases)
- [Changelog](https://github.com/ng-bootstrap/ng-bootstrap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ng-bootstrap/ng-bootstrap/compare/3.3.1...4.1.3)
2019-05-24 18:48:08 +00:00
dependabot-preview[bot]
b79d618aaa Bump @types/webpack-env from 1.13.1 to 1.13.9 in /terminus-core
Bumps [@types/webpack-env](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/webpack-env) from 1.13.1 to 1.13.9.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/webpack-env)
2019-05-24 18:48:03 +00:00
dependabot-preview[bot]
b2c0af2307 Bump keytar from 4.7.0 to 4.8.0 in /terminus-ssh
Bumps [keytar](https://github.com/atom/node-keytar) from 4.7.0 to 4.8.0.
- [Release notes](https://github.com/atom/node-keytar/releases)
- [Commits](https://github.com/atom/node-keytar/compare/v4.7.0...v4.8.0)
2019-05-24 18:48:01 +00:00
Eugene Pankov
44cf23ec08 updated electron-debug usage 2019-05-24 20:46:44 +02:00
Eugene
7b9cc47875 Bump electron-debug from 2.0.0 to 3.0.0 in /app (#869)
Bump electron-debug from 2.0.0 to 3.0.0 in /app
2019-05-24 20:46:09 +02:00
Eugene
6e59ea007c Bump @types/webpack-env from 1.13.0 to 1.13.9 in /terminus-plugin-manager (#911)
Bump @types/webpack-env from 1.13.0 to 1.13.9 in /terminus-plugin-manager
2019-05-24 20:45:01 +02:00
Eugene
f580c72f1d [Security] Bump tar from 2.2.1 to 2.2.2 (#914)
[Security] Bump tar from 2.2.1 to 2.2.2
2019-05-24 20:44:28 +02:00
dependabot-preview[bot]
1ae91b3ea7 Bump @types/webpack-env in /terminus-plugin-manager
Bumps [@types/webpack-env](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/webpack-env) from 1.13.0 to 1.13.9.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/webpack-env)
2019-05-24 18:44:15 +00:00
dependabot-preview[bot]
60d7f546c1 Bump electron-debug from 2.0.0 to 3.0.0 in /app
Bumps [electron-debug](https://github.com/sindresorhus/electron-debug) from 2.0.0 to 3.0.0.
- [Release notes](https://github.com/sindresorhus/electron-debug/releases)
- [Commits](https://github.com/sindresorhus/electron-debug/compare/v2.0.0...v3.0.0)
2019-05-24 18:43:52 +00:00
Eugene
a3c834696d [Security] Bump tar from 2.2.1 to 2.2.2 in /terminus-plugin-manager (#915)
[Security] Bump tar from 2.2.1 to 2.2.2 in /terminus-plugin-manager
2019-05-24 20:43:01 +02:00
Eugene
00e33d6d1e Bump mz from 2.6.0 to 2.7.0 in /terminus-plugin-manager (#909)
Bump mz from 2.6.0 to 2.7.0 in /terminus-plugin-manager
2019-05-24 20:42:48 +02:00
Eugene
c9de6ef26b Bump @types/node from 7.0.12 to 12.0.2 in /terminus-plugin-manager (#913)
Bump @types/node from 7.0.12 to 12.0.2 in /terminus-plugin-manager
2019-05-24 20:42:38 +02:00
Eugene
8660d0ced4 Bump @types/node from 10.11.5 to 12.0.2 (#908)
Bump @types/node from 10.11.5 to 12.0.2
2019-05-24 20:42:26 +02:00
Eugene
23fa0c100c Bump deepmerge from 1.5.1 to 3.2.0 in /terminus-core (#910)
Bump deepmerge from 1.5.1 to 3.2.0 in /terminus-core
2019-05-24 20:42:03 +02:00
Eugene
8376a049ad [ImgBot] Optimize images (#916)
[ImgBot] Optimize images
2019-05-24 20:41:30 +02:00
dependabot-preview[bot]
7bd26b542a Bump deepmerge from 1.5.1 to 3.2.0 in /terminus-core
Bumps [deepmerge](https://github.com/TehShrike/deepmerge) from 1.5.1 to 3.2.0.
- [Release notes](https://github.com/TehShrike/deepmerge/releases)
- [Changelog](https://github.com/TehShrike/deepmerge/blob/master/changelog.md)
- [Commits](https://github.com/TehShrike/deepmerge/compare/v1.5.1...v3.2.0)
2019-05-24 18:41:21 +00:00
ImgBotApp
949ec282c1 [ImgBot] Optimize images
*Total -- 40.79kb -> 35.33kb (13.37%)

/build/icons/16x16.png -- 2.15kb -> 0.93kb (56.94%)
/build/icons/32x32.png -- 3.05kb -> 1.71kb (43.93%)
/build/icons/64x64.png -- 5.17kb -> 3.94kb (23.7%)
/build/icons/128x128.png -- 9.82kb -> 8.92kb (9.09%)
/build/icons/256x256.png -- 20.60kb -> 19.83kb (3.74%)
2019-05-24 18:40:03 +00:00
Eugene
00652f59c3 Bump file-loader from 1.1.11 to 3.0.1 (#903)
Bump file-loader from 1.1.11 to 3.0.1
2019-05-24 20:39:50 +02:00
Eugene
0502410b22 Bump winston from 2.4.0 to 3.2.1 in /terminus-core (#904)
Bump winston from 2.4.0 to 3.2.1 in /terminus-core
2019-05-24 20:39:24 +02:00
dependabot-preview[bot]
34eac02101 Bump @types/node from 10.11.5 to 12.0.2
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 10.11.5 to 12.0.2.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)
2019-05-24 18:36:44 +00:00
dependabot-preview[bot]
480db40f10 Bump @types/node from 7.0.12 to 12.0.2 in /terminus-plugin-manager
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 7.0.12 to 12.0.2.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)
2019-05-24 18:36:38 +00:00
dependabot-preview[bot]
4ad047aed7 Bump mz from 2.6.0 to 2.7.0 in /terminus-plugin-manager
Bumps [mz](https://github.com/normalize/mz) from 2.6.0 to 2.7.0.
- [Release notes](https://github.com/normalize/mz/releases)
- [Changelog](https://github.com/normalize/mz/blob/master/HISTORY.md)
- [Commits](https://github.com/normalize/mz/compare/2.6.0...2.7.0)
2019-05-24 18:35:15 +00:00
Eugene
d50e59eadb Bump yargs from 12.0.1 to 13.2.4 in /app (#905)
Bump yargs from 12.0.1 to 13.2.4 in /app
2019-05-24 20:34:30 +02:00
dependabot-preview[bot]
067f5b3342 Bump winston from 2.4.0 to 3.2.1 in /terminus-core
Bumps [winston](https://github.com/winstonjs/winston) from 2.4.0 to 3.2.1.
- [Release notes](https://github.com/winstonjs/winston/releases)
- [Changelog](https://github.com/winstonjs/winston/blob/master/CHANGELOG.md)
- [Commits](https://github.com/winstonjs/winston/compare/2.4.0...3.2.1)
2019-05-24 18:34:20 +00:00
Eugene
c23c696adf Bump axios from 0.16.2 to 0.18.0 in /terminus-plugin-manager (#906)
Bump axios from 0.16.2 to 0.18.0 in /terminus-plugin-manager
2019-05-24 20:33:30 +02:00
Eugene
ea50332799 Bump electron-updater from 2.8.9 to 4.0.6 in /terminus-core (#907)
Bump electron-updater from 2.8.9 to 4.0.6 in /terminus-core
2019-05-24 20:32:55 +02:00
Eugene Pankov
9ce04e4945 bumped core-js 2019-05-24 20:30:42 +02:00
dependabot-preview[bot]
39d7ebb7e9 Bump axios from 0.16.2 to 0.18.0 in /terminus-plugin-manager
Bumps [axios](https://github.com/axios/axios) from 0.16.2 to 0.18.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/master/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.16.2...v0.18.0)
2019-05-24 18:23:04 +00:00
dependabot-preview[bot]
6c97c8bd20 Bump electron-updater from 2.8.9 to 4.0.6 in /terminus-core
Bumps [electron-updater](https://github.com/electron-userland/electron-builder) from 2.8.9 to 4.0.6.
- [Release notes](https://github.com/electron-userland/electron-builder/releases)
- [Changelog](https://github.com/electron-userland/electron-builder/blob/master/CHANGELOG.md)
- [Commits](https://github.com/electron-userland/electron-builder/commits/electron-updater-v4.0.6)
2019-05-24 18:22:56 +00:00
Eugene
c32d8f3497 Bump core-js from 2.5.1 to 3.1.2 in /terminus-core (#902)
Bump core-js from 2.5.1 to 3.1.2 in /terminus-core
2019-05-24 20:21:24 +02:00
dependabot-preview[bot]
73d27a6a49 [Security] Bump tar from 2.2.1 to 2.2.2 in /terminus-plugin-manager
Bumps [tar](https://github.com/npm/node-tar) from 2.2.1 to 2.2.2. **This update includes security fixes.**
- [Release notes](https://github.com/npm/node-tar/releases)
- [Commits](https://github.com/npm/node-tar/compare/v2.2.1...v2.2.2)
2019-05-24 18:15:36 +00:00
dependabot-preview[bot]
aa3be39f89 Bump file-loader from 1.1.11 to 3.0.1
Bumps [file-loader](https://github.com/webpack-contrib/file-loader) from 1.1.11 to 3.0.1.
- [Release notes](https://github.com/webpack-contrib/file-loader/releases)
- [Changelog](https://github.com/webpack-contrib/file-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/file-loader/compare/v1.1.11...v3.0.1)
2019-05-24 18:11:08 +00:00
Eugene
7c0317f38a Bump @types/ssh2 from 0.5.35 to 0.5.38 in /terminus-ssh (#901)
Bump @types/ssh2 from 0.5.35 to 0.5.38 in /terminus-ssh
2019-05-24 20:09:59 +02:00
Eugene
c2f759f52a Bump graceful-fs from 4.1.11 to 4.1.15 (#899)
Bump graceful-fs from 4.1.11 to 4.1.15
2019-05-24 20:08:56 +02:00
Eugene Pankov
347f1c4840 dep fixes 2019-05-24 20:08:30 +02:00
dependabot-preview[bot]
24bb1d70da Bump core-js from 2.5.1 to 3.1.2 in /terminus-core
Bumps [core-js](https://github.com/zloirock/core-js) from 2.5.1 to 3.1.2.
- [Release notes](https://github.com/zloirock/core-js/releases)
- [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zloirock/core-js/compare/v2.5.1...v3.1.2)
2019-05-24 18:07:32 +00:00
Eugene
3187545bb7 Bump electron-is-dev from 0.1.2 to 1.1.0 in /app (#900)
Bump electron-is-dev from 0.1.2 to 1.1.0 in /app
2019-05-24 20:07:23 +02:00
dependabot-preview[bot]
e6f5a3d93f Bump yargs from 12.0.1 to 13.2.4 in /app
Bumps [yargs](https://github.com/yargs/yargs) from 12.0.1 to 13.2.4.
- [Release notes](https://github.com/yargs/yargs/releases)
- [Changelog](https://github.com/yargs/yargs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/yargs/yargs/compare/v12.0.1...v13.2.4)
2019-05-24 18:07:13 +00:00
Eugene
387ff7d950 Bump cross-env from 4.0.0 to 5.2.0 (#897)
Bump cross-env from 4.0.0 to 5.2.0
2019-05-24 20:05:41 +02:00
Eugene
84f5d558fb Bump zone.js from 0.8.26 to 0.8.29 in /app (#896)
Bump zone.js from 0.8.26 to 0.8.29 in /app
2019-05-24 20:05:17 +02:00
Eugene
22452d9da6 Bump @types/mz from 0.0.31 to 0.0.32 in /app (#895)
Bump @types/mz from 0.0.31 to 0.0.32 in /app
2019-05-24 20:04:49 +02:00
dependabot-preview[bot]
373429ce57 [Security] Bump tar from 2.2.1 to 2.2.2
Bumps [tar](https://github.com/npm/node-tar) from 2.2.1 to 2.2.2. **This update includes security fixes.**
- [Release notes](https://github.com/npm/node-tar/releases)
- [Commits](https://github.com/npm/node-tar/compare/v2.2.1...v2.2.2)
2019-05-24 18:02:48 +00:00
Eugene Pankov
a697e063a6 node-pty proper import 2019-05-24 20:02:22 +02:00
Eugene Pankov
25131a5e92 reverted back to upstream node-pty 2019-05-24 19:48:31 +02:00
Eugene Pankov
8f9d6b2be8 Revert "Revert "use new style xterm events""
This reverts commit 6a969d2cd2.
2019-05-24 19:45:40 +02:00
dependabot-preview[bot]
bc78ef49c6 Bump @types/ssh2 from 0.5.35 to 0.5.38 in /terminus-ssh
Bumps [@types/ssh2](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/ssh2) from 0.5.35 to 0.5.38.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/ssh2)
2019-05-24 16:57:47 +00:00
dependabot-preview[bot]
c25e7cab77 Bump electron-is-dev from 0.1.2 to 1.1.0 in /app
Bumps [electron-is-dev](https://github.com/sindresorhus/electron-is-dev) from 0.1.2 to 1.1.0.
- [Release notes](https://github.com/sindresorhus/electron-is-dev/releases)
- [Commits](https://github.com/sindresorhus/electron-is-dev/compare/v0.1.2...v1.1.0)
2019-05-24 16:57:43 +00:00
dependabot-preview[bot]
e391524d69 Bump graceful-fs from 4.1.11 to 4.1.15
Bumps [graceful-fs](https://github.com/isaacs/node-graceful-fs) from 4.1.11 to 4.1.15.
- [Release notes](https://github.com/isaacs/node-graceful-fs/releases)
- [Commits](https://github.com/isaacs/node-graceful-fs/compare/v4.1.11...v4.1.15)
2019-05-24 16:57:41 +00:00
dependabot-preview[bot]
bbf3faf1e3 Bump cross-env from 4.0.0 to 5.2.0
Bumps [cross-env](https://github.com/kentcdodds/cross-env) from 4.0.0 to 5.2.0.
- [Release notes](https://github.com/kentcdodds/cross-env/releases)
- [Changelog](https://github.com/kentcdodds/cross-env/blob/master/CHANGELOG.md)
- [Commits](https://github.com/kentcdodds/cross-env/compare/v4.0.0...v5.2.0)
2019-05-24 16:57:16 +00:00
dependabot-preview[bot]
902deb020b Bump zone.js from 0.8.26 to 0.8.29 in /app
Bumps [zone.js](https://github.com/angular/zone.js) from 0.8.26 to 0.8.29.
- [Release notes](https://github.com/angular/zone.js/releases)
- [Changelog](https://github.com/angular/zone.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular/zone.js/compare/v0.8.26...v0.8.29)
2019-05-24 16:56:53 +00:00
dependabot-preview[bot]
a37d28d6db Bump @types/mz from 0.0.31 to 0.0.32 in /app
Bumps [@types/mz](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/mz) from 0.0.31 to 0.0.32.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/mz)
2019-05-24 16:56:23 +00:00
Eugene
f547122b41 Bump @types/winston from 2.3.6 to 2.4.4 in /terminus-core (#872)
Bump @types/winston from 2.3.6 to 2.4.4 in /terminus-core
2019-05-24 18:12:48 +02:00
dependabot-preview[bot]
a9f9560728 Bump @types/winston from 2.3.6 to 2.4.4 in /terminus-core
Bumps [@types/winston](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/winston) from 2.3.6 to 2.4.4.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/winston)
2019-05-24 16:12:24 +00:00
Eugene
48cf9d4008 [Security] Bump deep-extend from 0.4.2 to 0.6.0 in /terminus-ssh (#893)
[Security] Bump deep-extend from 0.4.2 to 0.6.0 in /terminus-ssh
2019-05-24 18:12:00 +02:00
Eugene
2dd527864e Bump @types/node from 7.0.12 to 12.0.2 in /terminus-community-color-schemes (#868)
Bump @types/node from 7.0.12 to 12.0.2 in /terminus-community-color-schemes
2019-05-24 18:11:37 +02:00
Eugene
1364a69b35 Bump @types/node from 7.0.43 to 12.0.2 in /terminus-core (#849)
Bump @types/node from 7.0.43 to 12.0.2 in /terminus-core
2019-05-24 18:11:09 +02:00
Eugene
bd33689d8b Bump @types/node from 7.0.12 to 12.0.2 in /terminus-terminal (#865)
Bump @types/node from 7.0.12 to 12.0.2 in /terminus-terminal
2019-05-24 18:11:04 +02:00
Eugene
e1fad67107 Bump @types/node from 7.0.12 to 12.0.2 in /terminus-settings (#854)
Bump @types/node from 7.0.12 to 12.0.2 in /terminus-settings
2019-05-24 18:10:52 +02:00
Eugene
aa63b04e2a [Security] Bump macaddress from 0.2.8 to 0.2.9 in /terminus-plugin-manager (#877)
[Security] Bump macaddress from 0.2.8 to 0.2.9 in /terminus-plugin-manager
2019-05-24 18:10:34 +02:00
dependabot-preview[bot]
81b0b63da4 [Security] Bump deep-extend from 0.4.2 to 0.6.0 in /terminus-ssh
Bumps [deep-extend](https://github.com/unclechu/node-deep-extend) from 0.4.2 to 0.6.0. **This update includes security fixes.**
- [Release notes](https://github.com/unclechu/node-deep-extend/releases)
- [Changelog](https://github.com/unclechu/node-deep-extend/blob/master/CHANGELOG.md)
- [Commits](https://github.com/unclechu/node-deep-extend/compare/v0.4.2...v0.6.0)
2019-05-24 16:10:21 +00:00
Eugene
aaf575354d Bump semver from 5.4.1 to 6.1.0 in /terminus-plugin-manager (#882)
Bump semver from 5.4.1 to 6.1.0 in /terminus-plugin-manager
2019-05-24 18:09:00 +02:00
dependabot-preview[bot]
d4428d1fc3 Bump @types/node in /terminus-community-color-schemes
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 7.0.12 to 12.0.2.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)
2019-05-24 16:08:54 +00:00
dependabot-preview[bot]
debac7551b Bump @types/node from 7.0.12 to 12.0.2 in /terminus-settings
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 7.0.12 to 12.0.2.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)
2019-05-24 16:08:52 +00:00
Eugene
eaf5b6166d Merge pull request #850 from Eugeny/dependabot/npm_and_yarn/terminus-terminal/slug-1.1.0
Bump slug from 0.9.3 to 1.1.0 in /terminus-terminal
2019-05-24 18:08:47 +02:00
dependabot-preview[bot]
d931d88d69 Bump @types/node from 7.0.12 to 12.0.2 in /terminus-terminal
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 7.0.12 to 12.0.2.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)
2019-05-24 16:08:38 +00:00
dependabot-preview[bot]
f64d5dfb82 Bump @types/node from 7.0.43 to 12.0.2 in /terminus-core
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 7.0.43 to 12.0.2.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)
2019-05-24 16:08:36 +00:00
Eugene
329ae39e96 Bump @types/js-yaml from 3.9.1 to 3.12.1 in /terminus-core (#886)
Bump @types/js-yaml from 3.9.1 to 3.12.1 in /terminus-core
2019-05-24 18:08:12 +02:00
Eugene
f381176333 [Security] Bump extend from 3.0.1 to 3.0.2 in /terminus-ssh (#874)
[Security] Bump extend from 3.0.1 to 3.0.2 in /terminus-ssh
2019-05-24 18:07:59 +02:00
Eugene
6ddfc8b924 Bump @types/mz from 0.0.31 to 0.0.32 in /terminus-plugin-manager (#876)
Bump @types/mz from 0.0.31 to 0.0.32 in /terminus-plugin-manager
2019-05-24 18:07:41 +02:00
Eugene
1df4e83e4a Bump @types/mz from 0.0.31 to 0.0.32 in /terminus-terminal (#873)
Bump @types/mz from 0.0.31 to 0.0.32 in /terminus-terminal
2019-05-24 18:07:20 +02:00
Eugene
ee8a6e7e7a [Security] Bump lodash from 4.17.4 to 4.17.11 in /terminus-ssh (#880)
[Security] Bump lodash from 4.17.4 to 4.17.11 in /terminus-ssh
2019-05-24 18:07:08 +02:00
Eugene
d54b17e2f3 Bump ngx-pipes from 1.6.5 to 1.6.6 in /terminus-plugin-manager (#885)
Bump ngx-pipes from 1.6.5 to 1.6.6 in /terminus-plugin-manager
2019-05-24 18:06:16 +02:00
Eugene
efc61d9e26 [Security] Bump debug from 2.6.8 to 2.6.9 in /app (#879)
[Security] Bump debug from 2.6.8 to 2.6.9 in /app
2019-05-24 18:05:50 +02:00
Eugene
6c52e0496d [Security] Bump debug from 2.6.8 to 2.6.9 in /terminus-plugin-manager (#866)
[Security] Bump debug from 2.6.8 to 2.6.9 in /terminus-plugin-manager
2019-05-24 18:05:41 +02:00
Eugene
01664bf104 Bump @types/webpack-env from 1.13.3 to 1.13.9 in /terminus-ssh (#881)
Bump @types/webpack-env from 1.13.3 to 1.13.9 in /terminus-ssh
2019-05-24 18:05:24 +02:00
Eugene Pankov
b19916513e Merge branch 'master' of github.com:Eugeny/terminus 2019-05-24 18:04:54 +02:00
Eugene Pankov
df715595de export frontend classes 2019-05-24 18:04:51 +02:00
dependabot-preview[bot]
58e5ab2e7c Bump ngx-pipes from 1.6.5 to 1.6.6 in /terminus-plugin-manager
Bumps [ngx-pipes](https://github.com/danrevah/ngx-pipes) from 1.6.5 to 1.6.6.
- [Release notes](https://github.com/danrevah/ngx-pipes/releases)
- [Changelog](https://github.com/danrevah/ngx-pipes/blob/master/CHANGELOG.md)
- [Commits](https://github.com/danrevah/ngx-pipes/compare/v1.6.5...v1.6.6)
2019-05-24 16:04:36 +00:00
dependabot-preview[bot]
3fd4318062 Bump @types/webpack-env from 1.13.3 to 1.13.9 in /terminus-ssh
Bumps [@types/webpack-env](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/webpack-env) from 1.13.3 to 1.13.9.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/webpack-env)
2019-05-24 16:04:25 +00:00
Eugene
ccb72b3c5d Bump @types/webpack-env from 1.13.1 to 1.13.9 in /terminus-community-color-schemes (#859)
Bump @types/webpack-env from 1.13.1 to 1.13.9 in /terminus-community-color-schemes
2019-05-24 18:02:57 +02:00
Eugene
13eb3ed832 Bump @types/deep-equal from 1.0.0 to 1.0.1 in /terminus-settings (#870)
Bump @types/deep-equal from 1.0.0 to 1.0.1 in /terminus-settings
2019-05-24 18:02:34 +02:00
dependabot-preview[bot]
03c2e214e1 Bump semver from 5.4.1 to 6.1.0 in /terminus-plugin-manager
Bumps [semver](https://github.com/npm/node-semver) from 5.4.1 to 6.1.0.
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/master/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v5.4.1...v6.1.0)
2019-05-24 16:02:11 +00:00
Eugene
589b5f698c Merge pull request #884 from Eugeny/dependabot/npm_and_yarn/terminus-ssh/stringstream-0.0.6
[Security] Bump stringstream from 0.0.5 to 0.0.6 in /terminus-ssh
2019-05-24 18:00:50 +02:00
dependabot-preview[bot]
522eb03086 [Security] Bump lodash from 4.17.4 to 4.17.11 in /terminus-ssh
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.4 to 4.17.11. **This update includes security fixes.**
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.4...4.17.11)
2019-05-24 16:00:40 +00:00
Eugene
621ac4feee [Security] Bump sshpk from 1.13.1 to 1.16.1 in /terminus-ssh (#883)
[Security] Bump sshpk from 1.13.1 to 1.16.1 in /terminus-ssh
2019-05-24 18:00:09 +02:00
Eugene
5e8489fff3 Bump ssh2 from 0.8.2 to 0.8.4 in /terminus-ssh (#878)
Bump ssh2 from 0.8.2 to 0.8.4 in /terminus-ssh
2019-05-24 18:00:01 +02:00
dependabot-preview[bot]
56c4e802fe Bump slug from 0.9.3 to 1.1.0 in /terminus-terminal
Bumps [slug](https://github.com/Trott/node-slug) from 0.9.3 to 1.1.0.
- [Release notes](https://github.com/Trott/node-slug/releases)
- [Commits](https://github.com/Trott/node-slug/compare/v0.9.3...v1.1.0)
2019-05-24 15:59:47 +00:00
Eugene
dccf627506 Bump css-loader from 0.28.7 to 0.28.11 in /terminus-plugin-manager (#867)
Bump css-loader from 0.28.7 to 0.28.11 in /terminus-plugin-manager
2019-05-24 17:58:59 +02:00
Eugene
94def009c2 Bump xterm from 3.12.2 to 3.13.2 in /terminus-terminal (#888)
Bump xterm from 3.12.2 to 3.13.2 in /terminus-terminal
2019-05-24 17:58:23 +02:00
dependabot-preview[bot]
82a57957b1 Bump @types/mz from 0.0.31 to 0.0.32 in /terminus-plugin-manager
Bumps [@types/mz](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/mz) from 0.0.31 to 0.0.32.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/mz)
2019-05-24 15:54:44 +00:00
dependabot-preview[bot]
04a0e91175 Bump @types/mz from 0.0.31 to 0.0.32 in /terminus-terminal
Bumps [@types/mz](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/mz) from 0.0.31 to 0.0.32.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/mz)
2019-05-24 15:54:28 +00:00
dependabot-preview[bot]
77273fe052 [Security] Bump macaddress in /terminus-plugin-manager
Bumps [macaddress](https://github.com/scravy/node-macaddress) from 0.2.8 to 0.2.9. **This update includes security fixes.**
- [Release notes](https://github.com/scravy/node-macaddress/releases)
- [Commits](https://github.com/scravy/node-macaddress/compare/0.2.8...0.2.9)
2019-05-24 15:54:09 +00:00
Eugene
82ffa7a499 Merge pull request #863 from Eugeny/dependabot/npm_and_yarn/terminus-core/macaddress-0.2.9
[Security] Bump macaddress from 0.2.8 to 0.2.9 in /terminus-core
2019-05-24 17:53:41 +02:00
dependabot-preview[bot]
6c86ea5e7a [Security] Bump extend from 3.0.1 to 3.0.2 in /terminus-ssh
Bumps [extend](https://github.com/justmoon/node-extend) from 3.0.1 to 3.0.2. **This update includes security fixes.**
- [Release notes](https://github.com/justmoon/node-extend/releases)
- [Changelog](https://github.com/justmoon/node-extend/blob/master/CHANGELOG.md)
- [Commits](https://github.com/justmoon/node-extend/compare/v3.0.1...v3.0.2)
2019-05-24 15:53:28 +00:00
dependabot-preview[bot]
1ba2b6a4cc Bump @types/js-yaml from 3.9.1 to 3.12.1 in /terminus-core
Bumps [@types/js-yaml](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/js-yaml) from 3.9.1 to 3.12.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/js-yaml)
2019-05-24 15:53:14 +00:00
dependabot-preview[bot]
57bf1008b0 [Security] Bump macaddress from 0.2.8 to 0.2.9 in /terminus-core
Bumps [macaddress](https://github.com/scravy/node-macaddress) from 0.2.8 to 0.2.9. **This update includes security fixes.**
- [Release notes](https://github.com/scravy/node-macaddress/releases)
- [Commits](https://github.com/scravy/node-macaddress/compare/0.2.8...0.2.9)
2019-05-24 15:53:13 +00:00
Eugene
078582e40c Bump windows-swca from 2.0.1 to 2.0.2 in /app (#864)
Bump windows-swca from 2.0.1 to 2.0.2 in /app
2019-05-24 17:52:49 +02:00
dependabot-preview[bot]
c8a963ae14 [Security] Bump debug from 2.6.8 to 2.6.9 in /app
Bumps [debug](https://github.com/visionmedia/debug) from 2.6.8 to 2.6.9. **This update includes security fixes.**
- [Release notes](https://github.com/visionmedia/debug/releases)
- [Changelog](https://github.com/visionmedia/debug/blob/2.6.9/CHANGELOG.md)
- [Commits](https://github.com/visionmedia/debug/compare/2.6.8...2.6.9)
2019-05-24 15:52:44 +00:00
dependabot-preview[bot]
32ed3d16fd [Security] Bump debug from 2.6.8 to 2.6.9 in /terminus-plugin-manager
Bumps [debug](https://github.com/visionmedia/debug) from 2.6.8 to 2.6.9. **This update includes security fixes.**
- [Release notes](https://github.com/visionmedia/debug/releases)
- [Changelog](https://github.com/visionmedia/debug/blob/2.6.9/CHANGELOG.md)
- [Commits](https://github.com/visionmedia/debug/compare/2.6.8...2.6.9)
2019-05-24 15:52:32 +00:00
Eugene
70467e2924 Bump rxjs from 5.5.6 to 5.5.12 in /terminus-ssh (#860)
Bump rxjs from 5.5.6 to 5.5.12 in /terminus-ssh
2019-05-24 17:52:26 +02:00
Eugene
c9e12c666e Bump universal-analytics from 0.4.17 to 0.4.20 in /terminus-core (#861)
Bump universal-analytics from 0.4.17 to 0.4.20 in /terminus-core
2019-05-24 17:51:56 +02:00
dependabot-preview[bot]
f2e082e732 Bump @types/webpack-env in /terminus-community-color-schemes
Bumps [@types/webpack-env](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/webpack-env) from 1.13.1 to 1.13.9.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/webpack-env)
2019-05-24 15:51:50 +00:00
dependabot-preview[bot]
0f8a38b807 Bump @types/deep-equal from 1.0.0 to 1.0.1 in /terminus-settings
Bumps [@types/deep-equal](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/deep-equal) from 1.0.0 to 1.0.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/deep-equal)
2019-05-24 15:51:42 +00:00
Eugene
ee936b74bf Bump app-builder-lib from 20.28.4 to 20.41.0 (#862)
Bump app-builder-lib from 20.28.4 to 20.41.0
2019-05-24 17:51:36 +02:00
Eugene
3a24d91aa4 Merge pull request #857 from Eugeny/dependabot/npm_and_yarn/terminus-core/debug-3.1.0
[Security] Bump debug from 3.0.1 to 3.1.0 in /terminus-core
2019-05-24 17:51:07 +02:00
Eugene
42ae468780 Bump @types/webpack-env from 1.13.0 to 1.13.9 in /terminus-settings (#855)
Bump @types/webpack-env from 1.13.0 to 1.13.9 in /terminus-settings
2019-05-24 17:50:07 +02:00
dependabot-preview[bot]
1fda886849 Bump rxjs from 5.5.6 to 5.5.12 in /terminus-ssh
Bumps [rxjs](https://github.com/reactivex/rxjs) from 5.5.6 to 5.5.12.
- [Release notes](https://github.com/reactivex/rxjs/releases)
- [Changelog](https://github.com/ReactiveX/rxjs/blob/5.5.12/CHANGELOG.md)
- [Commits](https://github.com/reactivex/rxjs/compare/5.5.6...5.5.12)
2019-05-24 15:50:06 +00:00
Eugene
3bf66f1346 Merge pull request #856 from Eugeny/dependabot/npm_and_yarn/terminus-terminal/@types/webpack-env-1.13.9
Bump @types/webpack-env from 1.13.0 to 1.13.9 in /terminus-terminal
2019-05-24 17:49:51 +02:00
Eugene
93084d57b0 Bump json-loader from 0.5.4 to 0.5.7 (#853)
Bump json-loader from 0.5.4 to 0.5.7
2019-05-24 17:49:38 +02:00
Eugene
eb72951ec6 Bump raven-js from 3.16.0 to 3.27.1 (#852)
Bump raven-js from 3.16.0 to 3.27.1
2019-05-24 17:49:24 +02:00
Eugene
ea78c46bb4 Bump mz from 2.6.0 to 2.7.0 in /app (#851)
Bump mz from 2.6.0 to 2.7.0 in /app
2019-05-24 17:48:14 +02:00
dependabot-preview[bot]
fac1c8ec88 [Security] Bump debug from 3.0.1 to 3.1.0 in /terminus-core
Bumps [debug](https://github.com/visionmedia/debug) from 3.0.1 to 3.1.0. **This update includes security fixes.**
- [Release notes](https://github.com/visionmedia/debug/releases)
- [Changelog](https://github.com/visionmedia/debug/blob/3.1.0/CHANGELOG.md)
- [Commits](https://github.com/visionmedia/debug/compare/3.0.1...3.1.0)
2019-05-24 15:47:51 +00:00
dependabot-preview[bot]
a494e03f3d Bump mz from 2.6.0 to 2.7.0 in /app
Bumps [mz](https://github.com/normalize/mz) from 2.6.0 to 2.7.0.
- [Release notes](https://github.com/normalize/mz/releases)
- [Changelog](https://github.com/normalize/mz/blob/master/HISTORY.md)
- [Commits](https://github.com/normalize/mz/compare/2.6.0...2.7.0)
2019-05-24 15:47:45 +00:00
Eugene
8b5d50bf8b Bump ngx-pipes from 1.6.5 to 1.6.6 in /terminus-settings (#848)
Bump ngx-pipes from 1.6.5 to 1.6.6 in /terminus-settings
2019-05-24 17:47:08 +02:00
Eugene
b512353dfb Bump js-yaml from 3.8.2 to 3.13.1 in /app (#847)
Bump js-yaml from 3.8.2 to 3.13.1 in /app
2019-05-24 17:46:17 +02:00
dependabot-preview[bot]
a18afbb6dc Bump xterm from 3.12.2 to 3.13.2 in /terminus-terminal
Bumps [xterm](https://github.com/xtermjs/xterm.js) from 3.12.2 to 3.13.2.
- [Release notes](https://github.com/xtermjs/xterm.js/releases)
- [Commits](https://github.com/xtermjs/xterm.js/compare/3.12.2...3.13.2)
2019-05-24 15:16:05 +00:00
dependabot-preview[bot]
70a333e790 [Security] Bump stringstream from 0.0.5 to 0.0.6 in /terminus-ssh
Bumps [stringstream](https://github.com/mhart/StringStream) from 0.0.5 to 0.0.6. **This update includes security fixes.**
- [Release notes](https://github.com/mhart/StringStream/releases)
- [Commits](https://github.com/mhart/StringStream/compare/v0.0.5...v0.0.6)
2019-05-24 15:15:39 +00:00
dependabot-preview[bot]
fc55327df5 [Security] Bump sshpk from 1.13.1 to 1.16.1 in /terminus-ssh
Bumps [sshpk](https://github.com/joyent/node-sshpk) from 1.13.1 to 1.16.1. **This update includes security fixes.**
- [Release notes](https://github.com/joyent/node-sshpk/releases)
- [Commits](https://github.com/joyent/node-sshpk/compare/v1.13.1...v1.16.1)
2019-05-24 15:15:21 +00:00
dependabot-preview[bot]
aa93bc3d74 Bump ssh2 from 0.8.2 to 0.8.4 in /terminus-ssh
Bumps [ssh2](https://github.com/mscdex/ssh2) from 0.8.2 to 0.8.4.
- [Release notes](https://github.com/mscdex/ssh2/releases)
- [Commits](https://github.com/mscdex/ssh2/compare/v0.8.2...v0.8.4)
2019-05-24 15:15:10 +00:00
dependabot-preview[bot]
3ad1f4f59e Bump css-loader from 0.28.7 to 0.28.11 in /terminus-plugin-manager
Bumps [css-loader](https://github.com/webpack-contrib/css-loader) from 0.28.7 to 0.28.11.
- [Release notes](https://github.com/webpack-contrib/css-loader/releases)
- [Changelog](https://github.com/webpack-contrib/css-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/css-loader/compare/v0.28.7...v0.28.11)
2019-05-24 15:14:33 +00:00
dependabot-preview[bot]
576e63584a Bump windows-swca from 2.0.1 to 2.0.2 in /app
Bumps [windows-swca](https://github.com/sylveon/windows-swca) from 2.0.1 to 2.0.2.
- [Release notes](https://github.com/sylveon/windows-swca/releases)
- [Commits](https://github.com/sylveon/windows-swca/compare/2.0.1...2.0.2)
2019-05-24 15:14:33 +00:00
dependabot-preview[bot]
974879b54d Bump app-builder-lib from 20.28.4 to 20.41.0
Bumps [app-builder-lib](https://github.com/electron-userland/electron-builder) from 20.28.4 to 20.41.0.
- [Release notes](https://github.com/electron-userland/electron-builder/releases)
- [Changelog](https://github.com/electron-userland/electron-builder/blob/master/CHANGELOG.md)
- [Commits](https://github.com/electron-userland/electron-builder/compare/v20.28.4...v20.41.0)
2019-05-24 15:14:33 +00:00
dependabot-preview[bot]
1cfe0637f4 Bump universal-analytics from 0.4.17 to 0.4.20 in /terminus-core
Bumps [universal-analytics](https://github.com/peaksandpies/universal-analytics) from 0.4.17 to 0.4.20.
- [Release notes](https://github.com/peaksandpies/universal-analytics/releases)
- [Changelog](https://github.com/peaksandpies/universal-analytics/blob/master/HISTORY.md)
- [Commits](https://github.com/peaksandpies/universal-analytics/compare/0.4.17...0.4.20)
2019-05-24 15:14:32 +00:00
dependabot-preview[bot]
f58a9bcaf6 Bump @types/webpack-env from 1.13.0 to 1.13.9 in /terminus-settings
Bumps [@types/webpack-env](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/webpack-env) from 1.13.0 to 1.13.9.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/webpack-env)
2019-05-24 15:13:33 +00:00
dependabot-preview[bot]
dd6d71f023 Bump @types/webpack-env from 1.13.0 to 1.13.9 in /terminus-terminal
Bumps [@types/webpack-env](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/webpack-env) from 1.13.0 to 1.13.9.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/webpack-env)
2019-05-24 15:13:33 +00:00
dependabot-preview[bot]
140eb5bd6a Bump json-loader from 0.5.4 to 0.5.7
Bumps [json-loader](https://github.com/webpack/json-loader) from 0.5.4 to 0.5.7.
- [Release notes](https://github.com/webpack/json-loader/releases)
- [Changelog](https://github.com/webpack-contrib/json-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack/json-loader/compare/v0.5.4...v0.5.7)
2019-05-24 15:13:32 +00:00
dependabot-preview[bot]
16f41aad69 Bump raven-js from 3.16.0 to 3.27.1
Bumps [raven-js](https://github.com/getsentry/raven-js) from 3.16.0 to 3.27.1.
- [Release notes](https://github.com/getsentry/raven-js/releases)
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/master/CHANGELOG.md)
- [Commits](https://github.com/getsentry/raven-js/commits)
2019-05-24 15:13:32 +00:00
dependabot-preview[bot]
323e57d2b1 Bump ngx-pipes from 1.6.5 to 1.6.6 in /terminus-settings
Bumps [ngx-pipes](https://github.com/danrevah/ngx-pipes) from 1.6.5 to 1.6.6.
- [Release notes](https://github.com/danrevah/ngx-pipes/releases)
- [Changelog](https://github.com/danrevah/ngx-pipes/blob/master/CHANGELOG.md)
- [Commits](https://github.com/danrevah/ngx-pipes/compare/v1.6.5...v1.6.6)
2019-05-24 15:12:38 +00:00
dependabot-preview[bot]
ba550b9617 Bump js-yaml from 3.8.2 to 3.13.1 in /app
Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 3.8.2 to 3.13.1.
- [Release notes](https://github.com/nodeca/js-yaml/releases)
- [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodeca/js-yaml/compare/3.8.2...3.13.1)
2019-05-24 15:12:27 +00:00
Eugene Pankov
4afcfcb41a fixed default profile selection 2019-05-24 14:21:08 +02:00
Eugene Pankov
06da6970cb Merge branch 'master' of github.com:Eugeny/terminus 2019-05-24 11:50:11 +02:00
Eugene Pankov
5a8e71f2f2 build fix 2019-05-24 11:50:07 +02:00
Eugene
38164d3136 Update stale.yml 2019-05-24 11:22:45 +02:00
Eugene
7ebc00a140 Create FUNDING.yml 2019-05-24 10:47:51 +02:00
Eugene Pankov
49c05b9e5f Merge branch 'master' of github.com:Eugeny/terminus 2019-05-23 17:19:32 +02:00
Eugene Pankov
24381a9081 use keytar instead of xkeychain & wincredmgr 2019-05-23 17:19:29 +02:00
Eugene Pankov
1a0acad3c2 properly relaunch app in the portable build (fixes #478) 2019-05-19 22:41:41 +02:00
Eugene Pankov
206cf974c0 use nsis installer and electron-updater (fixes #813, fixes #627) 2019-05-19 20:30:40 +02:00
Eugene Pankov
d42fe4f107 auto-create plugins folder (fixes #738) 2019-05-19 18:26:55 +02:00
Eugene Pankov
60e095fbc7 shell icons 2019-05-17 23:48:59 +02:00
Eugene Pankov
b54d99ff3d allow removing shell integration (fixes #682) 2019-05-17 22:05:53 +02:00
Eugene Pankov
f3edf9a469 bumped webpack 2019-05-17 20:45:10 +02:00
Eugene Pankov
a7ba9d88c3 uac.exe release build (fixes #806) 2019-05-17 17:58:48 +02:00
Eugene Pankov
dc00aa4836 bumped electron 2019-05-17 17:58:15 +02:00
Eugene Pankov
d1a2932245 fixed cmd-r reloading the app on macos (fixes #697) 2019-05-17 17:58:10 +02:00
Eugene Pankov
26d7dc3031 fixed profile launching 2019-05-17 17:54:11 +02:00
Eugene Pankov
48ff7d7d5a use profiles for everything 2019-05-11 21:28:04 +02:00
Eugene Pankov
bc71547d92 fixed settings scroll (fixes #791) 2019-05-11 20:13:51 +02:00
Eugene Pankov
054383ed8e bumped node-pty 2019-05-10 17:57:03 +02:00
Eugene Pankov
005912dfe8 escape backslashes when dropping paths 2019-05-07 14:11:26 +02:00
Eugene Pankov
32e7d2db5c use stock windows-blurbehind 2019-05-06 14:09:30 +02:00
Eugene
15a2662d10 Electron 5 (#800)
Electron 5
2019-05-04 23:19:49 +02:00
Eugene Pankov
ee472bad35 Electron 5 compat 2019-05-04 18:59:50 +02:00
Eugene Pankov
619c663438 Merge branch 'master' of https://github.com/Eugeny/terminus 2019-05-04 13:12:55 +02:00
Eugene Pankov
dd16d44b3a wip 2019-05-03 22:06:21 +02:00
Eugene
01c4d029bd Update README.md 2019-05-03 10:12:08 +02:00
Eugene
4fbc2b99b0 Update README.md 2019-05-03 10:11:44 +02:00
Eugene Pankov
ea7ddc7d9a wording 2019-05-02 12:24:16 +02:00
Eugene Pankov
c25c9a285e Merge branch 'master' of github.com:Eugeny/terminus 2019-05-02 12:23:57 +02:00
Eugene Pankov
c10e5e918f tab closing fix 2019-05-02 12:23:53 +02:00
Eugene
7dc59bd5a8 Merge pull request #795 from baflo/master
Adds powershell profile for cmder
2019-05-01 15:51:59 +02:00
Florian Bachmann
d2b9a2cb7d Merge pull request #1 from baflo/feature/cmderps
Adds powershell profile for cmder
2019-05-01 14:29:49 +02:00
Florian Bachmann
6b21bbac58 Adds powershell profile for cmder 2019-05-01 14:27:45 +02:00
Eugene Pankov
0d4ebe3d96 Revert "bumped electron"
This reverts commit 7237c2b05a.
2019-04-30 21:18:17 +02:00
Eugene Pankov
c856f460e6 Revert "bumped xterm for true color support (#23)"
This reverts commit c5958bc9a0.
2019-04-29 19:55:36 +02:00
Eugene Pankov
6a969d2cd2 Revert "use new style xterm events"
This reverts commit d42e070e6c.
2019-04-29 19:50:53 +02:00
Eugene Pankov
4d84b14168 Revert "bumped electron"
This reverts commit 7237c2b05a.
2019-04-28 17:47:01 +02:00
Eugene Pankov
b6cbd42d8b less touchbar flicker, activity icons 2019-04-28 14:38:21 +02:00
Eugene Pankov
7237c2b05a bumped electron 2019-04-28 14:37:50 +02:00
Eugene Pankov
19a217923e build fix 2019-04-28 12:55:13 +02:00
Eugene Pankov
7f160e9421 Merge branch 'master' of github.com:Eugeny/terminus 2019-04-28 11:48:12 +02:00
Eugene Pankov
d0c245d0d5 fixed funky source maps 2019-04-28 11:42:34 +02:00
Eugene Pankov
693edab597 prevent recovered tabs from blanking out 2019-04-28 11:41:31 +02:00
Eugene Pankov
d42e070e6c use new style xterm events 2019-04-17 22:03:20 +02:00
Eugene Pankov
c5958bc9a0 bumped xterm for true color support (#23) 2019-04-17 21:57:52 +02:00
Eugene Pankov
9dc2337787 hotkey naming 2019-04-16 15:42:11 +02:00
Eugene
1a38cc30a8 Merge pull request #766 from Mezner/master
Create close pane hotkey.
2019-04-16 15:39:22 +02:00
Russell Myers
4949f14184 Create close pane hotkey. 2019-04-15 21:16:54 -04:00
Eugene
11902020a5 Merge pull request #743 from mischah/relaxed-theme
Add Relaxed color scheme
2019-03-30 08:30:05 -07:00
Michael Kühnel
3f96c21f33 Add Relaxed color scheme 2019-03-30 16:22:20 +01:00
Eugene
9e81f0aa0e Update README.md 2019-03-19 13:26:06 +01:00
Eugene
1cce23cef5 Update README.md 2019-03-19 13:02:33 +01:00
Eugene Pankov
b7a56adb60 smaller icons for the compact theme 2019-03-18 22:34:46 +01:00
Eugene Pankov
eb02752cbf use dynamic xterm atlas for faster startup 2019-03-18 22:23:44 +01:00
Eugene Pankov
3a6eb8cb2f bumped plugin versions 2019-03-18 22:02:23 +01:00
Eugene Pankov
a7d62b0234 fixed home/end keys with conpty (fixes #587) 2019-03-18 22:00:43 +01:00
Eugene
b9cbe4f12d Update snapcraft.yaml 2019-03-13 12:45:41 +01:00
Eugene
5f74b35ba9 Update snapcraft.yaml 2019-03-13 12:39:14 +01:00
Eugene
affb439ab2 Update snapcraft.yaml 2019-03-13 12:33:48 +01:00
Eugene Pankov
afdb06df40 fixed npm require path (fixes #714) 2019-03-11 14:01:51 +01:00
Eugene Pankov
2227f2cff3 bumped node-pty 2019-03-08 13:11:01 +01:00
Eugene Pankov
1a46f0ec3c fixed cwd detection for split tabs 2019-03-08 12:35:14 +01:00
Eugene Pankov
e246e22bfd set TERM_PROGRAM (fixes #702) 2019-03-08 12:27:57 +01:00
Eugene Pankov
89e4a80a37 fixed xterm hotkeys - fixed #696 2019-03-08 12:24:42 +01:00
Eugene
3a522f4f73 Update README.md 2019-03-08 08:32:01 +01:00
Eugene Pankov
a01238d34c travis 2019-03-07 23:17:44 +01:00
Eugene Pankov
75fea5e390 Merge branch 'master' of github.com:Eugeny/terminus 2019-03-07 22:38:26 +01:00
Eugene Pankov
af792399da travis 2019-03-07 22:38:05 +01:00
Eugene
7d86a7e4cc Update .travis.yml 2019-03-07 21:31:49 +01:00
Eugene Pankov
cf6a7d10b3 travis 2019-03-07 19:27:38 +01:00
Eugene Pankov
4bc03319e7 travis 2019-03-07 18:15:52 +01:00
Eugene Pankov
8cf7851801 autogen docs 2019-03-07 18:04:03 +01:00
Eugene Pankov
c70e6fde35 prep other plugins for typedoc 2019-03-07 02:05:26 +01:00
Eugene Pankov
2ed35cb400 prepared terminus-core for typedocs 2019-03-07 01:51:15 +01:00
Eugene Pankov
cf5e31be79 angular bump 2019-03-06 23:46:08 +01:00
Eugene Pankov
2c4c094941 splits API 2019-03-06 23:46:04 +01:00
Eugene Pankov
d25751abe7 handle split pane being closed 2019-03-04 21:26:28 +01:00
Eugene Pankov
bcc4a262e2 build fix 2019-03-04 21:03:36 +01:00
Eugene Pankov
27fb611166 splitting tabs (fixes #49) 2019-03-04 20:39:05 +01:00
Eugene Pankov
7279ba13ac split tab recovery (#49) 2019-03-03 23:51:25 +01:00
Eugene Pankov
70b463b086 splits WIP (#49) 2019-03-03 22:56:58 +01:00
Eugene Pankov
ef4e1e5a0d registry fixes 2019-03-02 17:44:02 +01:00
Eugene Pankov
04d621d62b use native registry implementation 2019-03-02 15:56:58 +01:00
Eugene Pankov
dc813b8edb windows fix 2019-03-02 15:34:18 +01:00
Eugene Pankov
426bedd7b7 restored readme images 2019-03-01 18:10:55 +01:00
Eugene Pankov
34b7c80243 website moved to gh-pages branch 2019-02-24 15:07:14 +01:00
Eugene Pankov
33281b5caf skip unnecessary ops 2019-02-24 14:39:05 +01:00
Eugene Pankov
e6e88272c2 force yarn relink on travis 2019-02-20 10:51:32 +01:00
Eugene Pankov
05bb07e37d bumped electron 2019-02-20 01:57:38 +01:00
Eugene Pankov
61726cad36 parse iTerm OSC 1337 cwd reports 2019-02-20 01:07:05 +01:00
Eugene Pankov
77c253594f don't offer separate wsl distros until Win 10 17763 (fixes #642) 2019-02-20 00:04:06 +01:00
Eugene
478d715d10 Gitter link 2019-02-19 00:26:31 +01:00
Eugene Pankov
1675312f75 added hotkeys to open specific profiles 2019-02-17 13:12:05 +01:00
Eugene Pankov
128aa618f0 avoid importing npm until required 2019-02-17 13:02:56 +01:00
Eugene Pankov
6b56155ca5 fixed #517 2019-02-17 12:32:37 +01:00
Eugene Pankov
3ee1f1b023 Update readme.png 2019-02-13 23:12:47 +01:00
Eugene Pankov
db54f4af13 a button to show config file location 2019-02-13 22:58:47 +01:00
Eugene Pankov
59d1a2fc23 bundle NPM with Terminus (fixes #584, fixes #10) 2019-02-13 21:35:37 +01:00
Eugene Pankov
808e7f4699 build fix 2019-02-12 13:02:59 +01:00
Eugene Pankov
e338bc417a only configure tabs if they're focused (fixes #659) 2019-02-12 12:44:23 +01:00
Eugene Pankov
3039a65757 fixed conpty detection (fixes #653) 2019-02-12 11:19:17 +01:00
Eugene Pankov
714f181be5 try to force terminus onto the low-power gpu 2019-02-11 15:48:16 +01:00
206 changed files with 7817 additions and 6453 deletions

3
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1,3 @@
github: eugeny
open_collective: terminus
ko_fi: eugeny

2
.github/stale.yml vendored
View File

@@ -5,7 +5,7 @@ daysUntilClose: 14
# Issues with these labels will never be considered stale
exemptLabels:
- "T: Enhancement"
- "S: Triaged"
- "S: Confirmed"
# Label to use when marking an issue as stale
staleLabel: "S: Stale"
# Comment to post when marking an issue as stale. Set to `false` to disable

3
.gitignore vendored
View File

@@ -18,3 +18,6 @@ npm-debug.log
builtin-plugins
package-lock.json
yarn-error.log
docs/api
.travis.ssh.key

BIN
.travis.ssh.key.enc Normal file

Binary file not shown.

1
.travis.ssh.key.pub Normal file
View File

@@ -0,0 +1 @@
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDDFM4nHSbET5V7EYNgjA8NeVfOxV0wVMdZ2YvsDzD+qPJ4+MYbvsL7ZPaSxQSn7n6ATkLHjKje5RpF/Rl9K3kucGs0P6cqJVeE0qryEteQ3Q+fYAk+bD2J9ZQ/hv/0NtLl8T+7lJUZ3WUxFH73sgph77Sw0z+kMpPaK7U2vqMBQD/7+6iJgya31wP0qW0XKDz1BjKeXgwTg10Pm4vcGsR4c2q7YIzSzBHffcyo0vJyFvOX/ZKHlZRcq/wnQMeOl/hPgf1xCENjQZmFVReQlYSw5cNNDT9HZPKekOAZFFez7/AbPiTIo/bnBYIv0mdUjr3nw8nXF505q8LiD3z/ksaaWDqe9CCLM4W0Bh7/dhP7IGPdfX0fVHLhOnYIOsG21D8rWJjMPkVRSLyEvWNAnVuObJNHoQu8VATnOxfPNnMun72IHyyFWVoADk5JcsMbzcP7gZB+5oJO7U1qpcdndtBOA3ZlF0Uz2jVZnqavoEBWT39tl3vs69hAA3aTPGclg7HMuAJOl4HsKmaUgDxqV2wCX/S4pDqmKMbmumDLX+MM0xl0gXj/zpVJp9BzdnrArkC40ivmC6TSA4wrdN0tNBlqApkH5/jxGWrcu2AXVn9PGF3+QrjW0iu+QMZCaKWDhLIQC835uFwzhnNGlx41B7uxMLuNFxKXdQ3f/cC9QMG8ew== TravisCIDeployKey

View File

@@ -1,28 +1,48 @@
matrix:
include:
- os: linux
env: BUILD_FOR=linux
- os: osx
env: BUILD_FOR=macos
language: node_js
node_js: 10
node_js: 11
cache:
directories:
- node_modules
- app/node_modules
stages:
- Build
- name: Docs
if: branch = master
before_install:
- yarn
jobs:
include:
- stage: 'Build'
os: linux
before_install:
- yarn
- rm app/node_modules/.yarn-integrity || true
- scripts/install-deps.js
script:
- scripts/build-native.js
- yarn run build
- scripts/prepackage-plugins.js
- scripts/build-linux.js
script:
- scripts/build-native.js
- yarn run build
- scripts/prepackage-plugins.js
- scripts/build-$BUILD_FOR.js
- stage: 'Build'
os: osx
before_install:
- rm app/node_modules/.yarn-integrity || true
- yarn
script:
- scripts/build-native.js
- yarn run build
- scripts/prepackage-plugins.js
- scripts/build-macos.js
dist: trusty
- stage: 'Docs'
os: linux
script:
- openssl aes-256-cbc -K $encrypted_4e2fb4889ef8_key -iv $encrypted_4e2fb4889ef8_iv -in .travis.ssh.key.enc -out .travis.ssh.key -d
- eval "$(ssh-agent -s)"
- chmod 600 .travis.ssh.key
- ssh-add .travis.ssh.key
- yarn
- yarn run docs
- rsync -e "ssh -o StrictHostKeyChecking=no" -arv docs/api/ root@ajenti.org:/srv/terminus-docs/
dist: xenial
sudo: false
addons:
@@ -30,6 +50,7 @@ addons:
packages:
- rpm
- yarn
- libsecret-1-dev
sources:
- sourceline: 'deb https://dl.yarnpkg.com/debian/ stable main'
key_url: 'https://dl.yarnpkg.com/debian/pubkey.gpg'

View File

@@ -1,54 +1,65 @@
![](https://github.com/Eugeny/terminus/raw/master/docs/readme.png)
<p align="center">
<a href="https://raw.githubusercontent.com/Eugeny/terminus/master/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg"/></a> <a href="https://travis-ci.org/Eugeny/terminus"><img src="https://travis-ci.org/Eugeny/terminus.svg?branch=master"/></a>
<a href="https://ci.appveyor.com/project/Eugeny/terminus"><img src="https://ci.appveyor.com/api/projects/status/wnnq4hm5mbd9rgoy?svg=true"/></a>
<a href="https://raw.githubusercontent.com/Eugeny/terminus/master/LICENSE"><img alt="GitHub" src="https://img.shields.io/github/license/eugeny/terminus.svg?label=License&style=flat-square"></a> <a href="https://travis-ci.org/Eugeny/terminus"><img alt="Travis (.org)" src="https://img.shields.io/travis/Eugeny/terminus.svg?label=CI&logo=travis&logoColor=white&style=flat-square"></a>
<a href="https://ci.appveyor.com/project/Eugeny/terminus"><img alt="AppVeyor" src="https://img.shields.io/appveyor/ci/eugeny/terminus.svg?label=CI&logo=appveyor&logoColor=white&style=flat-square"></a>
</p>
<p align="center">
<a href="https://github.com/Eugeny/terminus/releases/latest">Downloads</a> | <a href="https://t.me/joinchat/HgLqPhRg9Inhmm7WD3H1BQ">Community</a> | <a href="https://ci.appveyor.com/project/Eugeny/terminus/build/artifacts">Latest Windows nightly</a>
<a href="https://github.com/Eugeny/terminus/releases/latest"><img alt="GitHub All Releases" src="https://img.shields.io/github/downloads/eugeny/terminus/total.svg?label=DOWNLOAD&logo=github&style=for-the-badge"></a> <a href="https://ci.appveyor.com/project/Eugeny/terminus/build/artifacts"><img src="https://img.shields.io/badge/download-nightly%20build-magenta.svg?logo=appveyor&style=for-the-badge"/></a> <a href="https://gitter.im/terminus-terminal/community"><img alt="Gitter" src="https://img.shields.io/gitter/room/terminus/community.svg?color=blue&logo=gitter&style=for-the-badge"></a>
</p>
----
**Terminus** is a terminal heavily inspired by Hyper. It is, however, designed for people who need to get things done.
**Terminus** is a highly configurable terminal emulator for Windows, macOS and Linux
* Runs on Windows, macOS and Linux
* Theming and color schemes
* Fully configurable shortcuts
* Split panes
* Remembers your tabs
* PowerShell (and PS Core), WSL, Git-Bash, Cygwin, Cmder and CMD support
* Integrated SSH client and connection manager
* Full Unicode support including double-width characters
* Doesn't choke on fast-flowing outputs
* Proper shell-like experience on Windows including tab completion (via Clink)
* PowerShell (+Core), WSL (Bash on Windows), Git-Bash, Cygwin, Cmder and CMD support
* Remembers your tabs
* Integrated SSH client and connection manager
* Proper shell experience on Windows including tab completion (via Clink)
[![Buy me a coffee](https://github.com/Eugeny/terminus/raw/master/docs/kofi.png)](https://ko-fi.com/eugeny)
---
* **Terminus is** an alternative to Windows' standard terminal (conhost), PowerShell ISE, PuTTY or iTerm
* **Terminus is not** a new shell or a MinGW or Cygwin replacement. Neither is it lightweight - if RAM usage is of importance, consider [Conemu](https://conemu.github.io) or [Alacritty](https://github.com/jwilm/alacritty)
---
# Plugins
Plugins can be installed directly from the Settings view inside Terminus.
Plugins and themes can be installed directly from the Settings view inside Terminus.
* [clickable-links](https://github.com/Eugeny/terminus-clickable-links) - makes paths and URLs in the terminal clickable
* [theme-hype](https://github.com/Eugeny/terminus-theme-hype) - a Hyper inspired theme
* [shell-selector](https://github.com/Eugeny/terminus-shell-selector) - a quick shell selector pane
* [title-control](https://github.com/kbjr/terminus-title-control) - allows modifying the title of the terminal tabs by providing a prefix, suffix, and/or strings to be removed
* [scrollbar](https://github.com/kbjr/terminus-scrollbar) - adds a scrollbar to terminal tabs
* [quick-cmds](https://github.com/Domain/terminus-quick-cmds) - quickly send commands to one or all terminal tabs
* [save-output](https://github.com/Eugeny/terminus-save-output) - record terminal output into a file
* [scrollbar](https://github.com/kbjr/terminus-scrollbar) - adds a scrollbar to hterm tabs
# Themes
* [hype](https://github.com/Eugeny/terminus-theme-hype) - a Hyper inspired theme
* [relaxed](https://github.com/Relaxed-Theme/relaxed-terminal-themes#terminus) - the Relaxed theme for Terminus
* [gruvbox](https://github.com/porkloin/terminus-theme-gruvbox)
* [windows10](https://www.npmjs.com/package/terminus-theme-windows10)
* [altair](https://github.com/yxuko/terminus-altair)
---
# Contributing
Pull requests and plugins are welcome!
See [HACKING.md](https://github.com/Eugeny/terminus/blob/master/HACKING.md) for information of how the project is laid out, and a very brief plugin development tutorial.
See [HACKING.md](https://github.com/Eugeny/terminus/blob/master/HACKING.md) and [API docs](http://ajenti.org/terminus-docs/) for information of how the project is laid out, and a very brief plugin development tutorial.
## License
[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2FEugeny%2Fterminus.svg?type=large)](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2FEugeny%2Fterminus?ref=badge_large)

BIN
app/assets/activity.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

4
app/dev-app-update.yml Normal file
View File

@@ -0,0 +1,4 @@
owner: eugeny
repo: terminus
provider: github
updaterCacheDirName: terminus-updater

View File

@@ -19,6 +19,7 @@ export class Application {
}
app.commandLine.appendSwitch('disable-http-cache')
app.commandLine.appendSwitch('force_discrete_gpu', '0')
app.commandLine.appendSwitch('lang', 'EN')
}

View File

@@ -1,9 +1,8 @@
import './lru'
import { app, ipcMain, Menu } from 'electron'
import electronDebug = require('electron-debug')
import { parseArgs } from './cli'
import { Application } from './app'
if (process.platform === 'win32' && require('electron-squirrel-startup')) process.exit(0)
import electronDebug = require('electron-debug')
if (!process.env.TERMINUS_PLUGINS) {
process.env.TERMINUS_PLUGINS = ''
@@ -44,7 +43,11 @@ if (!app.requestSingleInstanceLock()) {
}
if (argv.d) {
electronDebug({ enabled: true, showDevTools: 'undocked' })
electronDebug({
isEnabled: true,
showDevTools: true,
devToolsMode: 'undocked'
})
}
app.on('ready', () => {

View File

@@ -44,7 +44,9 @@ export class Window {
title: 'Terminus',
minWidth: 400,
minHeight: 300,
webPreferences: { webSecurity: false },
webPreferences: {
nodeIntegration: true,
},
frame: false,
show: false,
backgroundColor: '#00000000'

View File

@@ -13,32 +13,32 @@
"watch": "webpack --progress --color --watch"
},
"dependencies": {
"@angular/animations": "7.2.0-rc.0",
"@angular/common": "7.2.0-rc.0",
"@angular/compiler": "7.2.0-rc.0",
"@angular/core": "7.2.0-rc.0",
"@angular/forms": "7.2.0-rc.0",
"@angular/platform-browser": "7.2.0-rc.0",
"@angular/platform-browser-dynamic": "7.2.0-rc.0",
"@ng-bootstrap/ng-bootstrap": "^3.3.1",
"@angular/animations": "7.2.8",
"@angular/common": "7.2.8",
"@angular/compiler": "7.2.8",
"@angular/core": "7.2.8",
"@angular/forms": "7.2.8",
"@angular/platform-browser": "7.2.8",
"@angular/platform-browser-dynamic": "7.2.8",
"@ng-bootstrap/ng-bootstrap": "^4.1.3",
"devtron": "1.4.0",
"electron-config": "0.2.1",
"electron-debug": "^2.0.0",
"electron-is-dev": "0.1.2",
"electron-squirrel-startup": "^1.0.0",
"js-yaml": "3.8.2",
"mz": "^2.6.0",
"electron-config": "2.0.0",
"electron-debug": "^3.0.0",
"electron-is-dev": "1.1.0",
"electron-updater": "^4.0.6",
"js-yaml": "3.13.1",
"mz": "^2.7.0",
"ngx-toastr": "^9.1.1",
"path": "0.12.7",
"rxjs": "^6.3.3",
"yargs": "^12.0.1",
"zone.js": "^0.8.26"
"rxjs": "^6.5.2",
"yargs": "^13.2.4",
"zone.js": "^0.8.29"
},
"optionalDependencies": {
"windows-blurbehind": "^1.0.0",
"windows-swca": "^2.0.1"
"windows-blurbehind": "^1.0.1",
"windows-swca": "^2.0.2"
},
"devDependencies": {
"@types/mz": "0.0.31"
"@types/mz": "0.0.32"
}
}

View File

@@ -1,5 +1,5 @@
import '../lib/lru'
import 'source-sans-pro'
import 'source-sans-pro/source-sans-pro.css'
import 'source-code-pro/source-code-pro.css'
import '@fortawesome/fontawesome-free/css/solid.css'
import '@fortawesome/fontawesome-free/css/brands.css'

View File

@@ -1,8 +1,9 @@
import 'zone.js'
import 'core-js/es7/reflect'
import 'core-js/core/delay'
import 'core-js/proposals/reflect-metadata'
import 'rxjs'
import isDev = require('electron-is-dev')
import './global.scss'
import './toastr.scss'
@@ -21,7 +22,7 @@ if (process.platform === 'win32') {
process.env.HOME = process.env.HOMEDRIVE + process.env.HOMEPATH
}
if (require('electron-is-dev')) {
if (isDev) {
console.warn('Running in debug mode')
} else {
enableProdMode()

View File

@@ -3,8 +3,6 @@ import * as path from 'path'
const nodeModule = require('module')
const nodeRequire = (global as any).require
declare function delay (ms: number): Promise<void>
function normalizePath (path: string): string {
const cygwinPrefix = '/cygdrive/'
if (path.startsWith(cygwinPrefix)) {
@@ -28,6 +26,10 @@ const userPluginsPath = path.join(
'plugins',
)
if (!fs.existsSync(userPluginsPath)) {
fs.mkdir(userPluginsPath)
}
Object.assign(window, { builtinPluginsPath, userPluginsPath })
nodeModule.globalPaths.unshift(builtinPluginsPath)
nodeModule.globalPaths.unshift(path.join(userPluginsPath, 'node_modules'))
@@ -159,7 +161,6 @@ export async function loadPlugins (foundPlugins: IPluginInfo[], progress: Progre
} catch (error) {
console.error(`Could not load ${foundPlugin.name}:`, error)
}
await delay(1)
index++
}
progress(1, 1)

View File

@@ -5,7 +5,7 @@ module.exports = {
name: 'terminus',
target: 'node',
entry: {
'index.ignore': 'file-loader?name=index.html!val-loader!pug-html-loader!' + path.resolve(__dirname, './index.pug'),
'index.ignore': 'file-loader?name=index.html!pug-html-loader!' + path.resolve(__dirname, './index.pug'),
preload: path.resolve(__dirname, 'src/entry.preload.ts'),
bundle: path.resolve(__dirname, 'src/entry.ts'),
},
@@ -14,7 +14,7 @@ module.exports = {
minimize: false,
},
context: __dirname,
devtool: 'source-map',
devtool: 'eval-source-map',
output: {
path: path.join(__dirname, 'dist'),
pathinfo: true,

View File

@@ -9,7 +9,7 @@ module.exports = {
},
mode: process.env.TERMINUS_DEV ? 'development' : 'production',
context: __dirname,
devtool: 'source-map',
devtool: 'eval-source-map',
output: {
path: path.join(__dirname, 'dist'),
pathinfo: true,
@@ -36,7 +36,6 @@ module.exports = {
electron: 'commonjs electron',
'electron-config': 'commonjs electron-config',
'electron-vibrancy': 'commonjs electron-vibrancy',
'electron-squirrel-startup': 'commonjs electron-squirrel-startup',
fs: 'commonjs fs',
mz: 'commonjs mz',
path: 'commonjs path',

File diff suppressed because it is too large Load Diff

View File

@@ -23,6 +23,4 @@ build_script:
- node scripts/build-windows.js
artifacts:
- path: 'dist\win\*.exe'
- path: 'dist\squirrel-windows\*.exe'
- path: 'dist\*.exe'

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 950 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

3
build/installer.nsh Normal file
View File

@@ -0,0 +1,3 @@
!macro customInit
nsExec::Exec '"$LOCALAPPDATA\terminus\Update.exe" --uninstall -s'
!macroend

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

1
docs/dist/bundle.js vendored

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 MiB

View File

@@ -1,9 +0,0 @@
<!DOCTYPE html><html><head><base href="dist/"><meta name="viewport" content="initial-scale=1, minimal-ui, shrink-to-fit=no"><link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400" rel="stylesheet"><script src="bundle.js"></script><title>Terminus</title></head><body><div class="mt-5 mb-5" id="header"><div class="text-center"><h1>Terminus</h1><div class="subtitle mb-3">A terminal for a more modern age</div><a class="btn btn-lg btn-outline-dark mt-4" href="https://github.com/Eugeny/terminus/releases/latest" target="_blank"><strong>DOWNLOAD</strong></a><a class="btn btn-lg btn-outline-secondary mt-4 ml-3" href="https://github.com/Eugeny/terminus" target="_blank"><strong>GITHUB</strong></a></div></div><div class="background-stripe"><div class="overlay overlay1"></div><div class="overlay overlay2"></div><div class="terminal"></div></div><div class="container mt-5 mb-5"><div class="d-flex flex-wrap flex-md-nowrap"><div class="w-100"><div class="feature">windows</div><div class="feature">linux</div><div class="feature">macos</div><br><div class="feature">powershell</div><div class="feature">wsl</div><div class="feature">cygwin</div><div class="feature">git-bash</div><div class="feature">cmder</div><div class="feature">clink</div></div><div class="w-100"><div class="feature">full unicode</div><div class="feature">global hotkey</div><div class="feature">plugins</div><div class="feature">tab recovery</div><div class="feature">custom css</div><div class="feature">themes</div><div class="feature">font ligatures</div><div class="feature">clickable paths</div><div class="feature">tabs on top/bottom</div><div class="feature">vibrancy</div><div class="feature">bracketed paste</div></div></div></div><div class="container mt-5 mb-5"><div class="text-center mt-5"><div class="mb-4 mt-5"><script type="text/javascript" src="https://ko-fi.com/widgets/widget_2.js"></script><script type="text/javascript">kofiwidget2.init('Buy me a coffee', '#46b798', 'J3J8KWTF')
kofiwidget2.draw()
</script></div><a class="btn btn-lg btn-outline-secondary mt-3" href="/terminus/#header"><strong>BEAM ME UP</strong></a></div></div><div class="background-stripe2"><div class="overlay overlay1"></div></div><script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-3278102-18', 'auto');
ga('send', 'pageview');</script></body></html>

View File

@@ -1 +0,0 @@
import './styles.scss'

View File

@@ -1,75 +0,0 @@
doctype html
html
head
base(href='dist/')
meta(name='viewport', content='initial-scale=1, minimal-ui, shrink-to-fit=no')
link(href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400", rel="stylesheet")
script(src='bundle.js')
title Terminus
body
.mt-5.mb-5#header
.text-center
h1 Terminus
.subtitle.mb-3 A terminal for a more modern age
a.btn.btn-lg.btn-outline-dark.mt-4(href='https://github.com/Eugeny/terminus/releases/latest', target='_blank')
strong DOWNLOAD
a.btn.btn-lg.btn-outline-secondary.mt-4.ml-3(href='https://github.com/Eugeny/terminus', target='_blank')
strong GITHUB
.background-stripe
.overlay.overlay1
.overlay.overlay2
.terminal
.container.mt-5.mb-5
.d-flex.flex-wrap.flex-md-nowrap
.w-100
.feature windows
.feature linux
.feature macos
br
.feature powershell
.feature wsl
.feature cygwin
.feature git-bash
.feature cmder
.feature clink
.w-100
.feature full unicode
.feature global hotkey
.feature plugins
.feature tab recovery
.feature custom css
.feature themes
.feature font ligatures
.feature clickable paths
.feature tabs on top/bottom
.feature vibrancy
.feature bracketed paste
.container.mt-5.mb-5
.text-center.mt-5
.mb-4.mt-5
script(type='text/javascript', src='https://ko-fi.com/widgets/widget_2.js')
script(type='text/javascript').
kofiwidget2.init('Buy me a coffee', '#46b798', 'J3J8KWTF')
kofiwidget2.draw()
a.btn.btn-lg.btn-outline-secondary.mt-3(href='/terminus/#header')
strong BEAM ME UP
.background-stripe2
.overlay.overlay1
script.
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-3278102-18', 'auto');
ga('send', 'pageview');

View File

@@ -1,24 +0,0 @@
{
"name": "docs",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"build": "webpack --progress",
"watch": "webpack --progress --watch"
},
"private": true,
"devDependencies": {
"bootstrap": "^4.1.3",
"css-loader": "^1.0.0",
"file-loader": "^1.1.11",
"node-sass": "^4.9.3",
"pug": "^2.0.3",
"pug-cli": "^1.0.0-alpha6",
"pug-html-loader": "^1.1.5",
"sass-loader": "^7.1.0",
"style-loader": "^0.22.1",
"val-loader": "^1.1.1",
"webpack": "^4.16.5",
"webpack-cli": "^3.1.0"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 1.6 MiB

View File

@@ -1,141 +0,0 @@
$font-family-sans-serif: "Source Sans Pro";
$border-radius-lg: 0;
$btn-border-width: 3px;
@import "node_modules/bootstrap/scss/bootstrap";
h1 {
font-size: 10vw;
font-weight: 200;
margin: 0;
}
body {
overflow-x: hidden;
}
.subtitle {
font-style: italic;
color: #999;
font-size: 5vw;
font-weight: 300;
}
.background-stripe {
width: 100vw;
background-image: url('./background.jpeg');
background-size: cover;
height: 30vw;
margin: 200px 0 150px;
min-height: 1000px;
position: relative;
.overlay {
position: absolute;
width: 100vw;
width: 1px;
height: 1px;
&.overlay1 {
top: -1px;
left: 0;
border-top: 10vw solid white;
border-right: 100vw solid transparent;
}
&.overlay2 {
bottom: -1px;
right: 0;
border-bottom: 10vw solid white;
border-left: 100vw solid transparent;
}
}
.terminal {
position: absolute;
left: 50%;
top: 5vw;
width: 1304px;
margin-left: -652px;
height: 972px;
border-radius: 9px;
box-shadow: 0 0 100px black;
background: url('./terminal.png');
background-size: cover;
animation: slideIn ease-out 1s;
opacity: .95;
}
@media(max-width: 1500px) {
min-height: 500px;
margin: 200px 0 100px;
.terminal {
width: 652px;
top: -100px;
margin-left: -326px;
height: 486px;
border-radius: 5px;
}
}
@media(max-width: 750px) {
min-height: 250px;
margin: 100px 0 50px;
.terminal {
width: 326px;
top: -50px;
margin-left: -163px;
height: 243px;
border-radius: 3px;
}
}
}
.feature {
font-size: 45px;
line-height: 40px;
opacity: .5;
font-style: italic;
}
@keyframes slideIn {
from {
opacity: 0;
margin-top: 200px;
}
to {
opacity: .95;
margin-top: 0px;
}
}
.background-stripe2 {
width: 100vw;
background-image: url('./background.jpeg');
background-size: cover;
height: 30vw;
margin: 100px 0 0;
position: relative;
.overlay {
position: absolute;
width: 100vw;
width: 1px;
height: 1px;
&.overlay1 {
top: -1px;
right: 0;
border-top: 10vw solid white;
border-left: 100vw solid transparent;
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

View File

@@ -1,27 +0,0 @@
const path = require('path')
module.exports = {
entry: {
'index.ignore': 'file-loader?name=../index.html!pug-html-loader!' + path.resolve(__dirname, './index.pug'),
'bundle': path.resolve(__dirname, 'index.js'),
},
context: __dirname,
output: {
path: path.join(__dirname, 'dist'),
filename: '[name].js'
},
module: {
rules: [
{ test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] },
{
test: /\.(jpeg|png)?$/,
use: {
loader: 'file-loader',
options: {
name: 'assets/[name].[ext]'
}
}
}
]
},
}

Binary file not shown.

View File

@@ -1,60 +1,59 @@
{
"name": "term",
"devDependencies": {
"@fortawesome/fontawesome-free": "^5.6.3",
"@types/electron-config": "^0.2.1",
"@types/electron-debug": "^1.1.0",
"@types/fs-promise": "1.0.1",
"@types/js-yaml": "^3.11.2",
"@types/node": "^10.11.5",
"@types/webpack-env": "1.13.0",
"app-builder-lib": "^20.28.4",
"apply-loader": "0.1.0",
"@fortawesome/fontawesome-free": "^5.8.2",
"@types/electron-config": "^3.2.2",
"@types/electron-debug": "^2.1.0",
"@types/fs-promise": "1.0.3",
"@types/js-yaml": "^3.12.1",
"@types/node": "^12.0.2",
"@types/webpack-env": "1.13.9",
"app-builder-lib": "^20.42.0",
"apply-loader": "2.0.0",
"awesome-typescript-loader": "^5.0.0",
"core-js": "2.4.1",
"cross-env": "4.0.0",
"css-loader": "0.28.0",
"electron": "4.0.0",
"electron-builder": "^20.38.4",
"electron-builder-squirrel-windows": "^20.28.3",
"electron-installer-snap": "^3.0.0",
"electron-rebuild": "^1.8.2",
"file-loader": "^1.1.11",
"graceful-fs": "^4.1.11",
"html-loader": "0.4.4",
"json-loader": "0.5.4",
"node-abi": "^2.4.4",
"node-gyp": "^3.8.0",
"node-sass": "^4.5.3",
"npmlog": "4.1.0",
"core-js": "^3.1.2",
"cross-env": "5.2.0",
"css-loader": "2.1.1",
"electron": "^5.0.2",
"electron-builder": "^20.41.0",
"electron-installer-snap": "^3.2.0",
"electron-rebuild": "^1.8.5",
"file-loader": "^3.0.1",
"graceful-fs": "^4.1.15",
"html-loader": "0.5.5",
"json-loader": "0.5.7",
"node-abi": "^2.8.0",
"node-gyp": "^4.0.0",
"node-sass": "^4.12.0",
"npmlog": "4.1.2",
"npx": "^10.2.0",
"pug": "^2.0.3",
"pug-html-loader": "1.0.9",
"pug-html-loader": "1.1.5",
"pug-lint": "^2.5.0",
"pug-loader": "^2.4.0",
"pug-static-loader": "0.0.1",
"raven-js": "3.16.0",
"raw-loader": "0.5.1",
"pug-static-loader": "2.0.0",
"raven-js": "3.27.1",
"raw-loader": "2.0.0",
"sass-loader": "^7.0.1",
"shelljs": "0.7.7",
"shelljs": "0.8.3",
"source-code-pro": "^2.30.1",
"source-sans-pro": "2.0.10",
"style-loader": "0.13.1",
"source-sans-pro": "2.45.0",
"style-loader": "^0.23.1",
"svg-inline-loader": "^0.8.0",
"to-string-loader": "1.1.5",
"tslint": "^5.12.0",
"tslint": "^5.16.0",
"tslint-config-standard": "^8.0.1",
"tslint-eslint-rules": "^5.4.0",
"typescript": "^3.1.3",
"typedoc": "^0.14.2",
"typescript": "^3.4.5",
"url-loader": "^1.1.1",
"val-loader": "0.5.0",
"webpack": "^4.27.1",
"webpack-cli": "^3.1.2",
"yaml-loader": "0.4.0",
"yarn": "^1.10.1"
"val-loader": "1.1.1",
"webpack": "^4.32.2",
"webpack-cli": "^3.3.2",
"yaml-loader": "0.5.0"
},
"resolutions": {
"*/node-abi": "^2.5.0"
"*/node-abi": "^2.8.0"
},
"build": {
"appId": "org.terminus",
@@ -70,16 +69,22 @@
],
"win": {
"icon": "./build/windows/icon.ico",
"publish": [
"github"
],
"artifactName": "terminus-${version}-setup.exe"
},
"squirrelWindows": {
"iconUrl": "https://github.com/Eugeny/terminus/raw/master/build/windows/icon.ico",
"loadingGif": "./build/windows/squirrel.gif",
"artifactName": "terminus-${version}-setup.exe"
"nsis": {
"oneClick": false,
"artifactName": "terminus-${version}-setup.${ext}",
"installerIcon": "./build/windows/icon.ico"
},
"publish": [
{
"provider": "bintray",
"token": "d993c4faa708a4cba84fa3a8e822457e7298d75c"
},
{
"provider": "github"
}
],
"portable": {
"artifactName": "terminus-${version}-portable.exe"
},
@@ -87,9 +92,6 @@
"category": "public.app-category.video",
"icon": "./build/mac/icon.icns",
"artifactName": "terminus-${version}-macos.${ext}",
"publish": [
"github"
],
"extendInfo": {
"NSRequiresAquaSystemAppearance": false
}
@@ -100,10 +102,7 @@
"linux": {
"category": "Utilities",
"icon": "./build/icons",
"artifactName": "terminus-${version}-linux.${ext}",
"publish": [
"github"
]
"artifactName": "terminus-${version}-linux.${ext}"
},
"deb": {
"depends": [
@@ -111,6 +110,7 @@
"gconf2",
"gconf-service",
"libnotify4",
"libsecret-1-0",
"libappindicator1",
"libxtst6",
"libnss3",
@@ -130,6 +130,7 @@
"watch": "cross-env TERMINUS_DEV=1 webpack --progress --color --watch",
"start": "cross-env TERMINUS_DEV=1 electron app --debug",
"prod": "cross-env TERMINUS_DEV=1 electron app",
"docs": "typedoc --out docs/api terminus-core/src && typedoc --out docs/api/terminal terminus-terminal/src && typedoc --out docs/api/settings terminus-settings/src",
"lint": "tslint -c tslint.json -t stylish terminus-*/src/**/*.ts terminus-*/src/*.ts app/src/*.ts",
"postinstall": "node ./scripts/install-deps.js"
},

View File

@@ -4,7 +4,7 @@ const path = require('path')
const vars = require('./vars')
lifecycles = []
for (let dir of ['app', 'terminus-ssh', 'terminus-terminal']) {
for (let dir of ['app', 'terminus-core', 'terminus-ssh', 'terminus-terminal']) {
lifecycles.push([rebuild({
buildPath: path.resolve(__dirname, '../' + dir),
electronVersion: vars.electronVersion,

View File

@@ -4,7 +4,7 @@ const vars = require('./vars')
builder({
dir: true,
win: ['squirrel', 'portable'],
win: ['nsis', 'portable'],
config: {
extraMetadata: {
version: vars.version,

26
snap/snapcraft.yaml Normal file
View File

@@ -0,0 +1,26 @@
name: terminus
version: '1.0.0'
summary: A terminal for a modern age
description: |
Terminus is a terminal heavily inspired by Hyper. It is, however, designed for people who need to get things done.
grade: devel
confinement: devmode
apps:
terminus:
command: opt/terminus/terminus
parts:
app:
plugin: nodejs
source: .
build-packages:
- libfontconfig-dev
override-build: |
yarn
./scripts/build-native.js
yarn run build
./scripts/build-linux.js
mkdir -p $SNAPCRAFT_PART_INSTALL/opt/terminus || true
cp -ar dist/linux-unpacked/* $SNAPCRAFT_PART_INSTALL/opt/terminus/

View File

@@ -1,6 +1,6 @@
{
"name": "terminus-community-color-schemes",
"version": "1.0.68-c17-g8b64a81",
"version": "1.0.73-c4-ga7d62b0",
"description": "Community color schemes for Terminus",
"keywords": [
"terminus-builtin-plugin"
@@ -22,7 +22,7 @@
"terminus-terminal": "*"
},
"devDependencies": {
"@types/node": "7.0.12",
"@types/node": "12.0.2",
"@types/webpack-env": "^1.13.0"
},
"false": {}

View File

@@ -0,0 +1,36 @@
! special
*.foreground: #d8d8d8
*.background: #343a43
*.cursorColor: #d8d8d8
! black
*.color0: #2c3037
*.color8: #626262
! red
*.color1: #bb5653
*.color9: #c35956
! green
*.color2: #909d62
*.color10: #9fab76
! yellow
*.color3: #eac179
*.color11: #ecc179
! blue
*.color4: #698698
*.color12: #7da9c7
! magenta
*.color5: #b06597
*.color13: #ba6ca0
! cyan
*.color6: #c9dfff
*.color14: #abbacf
! white
*.color7: #d8d8d8
*.color15: #f7f7f7

View File

@@ -4,7 +4,7 @@ const webpack = require('webpack')
module.exports = {
target: 'node',
entry: 'src/index.ts',
devtool: 'source-map',
devtool: 'eval-source-map',
context: __dirname,
output: {
path: path.resolve(__dirname, 'dist'),

View File

@@ -2,12 +2,12 @@
# yarn lockfile v1
"@types/node@7.0.12":
version "7.0.12"
resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.12.tgz#ae5f67a19c15f752148004db07cbbb372e69efc9"
integrity sha1-rl9noZwV91IUgATbB8u7Ny5p78k=
"@types/node@12.0.2":
version "12.0.2"
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.0.2.tgz#3452a24edf9fea138b48fad4a0a028a683da1e40"
integrity sha512-5tabW/i+9mhrfEOUcLDu2xBPsHJ+X5Orqy9FKpale3SjDA17j5AEpYq5vfy3oAeAHGcvANRCO3NV3d2D6q3NiA==
"@types/webpack-env@^1.13.0":
version "1.13.1"
resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.13.1.tgz#b45c222e24301bd006e3edfc762cc6b51bda236a"
integrity sha512-oHyg0NssP2RCpCvE35hhbSqMJRsc5lSW+GFe+Vc65JL+kHII1VMYM+0KeV/z4utFuUqPoQRmq8KMMp7ba0dj6Q==
version "1.13.9"
resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.13.9.tgz#a67287861c928ebf4159a908d1fb1a2a34d4097a"
integrity sha512-p8zp5xqkly3g4cCmo2mKOHI9+Z/kObmDj0BmjbDDJQlgDTiEGTbm17MEwTAusV6XceCy+bNw9q/ZHXHyKo3zkg==

31
terminus-core/README.md Normal file
View File

@@ -0,0 +1,31 @@
Terminus Core Plugin
--------------------
See also: [Settings plugin API](./settings/), [Terminal plugin API](./settings/)
* tabbed interface services
* toolbar UI
* config file management
* hotkeys
* tab recovery
* logging
* theming
Using the API:
```ts
import { AppService, TabContextMenuItemProvider } from 'terminus-core'
```
Exporting your subclasses:
```ts
@NgModule({
...
providers: [
...
{ provide: TabContextMenuItemProvider, useClass: MyContextMenu, multi: true },
...
]
})
```

View File

@@ -1,6 +1,6 @@
{
"name": "terminus-core",
"version": "1.0.68-c17-g8b64a81",
"version": "1.0.73-c4-ga7d62b0",
"description": "Terminus core",
"keywords": [
"terminus-builtin-plugin"
@@ -18,19 +18,21 @@
"license": "MIT",
"devDependencies": {
"@types/js-yaml": "^3.9.0",
"@types/node": "^7.0.37",
"@types/node": "^12.0.2",
"@types/webpack-env": "^1.13.0",
"@types/winston": "^2.3.6",
"axios": "^0.18.0",
"bootstrap": "^4.1.3",
"core-js": "^2.4.1",
"electron-updater": "^2.8.9",
"core-js": "^3.1.2",
"electron-updater": "^4.0.6",
"ng2-dnd": "^5.0.2",
"ngx-perfect-scrollbar": "^6.0.0",
"rage-edit": "^1.2.0",
"shell-escape": "^0.2.0",
"universal-analytics": "^0.4.17"
},
"optionalDependencies": {
"windows-native-registry": "^1.0.14"
},
"peerDependencies": {
"@angular/animations": "4.0.1",
"@angular/common": "4.0.1",
@@ -42,8 +44,8 @@
"zone.js": "0.8.4"
},
"dependencies": {
"deepmerge": "^1.5.0",
"deepmerge": "^3.2.0",
"js-yaml": "^3.9.0",
"winston": "^2.4.0"
"winston": "^3.2.1"
}
}

View File

@@ -1,4 +1,37 @@
/**
* Extend to add your own config options
*/
export abstract class ConfigProvider {
/**
* Default values, e.g.
*
* ```ts
* defaults = {
* myPlugin: {
* foo: 1
* }
* }
* ```
*/
defaults: any = {}
platformDefaults: any = {}
/**
* [[Platform]] specific defaults, e.g.
*
* ```ts
* platformDefaults = {
* [Platform.Windows]: {
* myPlugin: {
* bar: true
* }
* },
* [Platform.macOS]: {
* myPlugin: {
* bar: false
* }
* },
* }
* ```
*/
platformDefaults: {[platform: string]: any} = {}
}

View File

@@ -1,8 +1,12 @@
export interface IHotkeyDescription {
id: string,
name: string,
id: string
name: string
}
/**
* Extend to provide your own hotkeys. A corresponding [[ConfigProvider]]
* must also provide the `hotkeys.foo` config options with the default values
*/
export abstract class HotkeyProvider {
hotkeys: IHotkeyDescription[] = []

View File

@@ -1,4 +1,5 @@
export { BaseTabComponent, BaseTabProcess } from '../components/baseTab.component'
export { SplitTabComponent, SplitContainer } from '../components/splitTab.component'
export { TabRecoveryProvider, RecoveredTab } from './tabRecovery'
export { ToolbarButtonProvider, IToolbarButton } from './toolbarButtonProvider'
export { ConfigProvider } from './configProvider'
@@ -16,3 +17,4 @@ export { HotkeysService } from '../services/hotkeys.service'
export { HostAppService, Platform } from '../services/hostApp.service'
export { ShellIntegrationService } from '../services/shellIntegration.service'
export { ThemesService } from '../services/themes.service'
export { TabsService } from '../services/tabs.service'

View File

@@ -1,6 +1,9 @@
import { BaseTabComponent } from '../components/baseTab.component'
import { TabHeaderComponent } from '../components/tabHeader.component'
/**
* Extend to add items to the tab header's context menu
*/
export abstract class TabContextMenuItemProvider {
weight = 0

View File

@@ -1,10 +1,38 @@
import { TabComponentType } from '../services/app.service'
import { TabComponentType } from '../services/tabs.service'
export interface RecoveredTab {
type: TabComponentType,
options?: any,
/**
* Component type to be instantiated
*/
type: TabComponentType
/**
* Component instance inputs
*/
options?: any
}
/**
* Extend to enable recovery for your custom tab.
* This works in conjunction with [[getRecoveryToken()]]
*
* Terminus will try to find any [[TabRecoveryProvider]] that is able to process
* the recovery token previously returned by [[getRecoveryToken]].
*
* Recommended token format:
*
* ```json
* {
* type: 'my-tab-type',
* foo: 'bar',
* }
* ```
*/
export abstract class TabRecoveryProvider {
/**
* @param recoveryToken a recovery token found in the saved tabs list
* @returns [[RecoveredTab]] descriptor containing tab type and component inputs
* or `null` if this token is from a different tab type or is not supported
*/
abstract async recover (recoveryToken: any): Promise<RecoveredTab | null>
}

View File

@@ -1,5 +1,13 @@
/**
* Extend to add a custom CSS theme
*/
export abstract class Theme {
name: string
/**
* Complete CSS stylesheet
*/
css: string
terminalBackground: string
}

View File

@@ -1,14 +1,39 @@
import { SafeHtml } from '@angular/platform-browser'
/**
* See [[ToolbarButtonProvider]]
*/
export interface IToolbarButton {
/**
* Raw SVG icon code
*/
icon: SafeHtml
touchBarNSImage?: string
title: string
/**
* Optional Touch Bar icon ID
*/
touchBarNSImage?: string
/**
* Optional Touch Bar button label
*/
touchBarTitle?: string
weight?: number
click: () => void
click?: () => void
submenu?: () => Promise<IToolbarButton[]>
/** @hidden */
submenuItems?: IToolbarButton[]
}
/**
* Extend to add buttons to the toolbar
*/
export abstract class ToolbarButtonProvider {
abstract provide (): IToolbarButton[]
}

View File

@@ -32,22 +32,48 @@ title-bar(
)
.btn-group.background
button.btn.btn-secondary.btn-tab-bar(
*ngFor='let button of leftToolbarButtons',
[title]='button.title',
(click)='button.click()',
[innerHTML]='button.icon',
.d-flex(
*ngFor='let button of leftToolbarButtons',
ngbDropdown,
(openChange)='generateButtonSubmenu(button)',
)
button.btn.btn-secondary.btn-tab-bar(
[title]='button.title',
(click)='button.click && button.click()',
[innerHTML]='button.icon',
ngbDropdownToggle,
)
div(*ngIf='button.submenu', ngbDropdownMenu)
button.dropdown-item.d-flex.align-items-center(
*ngFor='let item of button.submenuItems',
(click)='item.click()',
ngbDropdownItem,
)
.icon-wrapper([innerHTML]='item.icon')
.ml-3 {{item.title}}
.drag-space.background([class.persistent]='config.store.appearance.frame == "thin" && hostApp.platform != Platform.macOS')
.btn-group.background
button.btn.btn-secondary.btn-tab-bar(
*ngFor='let button of rightToolbarButtons',
[title]='button.title',
(click)='button.click()',
[innerHTML]='button.icon',
.d-flex(
*ngFor='let button of rightToolbarButtons',
ngbDropdown,
(openChange)='generateButtonSubmenu(button)',
)
button.btn.btn-secondary.btn-tab-bar(
[title]='button.title',
(click)='button.click && button.click()',
[innerHTML]='button.icon',
ngbDropdownToggle,
)
div(*ngIf='button.submenu', ngbDropdownMenu)
button.dropdown-item.d-flex.align-items-center(
*ngFor='let item of button.submenuItems',
(click)='item.click()',
ngbDropdownItem,
)
.icon-wrapper([innerHTML]='item.icon')
.ml-3 {{item.title}}
button.btn.btn-secondary.btn-tab-bar.btn-update(
*ngIf='updatesAvailable',

View File

@@ -88,12 +88,20 @@ hotkey-hint {
max-width: 300px;
}
::ng-deep .btn-tab-bar svg {
::ng-deep .btn-tab-bar svg,
::ng-deep .btn-tab-bar + .dropdown-menu svg {
width: 16px;
height: 16px;
fill: white;
fill-opacity: 0.75;
}
.icon-wrapper {
display: flex;
width: 16px;
height: 17px;
}
::ng-deep .btn-update svg {
fill: cyan;
}

View File

@@ -17,6 +17,7 @@ import { BaseTabComponent } from './baseTab.component'
import { SafeModeModalComponent } from './safeModeModal.component'
import { AppService, IToolbarButton, ToolbarButtonProvider } from '../api'
/** @hidden */
@Component({
selector: 'app-root',
template: require('./appRoot.component.pug'),
@@ -126,6 +127,11 @@ export class AppRootComponent {
this.onGlobalHotkey()
})
this.hostApp.windowCloseRequest$.subscribe(async () => {
await this.app.closeAllTabs()
this.hostApp.closeWindow()
})
if (window['safeModeReason']) {
ngbModal.open(SafeModeModalComponent)
}
@@ -227,6 +233,12 @@ export class AppRootComponent {
})
}
async generateButtonSubmenu (button: IToolbarButton) {
if (button.submenu) {
button.submenuItems = await button.submenu()
}
}
private getToolbarButtons (aboveZero: boolean): IToolbarButton[] {
let buttons: IToolbarButton[] = []
this.config.enabledServices(this.toolbarButtonProviders).forEach(provider => {

View File

@@ -1,27 +1,58 @@
import { Observable, Subject } from 'rxjs'
import { ViewRef } from '@angular/core'
/**
* Represents an active "process" inside a tab,
* for example, a user process running inside a terminal tab
*/
export interface BaseTabProcess {
name: string
}
/**
* Abstract base class for custom tab components
*/
export abstract class BaseTabComponent {
private static lastTabID = 0
id: number
/**
* Current tab title
*/
title: string
/**
* User-defined title override
*/
customTitle: string
hasFocus = false
/**
* Last tab activity state
*/
hasActivity = false
/**
* ViewRef to the tab DOM element
*/
hostView: ViewRef
/**
* CSS color override for the tab's header
*/
color: string = null
protected titleChange = new Subject<string>()
protected focused = new Subject<void>()
protected blurred = new Subject<void>()
protected progress = new Subject<number>()
protected activity = new Subject<boolean>()
protected destroyed = new Subject<void>()
protected hasFocus = false
/**
* Ping this if your recovery state has been changed and you want
* your tab state to be saved sooner
*/
protected recoveryStateChangedHint = new Subject<void>()
private progressClearTimeout: number
private titleChange = new Subject<string>()
private focused = new Subject<void>()
private blurred = new Subject<void>()
private progress = new Subject<number>()
private activity = new Subject<boolean>()
private destroyed = new Subject<void>()
get focused$ (): Observable<void> { return this.focused }
get blurred$ (): Observable<void> { return this.blurred }
@@ -29,9 +60,9 @@ export abstract class BaseTabComponent {
get progress$ (): Observable<number> { return this.progress }
get activity$ (): Observable<boolean> { return this.activity }
get destroyed$ (): Observable<void> { return this.destroyed }
get recoveryStateChangedHint$ (): Observable<void> { return this.recoveryStateChangedHint }
constructor () {
this.id = BaseTabComponent.lastTabID++
this.focused$.subscribe(() => {
this.hasFocus = true
})
@@ -47,6 +78,11 @@ export abstract class BaseTabComponent {
}
}
/**
* Sets visual progressbar on the tab
*
* @param {type} progress: value between 0 and 1, or `null` to remove
*/
setProgress (progress: number) {
this.progress.next(progress)
if (progress) {
@@ -59,24 +95,43 @@ export abstract class BaseTabComponent {
}
}
/**
* Shows the acticity marker on the tab header
*/
displayActivity (): void {
this.hasActivity = true
this.activity.next(true)
}
/**
* Removes the acticity marker from the tab header
*/
clearActivity (): void {
this.hasActivity = false
this.activity.next(false)
}
/**
* Override this and implement a [[TabRecoveryProvider]] to enable recovery
* for your custom tab
*
* @return JSON serializable tab state representation
* for your [[TabRecoveryProvider]] to parse
*/
async getRecoveryToken (): Promise<any> {
return null
}
/**
* Override this to enable task completion notifications for the tab
*/
async getCurrentProcess (): Promise<BaseTabProcess> {
return null
}
/**
* Return false to prevent the tab from being closed
*/
async canClose (): Promise<boolean> {
return true
}
@@ -89,11 +144,15 @@ export abstract class BaseTabComponent {
this.blurred.next()
}
/**
* Called before the tab is closed
*/
destroy (): void {
this.focused.complete()
this.blurred.complete()
this.titleChange.complete()
this.progress.complete()
this.recoveryStateChangedHint.complete()
this.destroyed.next()
this.destroyed.complete()
}

View File

@@ -1,6 +1,7 @@
import { NgZone, Component, Input, HostBinding, HostListener } from '@angular/core'
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'
/** @hidden */
@Component({
selector: 'checkbox',
template: require('./checkbox.component.pug'),

View File

@@ -1,6 +1,7 @@
import { Component, Input, ElementRef, ViewChild } from '@angular/core'
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
/** @hidden */
@Component({
selector: 'rename-tab-modal',
template: require('./renameTabModal.component.pug'),

View File

@@ -1,6 +1,7 @@
import { Component, Input } from '@angular/core'
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
/** @hidden */
@Component({
template: require('./safeModeModal.component.pug'),
})

View File

@@ -0,0 +1,5 @@
:host {
display: block;
position: relative;
flex: auto;
}

View File

@@ -0,0 +1,524 @@
import { Observable, Subject, Subscription } from 'rxjs'
import { Component, Injectable, ViewChild, ViewContainerRef, EmbeddedViewRef, OnInit, OnDestroy } from '@angular/core'
import { BaseTabComponent, BaseTabProcess } from './baseTab.component'
import { TabRecoveryProvider, RecoveredTab } from '../api/tabRecovery'
import { TabsService } from '../services/tabs.service'
import { HotkeysService } from '../services/hotkeys.service'
import { TabRecoveryService } from '../services/tabRecovery.service'
export declare type SplitOrientation = 'v' | 'h'
export declare type SplitDirection = 'r' | 't' | 'b' | 'l'
/**
* Describes a horizontal or vertical split row or column
*/
export class SplitContainer {
orientation: SplitOrientation = 'h'
/**
* Children could be tabs or other containers
*/
children: (BaseTabComponent | SplitContainer)[] = []
/**
* Relative sizes of children, between 0 and 1. Total sum is 1
*/
ratios: number[] = []
x: number
y: number
w: number
h: number
/**
* @return Flat list of all tabs inside this container
*/
getAllTabs () {
let r = []
for (let child of this.children) {
if (child instanceof SplitContainer) {
r = r.concat(child.getAllTabs())
} else {
r.push(child)
}
}
return r
}
/**
* Remove unnecessarily nested child containers and renormalizes [[ratios]]
*/
normalize () {
for (let i = 0; i < this.children.length; i++) {
let child = this.children[i]
if (child instanceof SplitContainer) {
child.normalize()
if (child.children.length === 0) {
this.children.splice(i, 1)
this.ratios.splice(i, 1)
i--
continue
} else if (child.children.length === 1) {
this.children[i] = child.children[0]
} else if (child.orientation === this.orientation) {
let ratio = this.ratios[i]
this.children.splice(i, 1)
this.ratios.splice(i, 1)
for (let j = 0; j < child.children.length; j++) {
this.children.splice(i, 0, child.children[j])
this.ratios.splice(i, 0, child.ratios[j] * ratio)
i++
}
}
}
}
let s = 0
for (let x of this.ratios) {
s += x
}
this.ratios = this.ratios.map(x => x / s)
}
/**
* Gets the left/top side offset for the given element index (between 0 and 1)
*/
getOffsetRatio (index: number): number {
let s = 0
for (let i = 0; i < index; i++) {
s += this.ratios[i]
}
return s
}
async serialize () {
let children = []
for (let child of this.children) {
if (child instanceof SplitContainer) {
children.push(await child.serialize())
} else {
children.push(await child.getRecoveryToken())
}
}
return {
type: 'app:split-tab',
ratios: this.ratios,
orientation: this.orientation,
children,
}
}
}
/**
* Represents a spanner (draggable border between two split areas)
*/
export interface SplitSpannerInfo {
container: SplitContainer
/**
* Number of the right/bottom split in the container
*/
index: number
}
/**
* Split tab is a tab that contains other tabs and allows further splitting them
* You'll mainly encounter it inside [[AppService]].tabs
*/
@Component({
selector: 'split-tab',
template: `
<ng-container #vc></ng-container>
<split-tab-spanner
*ngFor='let spanner of _spanners'
[container]='spanner.container'
[index]='spanner.index'
(change)='onSpannerAdjusted(spanner)'
></split-tab-spanner>
`,
styles: [require('./splitTab.component.scss')],
})
export class SplitTabComponent extends BaseTabComponent implements OnInit, OnDestroy {
/** @hidden */
@ViewChild('vc', { read: ViewContainerRef }) viewContainer: ViewContainerRef
/**
* Top-level split container
*/
root: SplitContainer
/** @hidden */
_recoveredState: any
/** @hidden */
_spanners: SplitSpannerInfo[] = []
private focusedTab: BaseTabComponent
private hotkeysSubscription: Subscription
private viewRefs: Map<BaseTabComponent, EmbeddedViewRef<any>> = new Map()
private tabAdded = new Subject<BaseTabComponent>()
private tabRemoved = new Subject<BaseTabComponent>()
private splitAdjusted = new Subject<SplitSpannerInfo>()
private focusChanged = new Subject<BaseTabComponent>()
get tabAdded$ (): Observable<BaseTabComponent> { return this.tabAdded }
get tabRemoved$ (): Observable<BaseTabComponent> { return this.tabRemoved }
/**
* Fired when split ratio is changed for a given spanner
*/
get splitAdjusted$ (): Observable<SplitSpannerInfo> { return this.splitAdjusted }
/**
* Fired when a different sub-tab gains focus
*/
get focusChanged$ (): Observable<BaseTabComponent> { return this.focusChanged }
/** @hidden */
constructor (
private hotkeys: HotkeysService,
private tabsService: TabsService,
private tabRecovery: TabRecoveryService,
) {
super()
this.root = new SplitContainer()
this.setTitle('')
this.focused$.subscribe(() => {
this.getAllTabs().forEach(x => x.emitFocused())
this.focus(this.focusedTab)
})
this.blurred$.subscribe(() => this.getAllTabs().forEach(x => x.emitBlurred()))
this.hotkeysSubscription = this.hotkeys.matchedHotkey.subscribe(hotkey => {
if (!this.hasFocus) {
return
}
switch (hotkey) {
case 'split-right':
this.splitTab(this.focusedTab, 'r')
break
case 'split-bottom':
this.splitTab(this.focusedTab, 'b')
break
case 'split-top':
this.splitTab(this.focusedTab, 't')
break
case 'split-left':
this.splitTab(this.focusedTab, 'l')
break
case 'pane-nav-left':
this.navigate('l')
break
case 'pane-nav-right':
this.navigate('r')
break
case 'pane-nav-up':
this.navigate('t')
break
case 'pane-nav-down':
this.navigate('b')
break
case 'close-pane':
this.removeTab(this.focusedTab)
break
}
})
}
/** @hidden */
async ngOnInit () {
if (this._recoveredState) {
await this.recoverContainer(this.root, this._recoveredState)
this.layout()
setImmediate(() => {
this.getAllTabs().forEach(x => x.emitFocused())
this.focusAnyIn(this.root)
})
}
}
/** @hidden */
ngOnDestroy () {
this.hotkeysSubscription.unsubscribe()
}
/** @returns Flat list of all sub-tabs */
getAllTabs () {
return this.root.getAllTabs()
}
getFocusedTab (): BaseTabComponent {
return this.focusedTab
}
focus (tab: BaseTabComponent) {
this.focusedTab = tab
for (let x of this.getAllTabs()) {
if (x !== tab) {
x.emitBlurred()
}
}
if (tab) {
tab.emitFocused()
this.focusChanged.next(tab)
}
this.layout()
}
/**
* Focuses the first available tab inside the given [[SplitContainer]]
*/
focusAnyIn (parent: BaseTabComponent | SplitContainer) {
if (!parent) {
return
}
if (parent instanceof SplitContainer) {
this.focusAnyIn(parent.children[0])
} else {
this.focus(parent)
}
}
/**
* Inserts a new `tab` to the `side` of the `relative` tab
*/
addTab (tab: BaseTabComponent, relative: BaseTabComponent, side: SplitDirection) {
let target = this.getParentOf(relative) || this.root
let insertIndex = target.children.indexOf(relative)
if (
(target.orientation === 'v' && ['l', 'r'].includes(side)) ||
(target.orientation === 'h' && ['t', 'b'].includes(side))
) {
let newContainer = new SplitContainer()
newContainer.orientation = (target.orientation === 'v') ? 'h' : 'v'
newContainer.children = [relative]
newContainer.ratios = [1]
target.children[insertIndex] = newContainer
target = newContainer
insertIndex = 0
}
if (insertIndex === -1) {
insertIndex = 0
} else {
insertIndex += (side === 'l' || side === 't') ? 0 : 1
}
for (let i = 0; i < target.children.length; i++) {
target.ratios[i] *= target.children.length / (target.children.length + 1)
}
target.ratios.splice(insertIndex, 0, 1 / (target.children.length + 1))
target.children.splice(insertIndex, 0, tab)
this.recoveryStateChangedHint.next()
this.attachTabView(tab)
setImmediate(() => {
this.layout()
this.tabAdded.next(tab)
this.focus(tab)
})
}
removeTab (tab: BaseTabComponent) {
let parent = this.getParentOf(tab)
let index = parent.children.indexOf(tab)
parent.ratios.splice(index, 1)
parent.children.splice(index, 1)
this.detachTabView(tab)
this.layout()
this.tabRemoved.next(tab)
if (this.root.children.length === 0) {
this.destroy()
} else {
this.focusAnyIn(parent)
}
}
/**
* Moves focus in the given direction
*/
navigate (dir: SplitDirection) {
let rel: BaseTabComponent | SplitContainer = this.focusedTab
let parent = this.getParentOf(rel)
let orientation = ['l', 'r'].includes(dir) ? 'h' : 'v'
while (parent !== this.root && parent.orientation !== orientation) {
rel = parent
parent = this.getParentOf(rel)
}
if (parent.orientation !== orientation) {
return
}
let index = parent.children.indexOf(rel)
if (['l', 't'].includes(dir)) {
if (index > 0) {
this.focusAnyIn(parent.children[index - 1])
}
} else {
if (index < parent.children.length - 1) {
this.focusAnyIn(parent.children[index + 1])
}
}
}
async splitTab (tab: BaseTabComponent, dir: SplitDirection) {
let newTab = await this.tabsService.duplicate(tab)
this.addTab(newTab, tab, dir)
}
/**
* @returns the immediate parent of `tab`
*/
getParentOf (tab: BaseTabComponent | SplitContainer, root?: SplitContainer): SplitContainer {
root = root || this.root
for (let child of root.children) {
if (child instanceof SplitContainer) {
let r = this.getParentOf(tab, child)
if (r) {
return r
}
}
if (child === tab) {
return root
}
}
return null
}
/** @hidden */
async canClose (): Promise<boolean> {
return !(await Promise.all(this.getAllTabs().map(x => x.canClose()))).some(x => !x)
}
/** @hidden */
async getRecoveryToken (): Promise<any> {
return this.root.serialize()
}
/** @hidden */
async getCurrentProcess (): Promise<BaseTabProcess> {
return (await Promise.all(this.getAllTabs().map(x => x.getCurrentProcess()))).find(x => !!x)
}
/** @hidden */
onSpannerAdjusted (spanner: SplitSpannerInfo) {
this.layout()
this.splitAdjusted.next(spanner)
}
private attachTabView (tab: BaseTabComponent) {
let ref = this.viewContainer.insert(tab.hostView) as EmbeddedViewRef<any>
this.viewRefs.set(tab, ref)
ref.rootNodes[0].addEventListener('click', () => this.focus(tab))
tab.titleChange$.subscribe(t => this.setTitle(t))
tab.activity$.subscribe(a => a ? this.displayActivity() : this.clearActivity())
tab.progress$.subscribe(p => this.setProgress(p))
if (tab.title) {
this.setTitle(tab.title)
}
tab.destroyed$.subscribe(() => {
this.removeTab(tab)
})
}
private detachTabView (tab: BaseTabComponent) {
let ref = this.viewRefs.get(tab)
this.viewRefs.delete(tab)
this.viewContainer.remove(this.viewContainer.indexOf(ref))
}
private layout () {
this.root.normalize()
this._spanners = []
this.layoutInternal(this.root, 0, 0, 100, 100)
}
private layoutInternal (root: SplitContainer, x: number, y: number, w: number, h: number) {
let size = (root.orientation === 'v') ? h : w
let sizes = root.ratios.map(x => x * size)
root.x = x
root.y = y
root.w = w
root.h = h
let offset = 0
root.children.forEach((child, i) => {
let childX = (root.orientation === 'v') ? x : (x + offset)
let childY = (root.orientation === 'v') ? (y + offset) : y
let childW = (root.orientation === 'v') ? w : sizes[i]
let childH = (root.orientation === 'v') ? sizes[i] : h
if (child instanceof SplitContainer) {
this.layoutInternal(child, childX, childY, childW, childH)
} else {
let element = this.viewRefs.get(child).rootNodes[0]
element.style.position = 'absolute'
element.style.left = `${childX}%`
element.style.top = `${childY}%`
element.style.width = `${childW}%`
element.style.height = `${childH}%`
element.style.opacity = (child === this.focusedTab) ? 1 : 0.75
}
offset += sizes[i]
if (i !== 0) {
this._spanners.push({
container: root,
index: i,
})
}
})
}
private async recoverContainer (root: SplitContainer, state: any) {
let children: (SplitContainer | BaseTabComponent)[] = []
root.orientation = state.orientation
root.ratios = state.ratios
root.children = children
for (let childState of state.children) {
if (childState.type === 'app:split-tab') {
let child = new SplitContainer()
await this.recoverContainer(child, childState)
children.push(child)
} else {
let recovered = await this.tabRecovery.recoverTab(childState)
if (recovered) {
let tab = this.tabsService.create(recovered.type, recovered.options)
children.push(tab)
this.attachTabView(tab)
} else {
state.ratios.splice(state.children.indexOf(childState), 0)
}
}
}
}
}
/** @hidden */
@Injectable()
export class SplitTabRecoveryProvider extends TabRecoveryProvider {
async recover (recoveryToken: any): Promise<RecoveredTab> {
if (recoveryToken && recoveryToken.type === 'app:split-tab') {
return {
type: SplitTabComponent,
options: { _recoveredState: recoveryToken },
}
}
return null
}
}

View File

@@ -0,0 +1,22 @@
:host {
display: block;
position: absolute;
z-index: 5;
transition: 0.125s background;
&.v {
cursor: ns-resize;
height: 10px;
margin-top: -5px;
}
&.h {
cursor: ew-resize;
width: 10px;
margin-left: -5px;
}
&:hover, &.active {
background: rgba(255, 255, 255, .125);
}
}

View File

@@ -0,0 +1,88 @@
import { Component, Input, HostBinding, ElementRef, Output, EventEmitter } from '@angular/core'
import { SplitContainer } from './splitTab.component'
/** @hidden */
@Component({
selector: 'split-tab-spanner',
template: '',
styles: [require('./splitTabSpanner.component.scss')],
})
export class SplitTabSpannerComponent {
@Input() container: SplitContainer
@Input() index: number
@Output() change = new EventEmitter<void>()
@HostBinding('class.active') isActive = false
@HostBinding('class.h') isHorizontal = false
@HostBinding('class.v') isVertical = true
@HostBinding('style.left') cssLeft: string
@HostBinding('style.top') cssTop: string
@HostBinding('style.width') cssWidth: string
@HostBinding('style.height') cssHeight: string
private marginOffset = -5
constructor (private element: ElementRef) { }
ngAfterViewInit () {
this.element.nativeElement.addEventListener('mousedown', e => {
this.isActive = true
let start = this.isVertical ? e.pageY : e.pageX
let current = start
let oldPosition = this.isVertical ? this.element.nativeElement.offsetTop : this.element.nativeElement.offsetLeft
const dragHandler = e => {
current = this.isVertical ? e.pageY : e.pageX
let newPosition = oldPosition + (current - start)
if (this.isVertical) {
this.element.nativeElement.style.top = `${newPosition - this.marginOffset}px`
} else {
this.element.nativeElement.style.left = `${newPosition - this.marginOffset}px`
}
}
const offHandler = () => {
this.isActive = false
document.removeEventListener('mouseup', offHandler)
this.element.nativeElement.parentElement.removeEventListener('mousemove', dragHandler)
let diff = (current - start) / (this.isVertical ? this.element.nativeElement.parentElement.clientHeight : this.element.nativeElement.parentElement.clientWidth)
diff = Math.max(diff, -this.container.ratios[this.index - 1] + 0.1)
diff = Math.min(diff, this.container.ratios[this.index] - 0.1)
this.container.ratios[this.index - 1] += diff
this.container.ratios[this.index] -= diff
this.change.emit()
}
document.addEventListener('mouseup', offHandler)
this.element.nativeElement.parentElement.addEventListener('mousemove', dragHandler)
})
}
ngOnChanges () {
this.isHorizontal = this.container.orientation === 'h'
this.isVertical = this.container.orientation === 'v'
if (this.isVertical) {
this.setDimensions(
this.container.x,
this.container.y + this.container.h * this.container.getOffsetRatio(this.index),
this.container.w,
null
)
} else {
this.setDimensions(
this.container.x + this.container.w * this.container.getOffsetRatio(this.index),
this.container.y,
null,
this.container.h
)
}
}
private setDimensions (x: number, y: number, w: number, h: number) {
this.cssLeft = `${x}%`
this.cssTop = `${y}%`
this.cssWidth = w ? `${w}%` : null
this.cssHeight = h ? `${h}%` : null
}
}

View File

@@ -3,6 +3,7 @@ import { ConfigService } from '../services/config.service'
import { HomeBaseService } from '../services/homeBase.service'
import { IToolbarButton, ToolbarButtonProvider } from '../api'
/** @hidden */
@Component({
selector: 'start-page',
template: require('./startPage.component.pug'),
@@ -22,6 +23,7 @@ export class StartPageComponent {
return this.config.enabledServices(this.toolbarButtonProviders)
.map(provider => provider.provide())
.reduce((a, b) => a.concat(b))
.filter(x => !!x.click)
.sort((a: IToolbarButton, b: IToolbarButton) => (a.weight || 0) - (b.weight || 0))
}
}

View File

@@ -1,6 +1,7 @@
import { Component, Input, ViewChild, HostBinding, ViewContainerRef, OnChanges } from '@angular/core'
import { BaseTabComponent } from '../components/baseTab.component'
/** @hidden */
@Component({
selector: 'tab-body',
template: `

View File

@@ -9,6 +9,7 @@ import { ElectronService } from '../services/electron.service'
import { AppService } from '../services/app.service'
import { HostAppService, Platform } from '../services/hostApp.service'
/** @hidden */
@Component({
selector: 'tab-header',
template: require('./tabHeader.component.pug'),

View File

@@ -1,5 +1,6 @@
import { Component } from '@angular/core'
/** @hidden */
@Component({
selector: 'title-bar',
template: require('./titleBar.component.pug'),

View File

@@ -2,6 +2,7 @@ import { Component } from '@angular/core'
import { NG_VALUE_ACCESSOR } from '@angular/forms'
import { CheckboxComponent } from './checkbox.component'
/** @hidden */
@Component({
selector: 'toggle',
template: `

View File

@@ -0,0 +1,19 @@
.mb-4
.terminus-logo
h1.terminus-title Terminus
sup α
.container
.text-center.mb-5 Thank you for downloading Terminus!
.form-line
.header
.title Enable analytics
.description Help us track the number of Terminus installs across the world!
toggle(
[(ngModel)]='config.store.enableAnalytics',
(ngModelChange)='config.save(); config.requestRestart()',
)
.text-center.mt-5
button.btn.btn-primary((click)='closeAndDisable()') Close and never show again

View File

@@ -0,0 +1,6 @@
:host {
display: flex;
flex-direction: column;
margin: auto;
flex: 0 1 500px;
}

View File

@@ -0,0 +1,26 @@
import { Component } from '@angular/core'
import { BaseTabComponent } from './baseTab.component'
import { ConfigService } from '../services/config.service'
import { AppService } from '../services/app.service'
/** @hidden */
@Component({
selector: 'welcome-page',
template: require('./welcomeTab.component.pug'),
styles: [require('./welcomeTab.component.scss')],
})
export class WelcomeTabComponent extends BaseTabComponent {
constructor (
private app: AppService,
public config: ConfigService,
) {
super()
this.setTitle('Welcome')
}
closeAndDisable () {
this.config.store.enableWelcomeTab = false
this.config.save()
this.app.closeTab(this)
}
}

View File

@@ -9,7 +9,7 @@ button.btn.btn-secondary.btn-maximize(
svg(version='1.1', width='10', height='10')
path(d='M 0,0 0,10 10,10 10,0 Z M 1,1 9,1 9,9 1,9 Z')
button.btn.btn-secondary.btn-close(
(click)='app.closeWindow()'
(click)='closeWindow()'
)
svg(version='1.1', width='10', height='10')
path(d='M 0,0 0,0.7 4.3,5 0,9.3 0,10 0.7,10 5,5.7 9.3,10 10,10 10,9.3 5.7,5 10,0.7 10,0 9.3,0 5,4.3 0.7,0 Z')

View File

@@ -2,6 +2,7 @@ import { Component } from '@angular/core'
import { HostAppService } from '../services/hostApp.service'
import { AppService } from '../services/app.service'
/** @hidden */
@Component({
selector: 'window-controls',
template: require('./windowControls.component.pug'),
@@ -9,4 +10,9 @@ import { AppService } from '../services/app.service'
})
export class WindowControlsComponent {
constructor (public hostApp: HostAppService, public app: AppService) { }
async closeWindow () {
await this.app.closeAllTabs()
this.hostApp.closeWindow()
}
}

View File

@@ -1,6 +1,7 @@
import { ConfigProvider } from './api/configProvider'
import { Platform } from './services/hostApp.service'
/** @hidden */
export class CoreConfigProvider extends ConfigProvider {
platformDefaults = {
[Platform.macOS]: require('./configDefaults.macos.yaml'),

View File

@@ -36,4 +36,19 @@ hotkeys:
- 'Alt-9'
tab-10:
- 'Alt-0'
split-right:
- 'Ctrl-Shift-E'
split-bottom:
- 'Ctrl-Shift-D'
split-left: []
split-top: []
pane-nav-right:
- 'Ctrl-Alt-ArrowRight'
pane-nav-down:
- 'Ctrl-Alt-ArrowDown'
pane-nav-up:
- 'Ctrl-Alt-ArrowUp'
pane-nav-left:
- 'Ctrl-Alt-ArrowLeft'
close-pane: []
pluginBlacklist: ['ssh']

View File

@@ -34,4 +34,20 @@ hotkeys:
- '⌘-9'
tab-10:
- '⌘-0'
split-right:
- '⌘-Shift-D'
split-bottom:
- '⌘-D'
split-left: []
split-top: []
pane-nav-right:
- '⌘-⌥-ArrowRight'
pane-nav-down:
- '⌘-⌥-ArrowDown'
pane-nav-up:
- '⌘-⌥-ArrowUp'
pane-nav-left:
- '⌘-⌥-ArrowLeft'
close-pane:
- '⌘-Shift-W'
pluginBlacklist: ['ssh']

View File

@@ -36,4 +36,19 @@ hotkeys:
- 'Alt-9'
tab-10:
- 'Alt-0'
split-right:
- 'Ctrl-Shift-E'
split-bottom:
- 'Ctrl-Shift-D'
split-left: []
split-top: []
pane-nav-right:
- 'Ctrl-Alt-ArrowRight'
pane-nav-down:
- 'Ctrl-Alt-ArrowDown'
pane-nav-up:
- 'Ctrl-Alt-ArrowUp'
pane-nav-left:
- 'Ctrl-Alt-ArrowLeft'
close-pane: []
pluginBlacklist: []

View File

@@ -11,3 +11,4 @@ appearance:
vibrancy: false
vibrancyType: 'blur'
enableAnalytics: true
enableWelcomeTab: true

View File

@@ -1,5 +1,6 @@
import { Directive, AfterViewInit, ElementRef } from '@angular/core'
/** @hidden */
@Directive({
selector: '[autofocus]'
})

View File

@@ -0,0 +1,121 @@
import { Injectable } from '@angular/core'
import { IHotkeyDescription, HotkeyProvider } from './api/hotkeyProvider'
/** @hidden */
@Injectable()
export class AppHotkeyProvider extends HotkeyProvider {
hotkeys: IHotkeyDescription[] = [
{
id: 'new-window',
name: 'New window',
},
{
id: 'toggle-window',
name: 'Toggle terminal window',
},
{
id: 'toggle-fullscreen',
name: 'Toggle fullscreen mode',
},
{
id: 'rename-tab',
name: 'Rename Tab',
},
{
id: 'close-tab',
name: 'Close tab',
},
{
id: 'toggle-last-tab',
name: 'Toggle last tab',
},
{
id: 'next-tab',
name: 'Next tab',
},
{
id: 'previous-tab',
name: 'Previous tab',
},
{
id: 'tab-1',
name: 'Tab 1',
},
{
id: 'tab-2',
name: 'Tab 2',
},
{
id: 'tab-3',
name: 'Tab 3',
},
{
id: 'tab-4',
name: 'Tab 4',
},
{
id: 'tab-5',
name: 'Tab 5',
},
{
id: 'tab-6',
name: 'Tab 6',
},
{
id: 'tab-7',
name: 'Tab 7',
},
{
id: 'tab-8',
name: 'Tab 8',
},
{
id: 'tab-9',
name: 'Tab 9',
},
{
id: 'tab-10',
name: 'Tab 10',
},
{
id: 'split-right',
name: 'Split to the right',
},
{
id: 'split-bottom',
name: 'Split to the bottom',
},
{
id: 'split-left',
name: 'Split to the left',
},
{
id: 'split-top',
name: 'Split to the top',
},
{
id: 'pane-nav-up',
name: 'Focus the pane above',
},
{
id: 'pane-nav-down',
name: 'Focus the pane below',
},
{
id: 'pane-nav-left',
name: 'Focus the pane on the left',
},
{
id: 'pane-nav-right',
name: 'Focus the pane on the right',
},
{
id: 'close-pane',
name: 'Close focused pane',
},
]
async provide (): Promise<IHotkeyDescription[]> {
return this.hotkeys
}
}

View File

@@ -6,8 +6,6 @@ import { NgbModule } from '@ng-bootstrap/ng-bootstrap'
import { PerfectScrollbarModule, PERFECT_SCROLLBAR_CONFIG } from 'ngx-perfect-scrollbar'
import { DndModule } from 'ng2-dnd'
import { AppHotkeyProvider } from './services/hotkeys.service'
import { AppRootComponent } from './components/appRoot.component'
import { CheckboxComponent } from './components/checkbox.component'
import { TabBodyComponent } from './components/tabBody.component'
@@ -18,6 +16,9 @@ import { TitleBarComponent } from './components/titleBar.component'
import { ToggleComponent } from './components/toggle.component'
import { WindowControlsComponent } from './components/windowControls.component'
import { RenameTabModalComponent } from './components/renameTabModal.component'
import { SplitTabComponent, SplitTabRecoveryProvider } from './components/splitTab.component'
import { SplitTabSpannerComponent } from './components/splitTabSpanner.component'
import { WelcomeTabComponent } from './components/welcomeTab.component'
import { AutofocusDirective } from './directives/autofocus.directive'
@@ -25,9 +26,14 @@ import { HotkeyProvider } from './api/hotkeyProvider'
import { ConfigProvider } from './api/configProvider'
import { Theme } from './api/theme'
import { TabContextMenuItemProvider } from './api/tabContextMenuProvider'
import { TabRecoveryProvider } from './api/tabRecovery'
import { AppService } from './services/app.service'
import { ConfigService } from './services/config.service'
import { StandardTheme, StandardCompactTheme, PaperTheme } from './theme'
import { CoreConfigProvider } from './config'
import { AppHotkeyProvider } from './hotkeys'
import { TaskCompletionContextMenu, CommonOptionsContextMenu, CloseContextMenu } from './tabContextMenu'
import 'perfect-scrollbar/css/perfect-scrollbar.css'
@@ -42,9 +48,11 @@ const PROVIDERS = [
{ provide: TabContextMenuItemProvider, useClass: CommonOptionsContextMenu, multi: true },
{ provide: TabContextMenuItemProvider, useClass: CloseContextMenu, multi: true },
{ provide: TabContextMenuItemProvider, useClass: TaskCompletionContextMenu, multi: true },
{ provide: TabRecoveryProvider, useClass: SplitTabRecoveryProvider, multi: true },
{ provide: PERFECT_SCROLLBAR_CONFIG, useValue: { suppressScrollX: true } }
]
/** @hidden */
@NgModule({
imports: [
BrowserModule,
@@ -66,10 +74,15 @@ const PROVIDERS = [
RenameTabModalComponent,
SafeModeModalComponent,
AutofocusDirective,
SplitTabComponent,
SplitTabSpannerComponent,
WelcomeTabComponent,
],
entryComponents: [
RenameTabModalComponent,
SafeModeModalComponent,
SplitTabComponent,
WelcomeTabComponent,
],
exports: [
CheckboxComponent,
@@ -78,6 +91,14 @@ const PROVIDERS = [
]
})
export default class AppModule {
constructor (app: AppService, config: ConfigService) {
app.ready$.subscribe(() => {
if (config.store.enableWelcomeTab) {
app.openNewTabRaw(WelcomeTabComponent)
}
})
}
static forRoot (): ModuleWithProviders {
return {
ngModule: AppModule,

View File

@@ -1,13 +1,12 @@
import { Observable, Subject, AsyncSubject } from 'rxjs'
import { takeUntil } from 'rxjs/operators'
import { Injectable, ComponentFactoryResolver, Injector } from '@angular/core'
import { Injectable } from '@angular/core'
import { BaseTabComponent } from '../components/baseTab.component'
import { Logger, LogService } from './log.service'
import { SplitTabComponent } from '../components/splitTab.component'
import { ConfigService } from './config.service'
import { HostAppService } from './hostApp.service'
import { TabRecoveryService } from './tabRecovery.service'
export declare type TabComponentType = new (...args: any[]) => BaseTabComponent
import { TabsService, TabComponentType } from './tabs.service'
class CompletionObserver {
get done$ (): Observable<void> { return this.done }
@@ -39,9 +38,11 @@ class CompletionObserver {
@Injectable({ providedIn: 'root' })
export class AppService {
tabs: BaseTabComponent[] = []
activeTab: BaseTabComponent
lastTabIndex = 0
logger: Logger
get activeTab (): BaseTabComponent { return this._activeTab }
private lastTabIndex = 0
private _activeTab: BaseTabComponent
private activeTabChange = new Subject<BaseTabComponent>()
private tabsChanged = new Subject<void>()
@@ -55,23 +56,20 @@ export class AppService {
get tabOpened$ (): Observable<BaseTabComponent> { return this.tabOpened }
get tabsChanged$ (): Observable<void> { return this.tabsChanged }
get tabClosed$ (): Observable<BaseTabComponent> { return this.tabClosed }
/** Fires once when the app is ready */
get ready$ (): Observable<void> { return this.ready }
/** @hidden */
constructor (
private componentFactoryResolver: ComponentFactoryResolver,
private config: ConfigService,
private hostApp: HostAppService,
private injector: Injector,
private tabRecovery: TabRecoveryService,
log: LogService,
private tabsService: TabsService,
) {
this.logger = log.create('app')
this.hostApp.windowCloseRequest$.subscribe(() => this.closeWindow())
this.tabRecovery.recoverTabs().then(tabs => {
for (let tab of tabs) {
this.openNewTab(tab.type, tab.options)
this.openNewTabRaw(tab.type, tab.options)
}
this.tabsChanged$.subscribe(() => {
@@ -83,50 +81,80 @@ export class AppService {
})
}
openNewTab (type: TabComponentType, inputs?: any): BaseTabComponent {
let componentFactory = this.componentFactoryResolver.resolveComponentFactory(type)
let componentRef = componentFactory.create(this.injector)
let tab = componentRef.instance
tab.hostView = componentRef.hostView
Object.assign(tab, inputs || {})
private addTabRaw (tab: BaseTabComponent) {
this.tabs.push(tab)
this.selectTab(tab)
this.tabsChanged.next()
this.tabOpened.next(tab)
tab.recoveryStateChangedHint$.subscribe(() => {
this.tabRecovery.saveTabs(this.tabs)
})
tab.titleChange$.subscribe(title => {
if (tab === this.activeTab) {
if (tab === this._activeTab) {
this.hostApp.setTitle(title)
}
})
tab.destroyed$.subscribe(() => {
let newIndex = Math.max(0, this.tabs.indexOf(tab) - 1)
this.tabs = this.tabs.filter((x) => x !== tab)
if (tab === this._activeTab) {
this.selectTab(this.tabs[newIndex])
}
this.tabsChanged.next()
this.tabClosed.next(tab)
})
}
/**
* Adds a new tab **without** wrapping it in a SplitTabComponent
* @param inputs Properties to be assigned on the new tab component instance
*/
openNewTabRaw (type: TabComponentType, inputs?: any): BaseTabComponent {
let tab = this.tabsService.create(type, inputs)
this.addTabRaw(tab)
return tab
}
/**
* Adds a new tab while wrapping it in a SplitTabComponent
* @param inputs Properties to be assigned on the new tab component instance
*/
openNewTab (type: TabComponentType, inputs?: any): BaseTabComponent {
let splitTab = this.tabsService.create(SplitTabComponent) as SplitTabComponent
let tab = this.tabsService.create(type, inputs)
splitTab.addTab(tab, null, 'r')
this.addTabRaw(splitTab)
return tab
}
selectTab (tab: BaseTabComponent) {
if (this.activeTab === tab) {
this.activeTab.emitFocused()
if (this._activeTab === tab) {
this._activeTab.emitFocused()
return
}
if (this.tabs.includes(this.activeTab)) {
this.lastTabIndex = this.tabs.indexOf(this.activeTab)
if (this.tabs.includes(this._activeTab)) {
this.lastTabIndex = this.tabs.indexOf(this._activeTab)
} else {
this.lastTabIndex = null
}
if (this.activeTab) {
this.activeTab.clearActivity()
this.activeTab.emitBlurred()
if (this._activeTab) {
this._activeTab.clearActivity()
this._activeTab.emitBlurred()
}
this.activeTab = tab
this._activeTab = tab
this.activeTabChange.next(tab)
if (this.activeTab) {
if (this._activeTab) {
setImmediate(() => {
this.activeTab.emitFocused()
this._activeTab.emitFocused()
})
this.hostApp.setTitle(this.activeTab.title)
this.hostApp.setTitle(this._activeTab.title)
}
}
/** Switches between the current tab and the previously active one */
toggleLastTab () {
if (!this.lastTabIndex || this.lastTabIndex >= this.tabs.length) {
this.lastTabIndex = 0
@@ -136,7 +164,7 @@ export class AppService {
nextTab () {
if (this.tabs.length > 1) {
let tabIndex = this.tabs.indexOf(this.activeTab)
let tabIndex = this.tabs.indexOf(this._activeTab)
if (tabIndex < this.tabs.length - 1) {
this.selectTab(this.tabs[tabIndex + 1])
} else if (this.config.store.appearance.cycleTabs) {
@@ -147,7 +175,7 @@ export class AppService {
previousTab () {
if (this.tabs.length > 1) {
let tabIndex = this.tabs.indexOf(this.activeTab)
let tabIndex = this.tabs.indexOf(this._activeTab)
if (tabIndex > 0) {
this.selectTab(this.tabs[tabIndex - 1])
} else if (this.config.store.appearance.cycleTabs) {
@@ -156,6 +184,7 @@ export class AppService {
}
}
/** @hidden */
emitTabsChanged () {
this.tabsChanged.next()
}
@@ -167,28 +196,17 @@ export class AppService {
if (checkCanClose && !await tab.canClose()) {
return
}
let newIndex = Math.max(0, this.tabs.indexOf(tab) - 1)
this.tabs = this.tabs.filter((x) => x !== tab)
tab.destroy()
if (tab === this.activeTab) {
this.selectTab(this.tabs[newIndex])
}
this.tabsChanged.next()
this.tabClosed.next(tab)
}
async duplicateTab (tab: BaseTabComponent) {
let token = await tab.getRecoveryToken()
if (!token) {
return
}
let recoveredTab = await this.tabRecovery.recoverTab(token)
if (recoveredTab) {
this.openNewTab(recoveredTab.type, recoveredTab.options)
let dup = await this.tabsService.duplicate(tab)
if (dup) {
this.addTabRaw(dup)
}
}
async closeWindow () {
async closeAllTabs () {
for (let tab of this.tabs) {
if (!await tab.canClose()) {
return
@@ -197,15 +215,19 @@ export class AppService {
for (let tab of this.tabs) {
tab.destroy()
}
this.hostApp.closeWindow()
}
/** @hidden */
emitReady () {
this.ready.next(null)
this.ready.complete()
this.hostApp.emitReady()
}
/**
* Returns an observable that fires once
* the tab's internal "process" (see [[BaseTabProcess]]) completes
*/
observeTabCompletion (tab: BaseTabComponent): Observable<void> {
if (!this.completionObservers.has(tab)) {
let observer = new CompletionObserver(tab)

View File

@@ -18,6 +18,7 @@ function isNonStructuralObjectMember (v) {
return v instanceof Object && !(v instanceof Array) && v.__nonStructural
}
/** @hidden */
export class ConfigProxy {
constructor (real: any, defaults: any) {
for (let key in defaults) {
@@ -76,16 +77,29 @@ export class ConfigProxy {
@Injectable({ providedIn: 'root' })
export class ConfigService {
/**
* Contains the actual config values
*/
store: any
/**
* Whether an app restart is required due to recent changes
*/
restartRequested: boolean
/**
* Full config file path
*/
path: string
private changed = new Subject<void>()
private _store: any
private path: string
private defaults: any
private servicesCache: { [id: string]: Function[] } = null
get changed$ (): Observable<void> { return this.changed }
/** @hidden */
constructor (
electron: ElectronService,
private hostApp: HostAppService,
@@ -129,10 +143,16 @@ export class ConfigService {
this.hostApp.broadcastConfigChange()
}
/**
* Reads config YAML as string
*/
readRaw (): string {
return yaml.safeDump(this._store)
}
/**
* Writes config YAML as string
*/
writeRaw (data: string): void {
this._store = yaml.safeLoad(data)
this.save()
@@ -140,7 +160,7 @@ export class ConfigService {
this.emitChange()
}
emitChange (): void {
private emitChange (): void {
this.changed.next()
}
@@ -148,6 +168,12 @@ export class ConfigService {
this.restartRequested = true
}
/**
* Filters a list of Angular services to only include those provided
* by plugins that are enabled
*
* @typeparam T Base provider type
*/
enabledServices<T> (services: T[]): T[] {
if (!this.servicesCache) {
this.servicesCache = {}

View File

@@ -10,6 +10,7 @@ export interface IScreen {
@Injectable({ providedIn: 'root' })
export class DockingService {
/** @hidden */
constructor (
private electron: ElectronService,
private config: ConfigService,
@@ -20,21 +21,23 @@ export class DockingService {
}
dock () {
let dockSide = this.config.store.appearance.dock
if (dockSide === 'off') {
this.hostApp.setAlwaysOnTop(false)
return
}
let display = this.electron.screen.getAllDisplays()
.filter((x) => x.id === this.config.store.appearance.dockScreen)[0]
if (!display) {
display = this.getCurrentScreen()
}
let dockSide = this.config.store.appearance.dock
let newBounds: Bounds = { x: 0, y: 0, width: 0, height: 0 }
let fill = this.config.store.appearance.dockFill
let [minWidth, minHeight] = this.hostApp.getWindow().getMinimumSize()
if (dockSide === 'off') {
this.hostApp.setAlwaysOnTop(false)
return
}
if (dockSide === 'left' || dockSide === 'right') {
newBounds.width = Math.max(minWidth, Math.round(fill * display.bounds.width))
newBounds.height = display.bounds.height
@@ -76,7 +79,7 @@ export class DockingService {
})
}
repositionWindow () {
private repositionWindow () {
let [x, y] = this.hostApp.getWindow().getPosition()
for (let screen of this.electron.screen.getAllDisplays()) {
let bounds = screen.bounds

View File

@@ -24,6 +24,7 @@ export class ElectronService {
MenuItem: typeof MenuItem
private electron: any
/** @hidden */
constructor () {
this.electron = require('electron')
this.remote = this.electron.remote
@@ -42,18 +43,9 @@ export class ElectronService {
this.MenuItem = this.remote.MenuItem
}
remoteRequire (name: string): any {
return this.remote.require(name)
}
remoteRequirePluginModule (plugin: string, module: string, globals: any): any {
return this.remoteRequire(this.remoteResolvePluginModule(plugin, module, globals))
}
remoteResolvePluginModule (plugin: string, module: string, globals: any): any {
return globals.require.resolve(`${plugin}/node_modules/${module}`)
}
/**
* Removes OS focus from Terminus' window
*/
loseFocus () {
if (process.platform === 'darwin') {
this.remote.Menu.sendActionToFirstResponder('hide:')

View File

@@ -9,13 +9,14 @@ import uuidv4 = require('uuid/v4')
export class HomeBaseService {
appVersion: string
/** @hidden */
constructor (
private electron: ElectronService,
private config: ConfigService,
) {
this.appVersion = electron.app.getVersion()
if (this.config.store.enableAnalytics) {
if (this.config.store.enableAnalytics && !this.config.store.enableWelcomeTab) {
this.enableAnalytics()
}
}

View File

@@ -16,12 +16,20 @@ export interface Bounds {
height: number
}
/**
* Provides interaction with the main process
*/
@Injectable({ providedIn: 'root' })
export class HostAppService {
platform: Platform
nodePlatform: string
/**
* Fired once the window is visible
*/
shown = new EventEmitter<any>()
isFullScreen = false
isPortable = !!process.env.PORTABLE_EXECUTABLE_FILE
private preferencesMenu = new Subject<void>()
private secondInstance = new Subject<void>()
private cliOpenDirectory = new Subject<string>()
@@ -35,29 +43,62 @@ export class HostAppService {
private logger: Logger
private windowId: number
/**
* Fired when Preferences is selected in the macOS menu
*/
get preferencesMenu$ (): Observable<void> { return this.preferencesMenu }
/**
* Fired when a second instance of Terminus is launched
*/
get secondInstance$ (): Observable<void> { return this.secondInstance }
/**
* Fired for the `terminus open` CLI command
*/
get cliOpenDirectory$ (): Observable<string> { return this.cliOpenDirectory }
/**
* Fired for the `terminus run` CLI command
*/
get cliRunCommand$ (): Observable<string[]> { return this.cliRunCommand }
/**
* Fired for the `terminus paste` CLI command
*/
get cliPaste$ (): Observable<string> { return this.cliPaste }
/**
* Fired for the `terminus profile` CLI command
*/
get cliOpenProfile$ (): Observable<string> { return this.cliOpenProfile }
/**
* Fired when another window modified the config file
*/
get configChangeBroadcast$ (): Observable<void> { return this.configChangeBroadcast }
/**
* Fired when the window close button is pressed
*/
get windowCloseRequest$ (): Observable<void> { return this.windowCloseRequest }
get windowMoved$ (): Observable<void> { return this.windowMoved }
get displayMetricsChanged$ (): Observable<void> { return this.displayMetricsChanged }
/** @hidden */
constructor (
private zone: NgZone,
private electron: ElectronService,
log: LogService,
) {
this.logger = log.create('hostApp')
this.nodePlatform = require('os').platform()
this.platform = {
win32: Platform.Windows,
darwin: Platform.macOS,
linux: Platform.Linux
}[this.nodePlatform]
}[process.platform]
this.windowId = parseInt(location.search.substring(1))
this.logger.info('Window ID:', this.windowId)
@@ -117,6 +158,9 @@ export class HostAppService {
}))
}
/**
* Returns the current remote [[BrowserWindow]]
*/
getWindow () {
return this.electron.BrowserWindow.fromId(this.windowId)
}
@@ -125,18 +169,6 @@ export class HostAppService {
this.electron.ipcRenderer.send('app:new-window')
}
getShell () {
return this.electron.shell
}
getAppPath () {
return this.electron.app.getAppPath()
}
getPath (type: string) {
return this.electron.app.getPath(type)
}
toggleFullscreen () {
let window = this.getWindow()
window.setFullScreen(!this.isFullScreen)
@@ -174,6 +206,11 @@ export class HostAppService {
this.electron.ipcRenderer.send('window-set-always-on-top', flag)
}
/**
* Sets window vibrancy mode (Windows, macOS)
*
* @param type `null`, or `fluent` when supported (Windowd only)
*/
setVibrancy (enable: boolean, type: string) {
document.body.classList.toggle('vibrant', enable)
if (this.platform === Platform.macOS) {
@@ -196,6 +233,9 @@ export class HostAppService {
this.electron.Menu.buildFromTemplate(menuDefinition).popup({})
}
/**
* Notifies other windows of config file changes
*/
broadcastConfigChange () {
this.electron.ipcRenderer.send('app:config-change')
}
@@ -212,6 +252,15 @@ export class HostAppService {
this.electron.ipcRenderer.send('window-close')
}
relaunch () {
if (this.isPortable) {
this.electron.app.relaunch({ execPath: process.env.PORTABLE_EXECUTABLE_FILE })
} else {
this.electron.app.relaunch()
}
this.electron.app.exit()
}
quit () {
this.logger.info('Quitting')
this.electron.app.quit()

View File

@@ -5,16 +5,16 @@ import { ConfigService } from '../services/config.service'
import { ElectronService } from '../services/electron.service'
export interface PartialHotkeyMatch {
id: string,
strokes: string[],
matchedLength: number,
id: string
strokes: string[]
matchedLength: number
}
const KEY_TIMEOUT = 2000
interface EventBufferEntry {
event: NativeKeyEvent,
time: number,
event: NativeKeyEvent
time: number
}
@Injectable({ providedIn: 'root' })
@@ -26,6 +26,7 @@ export class HotkeysService {
private disabledLevel = 0
private hotkeyDescriptions: IHotkeyDescription[] = []
/** @hidden */
constructor (
private zone: NgZone,
private electron: ElectronService,
@@ -51,11 +52,20 @@ export class HotkeysService {
})
}
/**
* Adds a new key event to the buffer
*
* @param name DOM event name
* @param nativeEvent event object
*/
pushKeystroke (name, nativeEvent) {
nativeEvent.event = name
this.currentKeystrokes.push({ event: nativeEvent, time: performance.now() })
}
/**
* Check the buffer for new complete keystrokes
*/
processKeystrokes () {
if (this.isEnabled()) {
this.zone.run(() => {
@@ -84,7 +94,7 @@ export class HotkeysService {
return stringifyKeySequence(this.currentKeystrokes.map(x => x.event))
}
registerGlobalHotkey () {
private registerGlobalHotkey () {
this.electron.globalShortcut.unregisterAll()
let value = this.config.store.hotkeys['toggle-window'] || []
if (typeof value === 'string') {
@@ -103,11 +113,11 @@ export class HotkeysService {
})
}
getHotkeysConfig () {
private getHotkeysConfig () {
return this.getHotkeysConfigRecursive(this.config.store.hotkeys)
}
getHotkeysConfigRecursive (branch) {
private getHotkeysConfigRecursive (branch) {
let keys = {}
for (let key in branch) {
let value = branch[key]
@@ -129,7 +139,7 @@ export class HotkeysService {
return keys
}
getCurrentFullyMatchedHotkey (): string {
private getCurrentFullyMatchedHotkey (): string {
let currentStrokes = this.getCurrentKeystrokes()
let config = this.getHotkeysConfig()
for (let id in config) {
@@ -199,85 +209,3 @@ export class HotkeysService {
).reduce((a, b) => a.concat(b))
}
}
@Injectable()
export class AppHotkeyProvider extends HotkeyProvider {
hotkeys: IHotkeyDescription[] = [
{
id: 'new-window',
name: 'New window',
},
{
id: 'toggle-window',
name: 'Toggle terminal window',
},
{
id: 'toggle-fullscreen',
name: 'Toggle fullscreen mode',
},
{
id: 'rename-tab',
name: 'Rename Tab',
},
{
id: 'close-tab',
name: 'Close tab',
},
{
id: 'toggle-last-tab',
name: 'Toggle last tab',
},
{
id: 'next-tab',
name: 'Next tab',
},
{
id: 'previous-tab',
name: 'Previous tab',
},
{
id: 'tab-1',
name: 'Tab 1',
},
{
id: 'tab-2',
name: 'Tab 2',
},
{
id: 'tab-3',
name: 'Tab 3',
},
{
id: 'tab-4',
name: 'Tab 4',
},
{
id: 'tab-5',
name: 'Tab 5',
},
{
id: 'tab-6',
name: 'Tab 6',
},
{
id: 'tab-7',
name: 'Tab 7',
},
{
id: 'tab-8',
name: 'Tab 8',
},
{
id: 'tab-9',
name: 'Tab 9',
},
{
id: 'tab-10',
name: 'Tab 10',
},
]
async provide (): Promise<IHotkeyDescription[]> {
return this.hotkeys
}
}

View File

@@ -11,13 +11,13 @@ export const altKeyName = {
}[process.platform]
export interface NativeKeyEvent {
event?: string,
altKey: boolean,
ctrlKey: boolean,
metaKey: boolean,
shiftKey: boolean,
key: string,
keyCode: string,
event?: string
altKey: boolean
ctrlKey: boolean
metaKey: boolean
shiftKey: boolean
key: string
keyCode: string
}
export function stringifyKeySequence (events: NativeKeyEvent[]): string[] {

View File

@@ -11,22 +11,20 @@ const initializeWinston = (electron: ElectronService) => {
fs.mkdirSync(logDirectory)
}
return new winston.Logger({
return winston.createLogger({
transports: [
new winston.transports.File({
level: 'debug',
filename: path.join(logDirectory, 'log.txt'),
format: winston.format.simple(),
handleExceptions: false,
json: false,
maxsize: 5242880,
maxFiles: 5,
colorize: false
}),
new winston.transports.Console({
level: 'debug',
handleExceptions: false,
json: false,
colorize: true
format: winston.format.colorize(),
})
],
exitOnError: false
@@ -39,7 +37,7 @@ export class Logger {
private name: string,
) {}
doLog (level: string, ...args: any[]) {
private doLog (level: string, ...args: any[]) {
console[level](`%c[${this.name}]`, 'color: #aaa', ...args)
if (this.winstonLogger) {
this.winstonLogger[level](...args)
@@ -57,6 +55,7 @@ export class Logger {
export class LogService {
private log: any
/** @hidden */
constructor (electron: ElectronService) {
this.log = initializeWinston(electron)
}

View File

@@ -1,11 +1,14 @@
import * as path from 'path'
import * as fs from 'mz/fs'
import { Registry } from 'rage-edit'
import { exec } from 'mz/child_process'
import { Injectable } from '@angular/core'
import { ElectronService } from './electron.service'
import { HostAppService, Platform } from './hostApp.service'
try {
var wnr = require('windows-native-registry') // tslint:disable-line
} catch (_) { } // tslint:disable-line
@Injectable({ providedIn: 'root' })
export class ShellIntegrationService {
private automatorWorkflows = ['Open Terminus here.workflow', 'Paste path into Terminus.workflow']
@@ -13,11 +16,11 @@ export class ShellIntegrationService {
private automatorWorkflowsDestination: string
private registryKeys = [
{
path: 'HKCU\\Software\\Classes\\Directory\\Background\\shell\\Open Terminus here',
path: 'Software\\Classes\\Directory\\Background\\shell\\Open Terminus here',
command: 'open "%V"'
},
{
path: 'HKCU\\Software\\Classes\\*\\shell\\Paste path into Terminus',
path: 'Software\\Classes\\*\\shell\\Paste path into Terminus',
command: 'paste "%V"'
},
]
@@ -37,7 +40,7 @@ export class ShellIntegrationService {
this.updatePaths()
}
async updatePaths (): Promise<void> {
private async updatePaths (): Promise<void> {
// Update paths in case of an update
if (this.hostApp.platform === Platform.Windows) {
if (await this.isInstalled()) {
@@ -50,20 +53,35 @@ export class ShellIntegrationService {
if (this.hostApp.platform === Platform.macOS) {
return fs.exists(path.join(this.automatorWorkflowsDestination, this.automatorWorkflows[0]))
} else if (this.hostApp.platform === Platform.Windows) {
return Registry.has(this.registryKeys[0].path)
return !!wnr.getRegistryKey(wnr.HK.CU, this.registryKeys[0].path)
}
return true
}
async install () {
const exe = process.env.PORTABLE_EXECUTABLE_FILE || this.electron.app.getPath('exe')
if (this.hostApp.platform === Platform.macOS) {
for (let wf of this.automatorWorkflows) {
await exec(`cp -r "${this.automatorWorkflowsLocation}/${wf}" "${this.automatorWorkflowsDestination}"`)
}
} else if (this.hostApp.platform === Platform.Windows) {
for (let registryKey of this.registryKeys) {
await Registry.set(registryKey.path, 'Icon', this.electron.app.getPath('exe'))
await Registry.set(registryKey.path + '\\command', '', this.electron.app.getPath('exe') + ' ' + registryKey.command)
wnr.createRegistryKey(wnr.HK.CU, registryKey.path)
wnr.createRegistryKey(wnr.HK.CU, registryKey.path + '\\command')
wnr.setRegistryValue(wnr.HK.CU, registryKey.path, 'Icon', wnr.REG.SZ, exe)
wnr.setRegistryValue(wnr.HK.CU, registryKey.path + '\\command', '', wnr.REG.SZ, exe + ' ' + registryKey.command)
}
}
}
async remove () {
if (this.hostApp.platform === Platform.macOS) {
for (let wf of this.automatorWorkflows) {
await exec(`rm -rf "${this.automatorWorkflowsDestination}/${wf}"`)
}
} else if (this.hostApp.platform === Platform.Windows) {
for (let registryKey of this.registryKeys) {
wnr.deleteRegistryKey(wnr.HK.CU, registryKey.path)
}
}
}

View File

@@ -4,6 +4,7 @@ import { BaseTabComponent } from '../components/baseTab.component'
import { Logger, LogService } from '../services/log.service'
import { ConfigService } from '../services/config.service'
/** @hidden */
@Injectable({ providedIn: 'root' })
export class TabRecoveryService {
logger: Logger

View File

@@ -0,0 +1,42 @@
import { Injectable, ComponentFactoryResolver, Injector } from '@angular/core'
import { BaseTabComponent } from '../components/baseTab.component'
import { TabRecoveryService } from './tabRecovery.service'
export declare type TabComponentType = new (...args: any[]) => BaseTabComponent
@Injectable({ providedIn: 'root' })
export class TabsService {
/** @hidden */
constructor (
private componentFactoryResolver: ComponentFactoryResolver,
private injector: Injector,
private tabRecovery: TabRecoveryService,
) { }
/**
* Instantiates a tab component and assigns given inputs
*/
create (type: TabComponentType, inputs?: any): BaseTabComponent {
let componentFactory = this.componentFactoryResolver.resolveComponentFactory(type)
let componentRef = componentFactory.create(this.injector)
let tab = componentRef.instance
tab.hostView = componentRef.hostView
Object.assign(tab, inputs || {})
return tab
}
/**
* Duplicates an existing tab instance (using the tab recovery system)
*/
async duplicate (tab: BaseTabComponent): Promise<BaseTabComponent> {
let token = await tab.getRecoveryToken()
if (!token) {
return null
}
let dup = await this.tabRecovery.recoverTab(token)
if (dup) {
return this.create(dup.type, dup.options)
}
return null
}
}

View File

@@ -6,6 +6,7 @@ import { Theme } from '../api/theme'
export class ThemesService {
private styleElement: HTMLElement = null
/** @hidden */
constructor (
private config: ConfigService,
@Inject(Theme) private themes: Theme[],
@@ -34,7 +35,7 @@ export class ThemesService {
document.querySelector('style#custom-css').innerHTML = this.config.store.appearance.css
}
applyCurrentTheme (): void {
private applyCurrentTheme (): void {
this.applyTheme(this.findCurrentTheme())
}
}

View File

@@ -3,12 +3,14 @@ import { TouchBarSegmentedControl, SegmentedControlSegment } from 'electron'
import { AppService } from './app.service'
import { ConfigService } from './config.service'
import { ElectronService } from './electron.service'
import { HostAppService } from './hostApp.service'
import { HostAppService, Platform } from './hostApp.service'
import { IToolbarButton, ToolbarButtonProvider } from '../api'
/** @hidden */
@Injectable({ providedIn: 'root' })
export class TouchbarService {
private tabsSegmentedControl: TouchBarSegmentedControl
private buttonsSegmentedControl: TouchBarSegmentedControl
private tabSegments: SegmentedControlSegment[] = []
private nsImageCache: {[id: string]: Electron.NativeImage} = {}
@@ -20,25 +22,55 @@ export class TouchbarService {
private electron: ElectronService,
private zone: NgZone,
) {
app.tabsChanged$.subscribe(() => this.update())
app.activeTabChange$.subscribe(() => this.update())
if (this.hostApp.platform !== Platform.macOS) {
return
}
app.tabsChanged$.subscribe(() => this.updateTabs())
app.activeTabChange$.subscribe(() => this.updateTabs())
let activityIconPath = `${electron.app.getAppPath()}/assets/activity.png`
let activityIcon = this.electron.nativeImage.createFromPath(activityIconPath)
app.tabOpened$.subscribe(tab => {
tab.titleChange$.subscribe(title => {
this.tabSegments[app.tabs.indexOf(tab)].label = this.shortenTitle(title)
this.tabsSegmentedControl.segments = this.tabSegments
let segment = this.tabSegments[app.tabs.indexOf(tab)]
if (segment) {
segment.label = this.shortenTitle(title)
this.tabsSegmentedControl.segments = this.tabSegments
}
})
tab.activity$.subscribe(hasActivity => {
let showIcon = this.app.activeTab !== tab && hasActivity
let segment = this.tabSegments[app.tabs.indexOf(tab)]
if (segment) {
segment.icon = showIcon ? activityIcon : null
}
})
})
}
updateTabs () {
this.tabSegments = this.app.tabs.map(tab => ({
label: this.shortenTitle(tab.title),
}))
this.tabsSegmentedControl.segments = this.tabSegments
this.tabsSegmentedControl.selectedIndex = this.app.tabs.indexOf(this.app.activeTab)
}
update () {
if (this.hostApp.platform !== Platform.macOS) {
return
}
let buttons: IToolbarButton[] = []
this.config.enabledServices(this.toolbarButtonProviders).forEach(provider => {
buttons = buttons.concat(provider.provide())
})
buttons = buttons.filter(x => !!x.touchBarNSImage)
buttons.sort((a, b) => (a.weight || 0) - (b.weight || 0))
this.tabSegments = this.app.tabs.map(tab => ({
label: this.shortenTitle(tab.title),
}))
this.tabsSegmentedControl = new this.electron.TouchBar.TouchBarSegmentedControl({
segments: this.tabSegments,
selectedIndex: this.app.tabs.indexOf(this.app.activeTab),
@@ -46,23 +78,32 @@ export class TouchbarService {
this.app.selectTab(this.app.tabs[selectedIndex])
})
})
this.buttonsSegmentedControl = new this.electron.TouchBar.TouchBarSegmentedControl({
segments: buttons.map(button => this.getButton(button)),
mode: 'buttons',
change: (selectedIndex) => this.zone.run(() => {
buttons[selectedIndex].click()
})
})
let touchBar = new this.electron.TouchBar({
items: [
this.tabsSegmentedControl,
new this.electron.TouchBar.TouchBarSpacer({ size: 'flexible' }),
new this.electron.TouchBar.TouchBarSpacer({ size: 'small' }),
...buttons.map(button => this.getButton(button))
this.buttonsSegmentedControl,
]
})
this.hostApp.setTouchBar(touchBar)
}
private getButton (button: IToolbarButton): Electron.TouchBarButton {
return new this.electron.TouchBar.TouchBarButton({
private getButton (button: IToolbarButton): Electron.SegmentedControlSegment {
return {
label: button.touchBarNSImage ? null : this.shortenTitle(button.touchBarTitle || button.title),
icon: button.touchBarNSImage ? this.getCachedNSImage(button.touchBarNSImage) : null,
click: () => this.zone.run(() => button.click()),
})
// click: () => this.zone.run(() => button.click()),
}
}
private getCachedNSImage (name: string) {

Some files were not shown because too many files have changed in this diff Show More