Compare commits

...

724 Commits

Author SHA1 Message Date
Eugene Pankov
c7bee48199 fixed zooming - fixes #3684 2021-05-13 18:36:45 +02:00
Eugene Pankov
1326fd7355 only hide on blur when docking is enabled - fixes #3782 2021-05-13 17:40:02 +02:00
Eugene Pankov
ee368a3716 fixed bell 2021-05-13 17:30:48 +02:00
Eugene Pankov
c9367d04c3 added missing dep 2021-05-13 17:30:37 +02:00
Eugene Pankov
2f63a1ebbb fixed layout with tabs on side 2021-05-13 17:06:16 +02:00
Eugene Pankov
c956ee1183 fixed css config field 2021-05-13 17:06:11 +02:00
Eugene Pankov
f76a5505ec style tweak 2021-05-13 17:02:43 +02:00
Eugene Pankov
4aafcf82e8 build fixes 2021-05-13 17:00:29 +02:00
Eugene Pankov
76ffef751c handle squirrel errors in updater 2021-05-13 16:54:27 +02:00
Eugene Pankov
5c22e22caa plugged memory leaks 2021-05-13 16:40:23 +02:00
Eugene Pankov
c98fd2042d downgraded electron/remote 2021-05-12 10:29:56 +02:00
Eugene Pankov
ac45f24bf9 fixed docs build 2021-05-12 10:21:41 +02:00
Eugene
60c85c49cc Merge pull request #3241 from Eugeny/dependabot/npm_and_yarn/terminus-core/readable-stream-3.6.0
Bump readable-stream from 2.3.7 to 3.6.0 in /terminus-core
2021-05-12 09:44:46 +02:00
Eugene
2a1b5d6a30 Merge pull request #3801 from Eugeny/dependabot/npm_and_yarn/sentry/cli-1.64.2
Bump @sentry/cli from 1.63.1 to 1.64.2
2021-05-12 09:44:15 +02:00
Eugene
931335ec31 Merge pull request #3691 from Eugeny/dependabot/npm_and_yarn/types/fs-extra-9.0.11
Bump @types/fs-extra from 9.0.9 to 9.0.11
2021-05-12 09:44:05 +02:00
Eugene
f3ddb54499 Merge pull request #3703 from Eugeny/dependabot/npm_and_yarn/app/js-yaml-4.1.0
Bump js-yaml from 4.0.0 to 4.1.0 in /app
2021-05-12 09:43:16 +02:00
Eugene
275f9e5633 Merge pull request #3792 from Eugeny/dependabot/npm_and_yarn/core-js-3.12.1
Bump core-js from 3.9.1 to 3.12.1
2021-05-12 09:42:53 +02:00
Eugene
b988c36bf9 Merge pull request #3791 from Eugeny/dependabot/npm_and_yarn/terminus-core/core-js-3.12.1
Bump core-js from 3.9.1 to 3.12.1 in /terminus-core
2021-05-12 09:42:48 +02:00
Eugene
381ee6f1b2 Merge pull request #3771 from Eugeny/dependabot/npm_and_yarn/types/node-15.0.2
Bump @types/node from 14.14.35 to 15.0.2
2021-05-12 09:41:25 +02:00
Eugene Pankov
a423447532 Merge branch 'master' of github.com:Eugeny/terminus 2021-05-12 09:39:48 +02:00
Eugene Pankov
bb386f7f8a Update electron.service.ts 2021-05-12 09:39:45 +02:00
Eugene
99a86e7ff5 Merge pull request #3739 from Eugeny/dependabot/npm_and_yarn/terminus-core/types/js-yaml-4.0.1
Bump @types/js-yaml from 4.0.0 to 4.0.1 in /terminus-core
2021-05-12 09:38:04 +02:00
Eugene
2e9d8f609e Merge pull request #3725 from Eugeny/dependabot/npm_and_yarn/terminus-ssh/strip-ansi-7.0.0
Bump strip-ansi from 6.0.0 to 7.0.0 in /terminus-ssh
2021-05-12 09:37:49 +02:00
Eugene
71e6caff0a Merge pull request #3723 from Eugeny/dependabot/npm_and_yarn/app/node-abi-2.26.0
Bump node-abi from 2.21.0 to 2.26.0 in /app
2021-05-12 09:37:19 +02:00
Eugene
235a53018e Merge pull request #3793 from Eugeny/dependabot/npm_and_yarn/eslint-7.26.0
Bump eslint from 7.22.0 to 7.26.0
2021-05-12 09:36:36 +02:00
Eugene
dd22aba099 Merge pull request #3800 from Eugeny/dependabot/npm_and_yarn/typescript-eslint/parser-4.23.0
Bump @typescript-eslint/parser from 4.18.0 to 4.23.0
2021-05-12 09:36:02 +02:00
Eugene
2db700a77f Merge pull request #3712 from Eugeny/dependabot/npm_and_yarn/app/ssri-6.0.2
[Security] Bump ssri from 6.0.1 to 6.0.2 in /app
2021-05-12 09:35:51 +02:00
Eugene Pankov
f5fdf6cf44 Merge branch 'master' of github.com:Eugeny/terminus 2021-05-12 09:35:35 +02:00
Eugene Pankov
8f02239815 Update dependabot.yml 2021-05-12 09:35:33 +02:00
Eugene
e462e207de Merge pull request #3673 from Eugeny/dependabot/npm_and_yarn/node-gyp-8.0.0
Bump node-gyp from 7.1.2 to 8.0.0
2021-05-12 09:33:53 +02:00
Eugene Pankov
24210dee38 Merge branch 'master' of github.com:Eugeny/terminus 2021-05-12 09:32:57 +02:00
Eugene Pankov
87a98288b9 bumped electron 2021-05-12 09:32:53 +02:00
Eugene
be2015a833 Merge pull request #3653 from Eugeny/dependabot/npm_and_yarn/y18n-3.2.2
[Security] Bump y18n from 3.2.1 to 3.2.2
2021-05-12 09:32:46 +02:00
Eugene
75a59769fc Merge pull request #3652 from Eugeny/dependabot/npm_and_yarn/app/y18n-3.2.2
[Security] Bump y18n from 3.2.1 to 3.2.2 in /app
2021-05-12 09:32:42 +02:00
Eugene
c28b474f24 Merge pull request #3625 from Eugeny/dependabot/npm_and_yarn/terminus-plugin-manager/semver-7.3.5
Bump semver from 7.3.4 to 7.3.5 in /terminus-plugin-manager
2021-05-12 09:32:18 +02:00
Eugene
e9ea8b0506 Merge pull request #3650 from Eugeny/dependabot/npm_and_yarn/app/rxjs-6.6.7
Bump rxjs from 6.6.6 to 6.6.7 in /app
2021-05-12 09:32:08 +02:00
Eugene
44367465cc Merge pull request #3688 from Eugeny/dependabot/npm_and_yarn/app/windows-process-tree-0.3.0
Bump windows-process-tree from 0.2.4 to 0.3.0 in /app
2021-05-12 09:31:32 +02:00
Eugene
c017c42b70 Merge pull request #3798 from Eugeny/dependabot/npm_and_yarn/postcss-8.2.15
[Security] Bump postcss from 8.2.8 to 8.2.15
2021-05-12 09:30:25 +02:00
Eugene
26117dfce0 Merge pull request #3785 from Eugeny/dependabot/npm_and_yarn/app/hosted-git-info-2.8.9
[Security] Bump hosted-git-info from 2.8.8 to 2.8.9 in /app
2021-05-12 09:30:19 +02:00
Eugene
ae809e9ee2 Merge pull request #3774 from Eugeny/dependabot/npm_and_yarn/terminus-core/ngx-perfect-scrollbar-10.1.1
Bump ngx-perfect-scrollbar from 10.1.0 to 10.1.1 in /terminus-core
2021-05-12 09:30:11 +02:00
Eugene
58516718d6 Merge pull request #3735 from Eugeny/dependabot/npm_and_yarn/typedoc-0.20.36
Bump typedoc from 0.20.32 to 0.20.36
2021-05-12 09:29:47 +02:00
dependabot-preview[bot]
9dac5cdf9d Bump js-yaml from 4.0.0 to 4.1.0 in /app
Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 4.0.0 to 4.1.0.
- [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/4.0.0...4.1.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-12 07:28:10 +00:00
dependabot-preview[bot]
dbc291ff8c Bump @types/js-yaml from 4.0.0 to 4.0.1 in /terminus-core
Bumps [@types/js-yaml](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/js-yaml) from 4.0.0 to 4.0.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/js-yaml)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-12 07:28:08 +00:00
dependabot-preview[bot]
dc5f7991b8 Bump semver from 7.3.4 to 7.3.5 in /terminus-plugin-manager
Bumps [semver](https://github.com/npm/node-semver) from 7.3.4 to 7.3.5.
- [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/v7.3.4...v7.3.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-12 07:27:56 +00:00
Eugene
df2e60150c Merge pull request #3757 from Eugeny/dependabot/add-v2-config-file
Upgrade to GitHub-native Dependabot
2021-05-12 09:27:53 +02:00
Eugene
516572f9d9 Merge pull request #3659 from Eugeny/dependabot/npm_and_yarn/terminus-core/electron/remote-1.1.0
Bump @electron/remote from 1.0.4 to 1.1.0 in /terminus-core
2021-05-12 09:27:12 +02:00
Eugene
b3cca4f789 Merge pull request #3803 from Eugeny/dependabot/npm_and_yarn/terminus-core/electron-updater-4.3.9
Bump electron-updater from 4.3.8 to 4.3.9 in /terminus-core
2021-05-12 09:26:41 +02:00
Eugene
e59ebb76ac Merge pull request #3658 from Eugeny/dependabot/npm_and_yarn/app/electron/remote-1.1.0
Bump @electron/remote from 1.0.4 to 1.1.0 in /app
2021-05-12 09:26:17 +02:00
Eugene
0476ef35bb Merge pull request #3807 from Eugeny/dependabot/npm_and_yarn/terminus-terminal/xterm-addon-ligatures-0.5.0
Bump xterm-addon-ligatures from 0.4.0 to 0.5.0 in /terminus-terminal
2021-05-12 09:16:22 +02:00
Eugene
8b3139719a Merge pull request #3806 from Eugeny/dependabot/npm_and_yarn/terminus-terminal/xterm-addon-webgl-0.11.0
Bump xterm-addon-webgl from 0.10.0 to 0.11.0 in /terminus-terminal
2021-05-12 09:16:16 +02:00
dependabot-preview[bot]
66ebc0dd71 Bump xterm-addon-webgl from 0.10.0 to 0.11.0 in /terminus-terminal
Bumps [xterm-addon-webgl](https://github.com/xtermjs/xterm.js) from 0.10.0 to 0.11.0.
- [Release notes](https://github.com/xtermjs/xterm.js/releases)
- [Commits](https://github.com/xtermjs/xterm.js/compare/0.10...0.11)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-12 07:15:22 +00:00
Eugene
11328d5880 Merge pull request #3804 from Eugeny/dependabot/npm_and_yarn/terminus-terminal/xterm-4.12.0
Bump xterm from 4.11.0 to 4.12.0 in /terminus-terminal
2021-05-12 09:13:23 +02:00
Eugene Pankov
af2fd17c34 Merge branch 'master' of github.com:Eugeny/terminus 2021-05-12 09:12:10 +02:00
Eugene Pankov
d21d019b5c install bsdtar in linux workflow 2021-05-12 09:12:07 +02:00
dependabot-preview[bot]
f4a825f67b Bump xterm-addon-ligatures from 0.4.0 to 0.5.0 in /terminus-terminal
Bumps [xterm-addon-ligatures](https://github.com/xtermjs/xterm.js) from 0.4.0 to 0.5.0.
- [Release notes](https://github.com/xtermjs/xterm.js/releases)
- [Commits](https://github.com/xtermjs/xterm.js/compare/0.4...0.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-12 04:17:53 +00:00
dependabot-preview[bot]
4ce916241a Bump xterm from 4.11.0 to 4.12.0 in /terminus-terminal
Bumps [xterm](https://github.com/xtermjs/xterm.js) from 4.11.0 to 4.12.0.
- [Release notes](https://github.com/xtermjs/xterm.js/releases)
- [Commits](https://github.com/xtermjs/xterm.js/compare/4.11.0...4.12.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-12 04:16:36 +00:00
dependabot-preview[bot]
4780a6b913 Bump electron-updater from 4.3.8 to 4.3.9 in /terminus-core
Bumps [electron-updater](https://github.com/electron-userland/electron-builder) from 4.3.8 to 4.3.9.
- [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)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-12 04:16:32 +00:00
dependabot-preview[bot]
58710cfdbe Bump @sentry/cli from 1.63.1 to 1.64.2
Bumps [@sentry/cli](https://github.com/getsentry/sentry-cli) from 1.63.1 to 1.64.2.
- [Release notes](https://github.com/getsentry/sentry-cli/releases)
- [Changelog](https://github.com/getsentry/sentry-cli/blob/master/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-cli/compare/1.63.1...1.64.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-11 04:32:05 +00:00
dependabot-preview[bot]
8a6b3a6fbb Bump @typescript-eslint/parser from 4.18.0 to 4.23.0
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 4.18.0 to 4.23.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v4.23.0/packages/parser)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-11 04:27:43 +00:00
dependabot-preview[bot]
40897c278b [Security] Bump postcss from 8.2.8 to 8.2.15
Bumps [postcss](https://github.com/postcss/postcss) from 8.2.8 to 8.2.15. **This update includes a security fix.**
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.2.8...8.2.15)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-11 04:25:17 +00:00
dependabot-preview[bot]
d54dbc3c50 Bump eslint from 7.22.0 to 7.26.0
Bumps [eslint](https://github.com/eslint/eslint) from 7.22.0 to 7.26.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v7.22.0...v7.26.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-10 04:34:59 +00:00
dependabot-preview[bot]
789ca2c635 Bump core-js from 3.9.1 to 3.12.1
Bumps [core-js](https://github.com/zloirock/core-js/tree/HEAD/packages/core-js) from 3.9.1 to 3.12.1.
- [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/commits/v3.12.1/packages/core-js)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-10 04:34:03 +00:00
dependabot-preview[bot]
eacc30bc82 Bump core-js from 3.9.1 to 3.12.1 in /terminus-core
Bumps [core-js](https://github.com/zloirock/core-js/tree/HEAD/packages/core-js) from 3.9.1 to 3.12.1.
- [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/commits/v3.12.1/packages/core-js)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-10 04:31:06 +00:00
dependabot-preview[bot]
dc7fc30d27 [Security] Bump hosted-git-info from 2.8.8 to 2.8.9 in /app
Bumps [hosted-git-info](https://github.com/npm/hosted-git-info) from 2.8.8 to 2.8.9. **This update includes a security fix.**
- [Release notes](https://github.com/npm/hosted-git-info/releases)
- [Changelog](https://github.com/npm/hosted-git-info/blob/v2.8.9/CHANGELOG.md)
- [Commits](https://github.com/npm/hosted-git-info/compare/v2.8.8...v2.8.9)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-07 18:00:47 +00:00
dependabot-preview[bot]
6de6fd8f40 Bump ngx-perfect-scrollbar from 10.1.0 to 10.1.1 in /terminus-core
Bumps [ngx-perfect-scrollbar](https://github.com/zefoy/ngx-perfect-scrollbar) from 10.1.0 to 10.1.1.
- [Release notes](https://github.com/zefoy/ngx-perfect-scrollbar/releases)
- [Commits](https://github.com/zefoy/ngx-perfect-scrollbar/compare/v10.1.0...v10.1.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-06 04:18:04 +00:00
dependabot-preview[bot]
fb9fb57a18 Bump @types/node from 14.14.35 to 15.0.2
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 14.14.35 to 15.0.2.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-05-05 04:20:09 +00:00
Eugene Pankov
e434fe5a8a linux: fixed window-app association - fixes #3720 2021-05-02 20:19:52 +02:00
Eugene Pankov
1b1127ab28 added pacman builds - fixes #3761 2021-05-02 20:02:46 +02:00
Eugene Pankov
fe8dd891b4 fixed one-off sessions not auto closing 2021-05-02 19:22:45 +02:00
Eugene Pankov
f7b603a631 fixed backtick key detection - fixes #3742 2021-05-02 16:03:36 +02:00
Eugene Pankov
44040ba54b permanent port forwards - fixes #3479, fixes #2395 2021-05-02 15:08:22 +02:00
Eugene Pankov
f87efcf5bd an option to remember private key passphrases - fixes #3689 2021-05-02 13:11:15 +02:00
dependabot-preview[bot]
e2d467046b Upgrade to GitHub-native Dependabot 2021-04-29 15:09:52 +00:00
Eugene Pankov
220ae6ccaa Merge branch 'master' of github.com:Eugeny/terminus 2021-04-25 21:06:26 +02:00
Eugene Pankov
3c6374be19 better ssh connection list management - fixes #1351 2021-04-25 21:06:23 +02:00
Eugene Pankov
d32e31d45e handle invalid pty ids in ipc 2021-04-25 20:12:49 +02:00
Eugene
d7a33dc0ce Merge pull request #3736 from Eugeny/imgbot
[ImgBot] Optimize images
2021-04-24 20:05:55 +02:00
ImgBotApp
bc736dd13a [ImgBot] Optimize images
/build/icons/Icon-MacOS-512x512@2x.png -- 188.59kb -> 165.81kb (12.08%)

Signed-off-by: ImgBotApp <ImgBotHelp@gmail.com>
2021-04-24 17:58:57 +00:00
Eugene Pankov
7cf8f8d58e ssh - added proxy command support - fixes #3722 2021-04-24 19:57:05 +02:00
Eugene Pankov
ff0cd36b6a new macOS icon - fixes #3721 2021-04-24 19:56:48 +02:00
Eugene Pankov
767bc8e56f bumped webgl context limit (fixes #3729) 2021-04-24 11:05:37 +02:00
Eugene Pankov
8801839c7a fixed misaligned tab content - fixes #3715 2021-04-24 10:57:29 +02:00
dependabot-preview[bot]
642293dbdb Bump typedoc from 0.20.32 to 0.20.36
Bumps [typedoc](https://github.com/TypeStrong/TypeDoc) from 0.20.32 to 0.20.36.
- [Release notes](https://github.com/TypeStrong/TypeDoc/releases)
- [Commits](https://github.com/TypeStrong/TypeDoc/compare/v0.20.32...v0.20.36)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-23 04:20:53 +00:00
dependabot-preview[bot]
99e3144ddf Bump strip-ansi from 6.0.0 to 7.0.0 in /terminus-ssh
Bumps [strip-ansi](https://github.com/chalk/strip-ansi) from 6.0.0 to 7.0.0.
- [Release notes](https://github.com/chalk/strip-ansi/releases)
- [Commits](https://github.com/chalk/strip-ansi/compare/v6.0.0...v7.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-22 16:29:17 +00:00
dependabot-preview[bot]
c38b684b56 Bump node-abi from 2.21.0 to 2.26.0 in /app
Bumps [node-abi](https://github.com/lgeiger/node-abi) from 2.21.0 to 2.26.0.
- [Release notes](https://github.com/lgeiger/node-abi/releases)
- [Commits](https://github.com/lgeiger/node-abi/compare/v2.21.0...v2.26.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-22 16:13:26 +00:00
dependabot-preview[bot]
f8871cb1c5 [Security] Bump ssri from 6.0.1 to 6.0.2 in /app
Bumps [ssri](https://github.com/npm/ssri) from 6.0.1 to 6.0.2. **This update includes a security fix.**
- [Release notes](https://github.com/npm/ssri/releases)
- [Changelog](https://github.com/npm/ssri/blob/v6.0.2/CHANGELOG.md)
- [Commits](https://github.com/npm/ssri/compare/v6.0.1...v6.0.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-16 21:52:56 +00:00
Eugene Pankov
7ab3238617 build fix 2021-04-16 21:18:23 +02:00
Eugene Pankov
6d89d7a8d0 lint 2021-04-16 20:54:21 +02:00
Eugene Pankov
e277c52f71 handle empty env vars - fixed #3217 2021-04-16 20:49:57 +02:00
Eugene Pankov
2cafd97751 fixed Windows font name autocomplete - fixed #3686 2021-04-16 20:43:23 +02:00
Eugene Pankov
ad78f38210 sorted plugins list 2021-04-16 20:33:11 +02:00
dependabot-preview[bot]
a647b394e5 Bump node-gyp from 7.1.2 to 8.0.0
Bumps [node-gyp](https://github.com/nodejs/node-gyp) from 7.1.2 to 8.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/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-16 18:25:29 +00:00
dependabot-preview[bot]
4ec4620cd5 Bump rxjs from 6.6.6 to 6.6.7 in /app
Bumps [rxjs](https://github.com/reactivex/rxjs) from 6.6.6 to 6.6.7.
- [Release notes](https://github.com/reactivex/rxjs/releases)
- [Changelog](https://github.com/ReactiveX/rxjs/blob/6.6.7/CHANGELOG.md)
- [Commits](https://github.com/reactivex/rxjs/compare/6.6.6...6.6.7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-16 18:24:10 +00:00
Eugene Pankov
4f32908c48 node-pty and flow control fixes - fixed #3695, fixed #3701, fixed #3696, fixed #3690 2021-04-16 20:15:39 +02:00
dependabot-preview[bot]
682b336784 Bump @types/fs-extra from 9.0.9 to 9.0.11
Bumps [@types/fs-extra](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/fs-extra) from 9.0.9 to 9.0.11.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/fs-extra)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-13 04:25:52 +00:00
dependabot-preview[bot]
0687e31d21 Bump windows-process-tree from 0.2.4 to 0.3.0 in /app
Bumps [windows-process-tree](https://github.com/Microsoft/vscode-windows-process-tree) from 0.2.4 to 0.3.0.
- [Release notes](https://github.com/Microsoft/vscode-windows-process-tree/releases)
- [Commits](https://github.com/Microsoft/vscode-windows-process-tree/commits/v0.3.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-12 04:26:09 +00:00
Eugene Pankov
8f0ba06f63 use older ubuntu runners to get a lower glibc ver dependency 2021-04-11 19:18:58 +02:00
Eugene Pankov
d221ad3078 ui tweak 2021-04-11 19:18:43 +02:00
Eugene Pankov
5b4d5efcc9 ui tweak 2021-04-08 22:46:47 +02:00
Eugene Pankov
8987cc39aa settings sidebar scroll 2021-04-08 22:45:01 +02:00
Eugene Pankov
2f2dd442ad build fix 2021-04-08 22:38:18 +02:00
dependabot-preview[bot]
2e7de08649 Bump @electron/remote from 1.0.4 to 1.1.0 in /app
Bumps [@electron/remote](https://github.com/electron/remote) from 1.0.4 to 1.1.0.
- [Release notes](https://github.com/electron/remote/releases)
- [Changelog](https://github.com/electron/remote/blob/master/.releaserc.json)
- [Commits](https://github.com/electron/remote/compare/v1.0.4...v1.1.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-08 20:28:43 +00:00
dependabot-preview[bot]
88f4c7e835 Bump @electron/remote from 1.0.4 to 1.1.0 in /terminus-core
Bumps [@electron/remote](https://github.com/electron/remote) from 1.0.4 to 1.1.0.
- [Release notes](https://github.com/electron/remote/releases)
- [Changelog](https://github.com/electron/remote/blob/master/.releaserc.json)
- [Commits](https://github.com/electron/remote/compare/v1.0.4...v1.1.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-08 20:28:25 +00:00
dependabot-preview[bot]
de3218522e [Security] Bump y18n from 3.2.1 to 3.2.2
Bumps [y18n](https://github.com/yargs/y18n) from 3.2.1 to 3.2.2. **This update includes a security fix.**
- [Release notes](https://github.com/yargs/y18n/releases)
- [Changelog](https://github.com/yargs/y18n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/yargs/y18n/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-08 20:28:20 +00:00
dependabot-preview[bot]
f7ed97b8a4 [Security] Bump y18n from 3.2.1 to 3.2.2 in /app
Bumps [y18n](https://github.com/yargs/y18n) from 3.2.1 to 3.2.2. **This update includes a security fix.**
- [Release notes](https://github.com/yargs/y18n/releases)
- [Changelog](https://github.com/yargs/y18n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/yargs/y18n/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-08 20:28:18 +00:00
Eugene Pankov
8bfc86e623 bundle size opt 2021-04-08 22:26:47 +02:00
Eugene
50b1fb2410 Merge pull request #3677 from Eugeny/all-contributors/add-starxg 2021-04-06 10:44:53 +02:00
allcontributors[bot]
327daf03ef docs: update .all-contributorsrc [skip ci] 2021-04-06 07:59:17 +00:00
allcontributors[bot]
224a72d029 docs: update README.md [skip ci] 2021-04-06 07:59:16 +00:00
Eugene Pankov
3c5615e464 build fix 2021-04-05 12:52:54 +02:00
Eugene Pankov
e99908761d new tab color and activity indicators 2021-04-05 12:47:16 +02:00
Eugene Pankov
0ff81abb0c bumped electron 2021-04-05 12:32:41 +02:00
Eugene Pankov
b4e703674b settings ui updates 2021-04-05 12:32:37 +02:00
Eugene Pankov
dc53668685 search ui tweaks 2021-04-05 11:17:13 +02:00
Eugene Pankov
2df848f4c0 exclude main process sourcemaps from asar 2021-04-05 11:10:38 +02:00
Eugene Pankov
247cf6f93e added a select-all shortcut - fixes #3081 2021-04-05 11:10:27 +02:00
Eugene Pankov
797265abb1 build fix 2021-04-04 21:18:46 +02:00
Eugene Pankov
62bdcb1af4 Merge branch 'master' of github.com:Eugeny/terminus 2021-04-04 21:15:43 +02:00
Eugene Pankov
25ae56718d mention the sync-config plugin 2021-04-04 21:15:39 +02:00
Eugene
b24978dc0e Merge pull request #3647 from Eugeny/dependabot/npm_and_yarn/app/keytar-7.6.0
Bump keytar from 7.4.0 to 7.6.0 in /app
2021-04-04 21:07:15 +02:00
Eugene
46a4df108b Merge pull request #3641 from Eugeny/dependabot/npm_and_yarn/types/fs-extra-9.0.9
Bump @types/fs-extra from 8.1.1 to 9.0.9
2021-04-04 21:03:50 +02:00
Eugene
3091e2be69 Merge pull request #3634 from Eugeny/dependabot/npm_and_yarn/terminus-ssh/run-script-os-1.1.6
Bump run-script-os from 1.1.5 to 1.1.6 in /terminus-ssh
2021-04-04 21:03:38 +02:00
Eugene
9a49e94642 Merge pull request #3622 from Eugeny/dependabot/npm_and_yarn/fortawesome/fontawesome-free-5.15.3
Bump @fortawesome/fontawesome-free from 5.15.2 to 5.15.3
2021-04-04 20:40:07 +02:00
Eugene Pankov
cf13fca835 back to official node-pty 2021-04-04 20:37:04 +02:00
Eugene Pankov
174a1bcca7 remote pty 2021-04-04 20:07:57 +02:00
Eugene Pankov
80c781a8ca make tabs always-present in DOM 2021-04-04 20:03:03 +02:00
Eugene Pankov
d71ee6b6f1 disable tray icon on linux - fixes #2471, fixes #1642 2021-04-04 19:59:23 +02:00
Eugene Pankov
3a7204c2ee style fix 2021-04-04 18:17:42 +02:00
dependabot-preview[bot]
5236956469 Bump keytar from 7.4.0 to 7.6.0 in /app
Bumps [keytar](https://github.com/atom/node-keytar) from 7.4.0 to 7.6.0.
- [Release notes](https://github.com/atom/node-keytar/releases)
- [Commits](https://github.com/atom/node-keytar/compare/v7.4.0...v7.6.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-29 04:22:05 +00:00
dependabot-preview[bot]
4dfb8df7fa Bump @types/fs-extra from 8.1.1 to 9.0.9
Bumps [@types/fs-extra](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/fs-extra) from 8.1.1 to 9.0.9.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/fs-extra)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-26 04:35:49 +00:00
dependabot-preview[bot]
61e65c7ec8 Bump run-script-os from 1.1.5 to 1.1.6 in /terminus-ssh
Bumps [run-script-os](https://github.com/charlesguse/run-script-os) from 1.1.5 to 1.1.6.
- [Release notes](https://github.com/charlesguse/run-script-os/releases)
- [Commits](https://github.com/charlesguse/run-script-os/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-25 04:19:44 +00:00
dependabot-preview[bot]
64ab172b8e Bump @fortawesome/fontawesome-free from 5.15.2 to 5.15.3
Bumps [@fortawesome/fontawesome-free](https://github.com/FortAwesome/Font-Awesome) from 5.15.2 to 5.15.3.
- [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.15.2...5.15.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-22 04:26:01 +00:00
Eugene Pankov
bd46b08c9d use @electron/remote 2021-03-20 17:12:39 +01:00
Eugene Pankov
4a97cc4383 dvorak shortcuts support - fixes #2544, fixes #2670 2021-03-20 17:12:25 +01:00
Eugene Pankov
2c11feed83 deep-clone ssh connections - fixes #3617 2021-03-20 16:24:25 +01:00
Eugene
481aa654a3 Merge pull request #3605 from Eugeny/dependabot/npm_and_yarn/app/types/node-14.14.35
Bump @types/node from 14.14.31 to 14.14.35 in /app
2021-03-20 12:43:08 +01:00
Eugene Pankov
7d1ec5b869 ui 2021-03-20 12:41:31 +01:00
Eugene Pankov
5f098ef791 bumped eslint 2021-03-20 12:41:27 +01:00
Eugene Pankov
15029066e4 Merge branch 'master' of github.com:Eugeny/terminus 2021-03-20 12:40:02 +01:00
Eugene
dbf90a5ce3 Merge pull request #3601 from Eugeny/dependabot/npm_and_yarn/patch-package-6.4.7
Bump patch-package from 6.2.2 to 6.4.7
2021-03-20 12:39:55 +01:00
Eugene Pankov
c6d4eb7083 ui 2021-03-20 12:20:48 +01:00
Eugene Pankov
e56fac03b9 fixed pkg version 2021-03-20 12:08:55 +01:00
Eugene Pankov
1132a18a0a bump ng-bootstrap 2021-03-20 12:06:10 +01:00
dependabot-preview[bot]
ebc8d846e3 Bump @types/node from 14.14.31 to 14.14.35 in /app
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 14.14.31 to 14.14.35.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-20 10:02:12 +00:00
dependabot-preview[bot]
123f68d705 Bump patch-package from 6.2.2 to 6.4.7
Bumps [patch-package](https://github.com/ds300/patch-package) from 6.2.2 to 6.4.7.
- [Release notes](https://github.com/ds300/patch-package/releases)
- [Changelog](https://github.com/ds300/patch-package/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ds300/patch-package/compare/v6.2.2...v6.4.7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-20 10:01:01 +00:00
Eugene Pankov
8f9a7539c4 Merge branch 'master' of github.com:Eugeny/terminus 2021-03-20 11:00:31 +01:00
Eugene
98d46468e5 Merge pull request #3190 from Eugeny/dependabot/npm_and_yarn/app/types/mz-2.7.3
Bump @types/mz from 0.0.32 to 2.7.3 in /app
2021-03-20 10:59:55 +01:00
Eugene
a6d5a93e6e Merge pull request #3580 from Eugeny/dependabot/npm_and_yarn/sentry/cli-1.63.1
Bump @sentry/cli from 1.63.0 to 1.63.1
2021-03-20 10:59:50 +01:00
Eugene
558ef9894c Merge pull request #3596 from Eugeny/dependabot/npm_and_yarn/app/ngx-toastr-13.2.1
Bump ngx-toastr from 13.2.0 to 13.2.1 in /app
2021-03-20 10:59:31 +01:00
Eugene
7357dc178a Merge pull request #3598 from Eugeny/dependabot/npm_and_yarn/typedoc-0.20.32
Bump typedoc from 0.20.28 to 0.20.32
2021-03-20 10:59:15 +01:00
Eugene
cd7df7c700 Merge pull request #3599 from Eugeny/dependabot/npm_and_yarn/node-abi-2.21.0
Bump node-abi from 2.20.0 to 2.21.0
2021-03-20 10:59:06 +01:00
Eugene
a4c4c93bac Merge pull request #3607 from Eugeny/dependabot/npm_and_yarn/css-loader-5.1.3
Bump css-loader from 5.0.1 to 5.1.3
2021-03-20 10:58:51 +01:00
Eugene
a97619a474 Merge pull request #3609 from Eugeny/dependabot/npm_and_yarn/types/node-14.14.35
Bump @types/node from 14.14.31 to 14.14.35
2021-03-20 10:58:43 +01:00
Eugene
cd1cac96e9 Merge pull request #3616 from Eugeny/dependabot/npm_and_yarn/webpack-5.26.3
Bump webpack from 5.18.0 to 5.26.3
2021-03-20 10:58:37 +01:00
Eugene Pankov
9861766da0 Merge branch 'master' of github.com:Eugeny/terminus 2021-03-20 10:57:13 +01:00
dependabot-preview[bot]
bcd5f3b8bf Bump webpack from 5.18.0 to 5.26.3
Bumps [webpack](https://github.com/webpack/webpack) from 5.18.0 to 5.26.3.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.18.0...v5.26.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-18 04:21:37 +00:00
dependabot-preview[bot]
3e4f2c467d Bump @types/node from 14.14.31 to 14.14.35
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 14.14.31 to 14.14.35.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-16 04:23:59 +00:00
dependabot-preview[bot]
e84270609f Bump css-loader from 5.0.1 to 5.1.3
Bumps [css-loader](https://github.com/webpack-contrib/css-loader) from 5.0.1 to 5.1.3.
- [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/v5.0.1...v5.1.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-16 04:23:00 +00:00
Eugene Pankov
62b1538462 fixed #3472 2021-03-15 08:59:22 +01:00
dependabot-preview[bot]
d6a62344b8 Bump node-abi from 2.20.0 to 2.21.0
Bumps [node-abi](https://github.com/lgeiger/node-abi) from 2.20.0 to 2.21.0.
- [Release notes](https://github.com/lgeiger/node-abi/releases)
- [Commits](https://github.com/lgeiger/node-abi/compare/v2.20.0...v2.21.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-15 04:24:56 +00:00
dependabot-preview[bot]
d2e16cd73a Bump typedoc from 0.20.28 to 0.20.32
Bumps [typedoc](https://github.com/TypeStrong/TypeDoc) from 0.20.28 to 0.20.32.
- [Release notes](https://github.com/TypeStrong/TypeDoc/releases)
- [Commits](https://github.com/TypeStrong/TypeDoc/compare/v0.20.28...v0.20.32)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-15 04:24:28 +00:00
dependabot-preview[bot]
87d3b08c37 Bump ngx-toastr from 13.2.0 to 13.2.1 in /app
Bumps [ngx-toastr](https://github.com/scttcper/ngx-toastr) from 13.2.0 to 13.2.1.
- [Release notes](https://github.com/scttcper/ngx-toastr/releases)
- [Commits](https://github.com/scttcper/ngx-toastr/compare/v13.2.0...v13.2.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-15 04:23:28 +00:00
Eugene
3a7db137c5 Merge pull request #3595 from Eugeny/imgbot
[ImgBot] Optimize images
2021-03-14 20:01:03 +01:00
ImgBotApp
da0f4e7afc [ImgBot] Optimize images
*Total -- 1,742.80kb -> 1,143.10kb (34.41%)

/docs/readme-ssh.png -- 613.63kb -> 371.43kb (39.47%)
/docs/readme-terminal.png -- 1,082.06kb -> 727.74kb (32.75%)
/terminus-terminal/src/icons/suse.svg -- 3.46kb -> 2.80kb (18.98%)
/app/assets/logo.svg -- 2.94kb -> 2.62kb (10.98%)
/build/icons/icon.svg -- 3.08kb -> 2.75kb (10.75%)
/terminus-terminal/src/icons/linux.svg -- 18.02kb -> 16.95kb (5.95%)
/terminus-terminal/src/icons/debian.svg -- 5.33kb -> 5.02kb (5.86%)
/terminus-terminal/src/icons/cmd.svg -- 0.40kb -> 0.38kb (4.85%)
/terminus-serial/src/icons/serial.svg -- 4.29kb -> 4.08kb (4.74%)
/terminus-terminal/src/icons/clink.svg -- 0.40kb -> 0.38kb (4.39%)
/terminus-terminal/src/icons/plus.svg -- 0.46kb -> 0.44kb (4.26%)
/terminus-terminal/src/icons/cmder-powershell.svg -- 0.57kb -> 0.55kb (3.08%)
/terminus-terminal/src/icons/cmder.svg -- 0.57kb -> 0.56kb (3.06%)
/terminus-terminal/src/icons/profiles.svg -- 0.67kb -> 0.65kb (2.92%)
/terminus-terminal/src/icons/ubuntu.svg -- 3.09kb -> 3.00kb (2.69%)
/terminus-terminal/src/icons/powershell.svg -- 0.66kb -> 0.64kb (2.65%)
/terminus-terminal/src/icons/powershell-core.svg -- 0.66kb -> 0.65kb (2.65%)
/terminus-terminal/src/icons/git-bash.svg -- 0.72kb -> 0.70kb (2.45%)
/terminus-terminal/src/icons/cygwin.svg -- 0.31kb -> 0.31kb (2.17%)
/terminus-terminal/src/icons/alpine.svg -- 1.46kb -> 1.44kb (1.74%)

Signed-off-by: ImgBotApp <ImgBotHelp@gmail.com>
2021-03-14 18:56:55 +00:00
Eugene Pankov
e1980a6611 updated readme 2021-03-14 19:55:59 +01:00
Eugene Pankov
08cc19946f fixed font loading in the web version 2021-03-14 14:40:36 +01:00
Eugene Pankov
f6d4a51239 proper xdg category 2021-03-14 11:51:27 +01:00
Eugene Pankov
36f77c5b63 added hex serial input/output modes 2021-03-14 11:34:58 +01:00
Eugene Pankov
3676b90c9f build fix 2021-03-13 22:09:05 +01:00
Eugene Pankov
c4204167cd make tab close button not take up extra space - fixes #3502 2021-03-13 22:08:20 +01:00
Eugene Pankov
604d7c464f fixed cycling tab reordering via hotkeys - fixes #3510 2021-03-13 21:43:36 +01:00
Eugene Pankov
e42bd11725 made progress detection optional - fixes #3472 2021-03-13 21:38:03 +01:00
Eugene Pankov
864932d663 settings ui tweak 2021-03-13 21:30:22 +01:00
Eugene Pankov
9e68c735dc added scrolling to typeahead - fixes #1178 2021-03-13 21:28:21 +01:00
Eugene Pankov
be43f8b50d disallow disabling core plugins - fixes #1990 2021-03-13 21:25:25 +01:00
Eugene Pankov
c290633e7e detect user@domain style usernames in ssh quick connect - fixes #3026 2021-03-13 21:02:49 +01:00
Eugene Pankov
d03211631a fixed #2600 2021-03-13 20:09:45 +01:00
Eugene Pankov
ca27c05f0f bumped electron 2021-03-13 20:06:42 +01:00
Eugene Pankov
62a21b03ea duplicate tab title and color when duplicating a tab - fixes #3588 2021-03-13 20:06:37 +01:00
dependabot-preview[bot]
2f7d29c523 Bump @sentry/cli from 1.63.0 to 1.63.1
Bumps [@sentry/cli](https://github.com/getsentry/sentry-cli) from 1.63.0 to 1.63.1.
- [Release notes](https://github.com/getsentry/sentry-cli/releases)
- [Changelog](https://github.com/getsentry/sentry-cli/blob/master/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-cli/compare/1.63.0...1.63.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-11 04:23:43 +00:00
Eugene Pankov
6236ee95c3 Update app.module.ts 2021-03-10 22:25:02 +01:00
Eugene Pankov
836014c270 shorter notification for copying 2021-03-10 22:08:11 +01:00
Eugene Pankov
0bf870738e option to disable dynamic tab title in profiles - fixes #3574 2021-03-10 21:36:12 +01:00
Eugene Pankov
7c1697b9cb Revert "Bump electron-is-dev from 1.2.0 to 2.0.0 in /app"
This reverts commit a241144827.
2021-03-10 21:17:42 +01:00
dependabot-preview[bot]
67190e9622 Bump readable-stream from 2.3.7 to 3.6.0 in /terminus-core
Bumps [readable-stream](https://github.com/nodejs/readable-stream) from 2.3.7 to 3.6.0.
- [Release notes](https://github.com/nodejs/readable-stream/releases)
- [Commits](https://github.com/nodejs/readable-stream/compare/v2.3.7...v3.6.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-10 19:55:59 +00:00
Eugene Pankov
c800dd6e44 Merge branch 'master' of github.com:Eugeny/terminus 2021-03-10 20:54:44 +01:00
Eugene
68e9a1f66b Merge pull request #3320 from Eugeny/dependabot/npm_and_yarn/terminus-core/ngx-perfect-scrollbar-10.1.0
Bump ngx-perfect-scrollbar from 8.0.0 to 10.1.0 in /terminus-core
2021-03-10 20:54:36 +01:00
Eugene Pankov
f925d63fb0 Merge branch 'master' of github.com:Eugeny/terminus 2021-03-10 20:51:53 +01:00
Eugene Pankov
e79fc13de9 bumped plugins 2021-03-10 20:51:50 +01:00
Eugene Pankov
0c963dcbcc expose sessionChanged$ 2021-03-10 20:51:44 +01:00
Eugene
b7b672ce9b Merge pull request #3548 from Eugeny/dependabot/npm_and_yarn/electron-builder-22.10.5
Bump electron-builder from 22.10.4 to 22.10.5
2021-03-10 20:50:33 +01:00
Eugene
4c8bb45d01 Merge pull request #3544 from Eugeny/dependabot/npm_and_yarn/graceful-fs-4.2.6 2021-03-10 20:49:11 +01:00
Eugene
d4f8a88451 Merge pull request #3525 from Eugeny/dependabot/npm_and_yarn/terminus-core/core-js-3.9.1 2021-03-10 20:49:01 +01:00
dependabot-preview[bot]
fac8fafa36 Bump electron-builder from 22.10.4 to 22.10.5
Bumps [electron-builder](https://github.com/electron-userland/electron-builder) from 22.10.4 to 22.10.5.
- [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/v22.10.4...v22.10.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-10 19:48:54 +00:00
dependabot-preview[bot]
bc854fcfff Bump graceful-fs from 4.2.4 to 4.2.6
Bumps [graceful-fs](https://github.com/isaacs/node-graceful-fs) from 4.2.4 to 4.2.6.
- [Release notes](https://github.com/isaacs/node-graceful-fs/releases)
- [Commits](https://github.com/isaacs/node-graceful-fs/compare/v4.2.4...v4.2.6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-10 19:48:51 +00:00
Eugene
ebc83b8064 Merge pull request #3375 from Eugeny/dependabot/npm_and_yarn/app/ngx-toastr-13.2.0 2021-03-10 20:48:50 +01:00
dependabot-preview[bot]
6757deab67 Bump core-js from 3.8.2 to 3.9.1 in /terminus-core
Bumps [core-js](https://github.com/zloirock/core-js/tree/HEAD/packages/core-js) from 3.8.2 to 3.9.1.
- [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/commits/v3.9.1/packages/core-js)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-10 19:48:28 +00:00
dependabot-preview[bot]
fe68d9a34e Bump ngx-toastr from 12.1.0 to 13.2.0 in /app
Bumps [ngx-toastr](https://github.com/scttcper/ngx-toastr) from 12.1.0 to 13.2.0.
- [Release notes](https://github.com/scttcper/ngx-toastr/releases)
- [Commits](https://github.com/scttcper/ngx-toastr/compare/v12.1.0...v13.2.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-10 19:48:26 +00:00
dependabot-preview[bot]
f42c3cdde4 Bump @types/mz from 0.0.32 to 2.7.3 in /app
Bumps [@types/mz](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/mz) from 0.0.32 to 2.7.3.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/mz)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-10 19:48:21 +00:00
Eugene
2840ae2aa7 Merge pull request #3546 from Eugeny/dependabot/npm_and_yarn/pug-3.0.2
Bump pug from 3.0.1 to 3.0.2
2021-03-10 20:47:19 +01:00
Eugene
b275f5311d Merge pull request #3530 from Eugeny/dependabot/npm_and_yarn/core-js-3.9.1
Bump core-js from 3.8.3 to 3.9.1
2021-03-10 20:47:09 +01:00
Eugene
4e084cdc93 Merge pull request #3559 from Eugeny/dependabot/npm_and_yarn/app/node-abi-2.21.0
Bump node-abi from 2.20.0 to 2.21.0 in /app
2021-03-10 20:46:47 +01:00
Eugene
910b207160 Merge pull request #3572 from Eugeny/dependabot/npm_and_yarn/html-loader-2.1.2
Bump html-loader from 1.3.2 to 2.1.2
2021-03-10 20:46:23 +01:00
Eugene
f54ff37010 Merge pull request #3560 from Eugeny/dependabot/npm_and_yarn/typescript-eslint/parser-4.17.0
Bump @typescript-eslint/parser from 4.14.1 to 4.17.0
2021-03-10 20:42:50 +01:00
Eugene
03d9d46a8c Merge pull request #3423 from Eugeny/dependabot/npm_and_yarn/webpack-cli-4.5.0
Bump webpack-cli from 4.4.0 to 4.5.0
2021-03-10 20:42:41 +01:00
Eugene
7111f35268 Merge pull request #3550 from Eugeny/dependabot/npm_and_yarn/sentry/electron-2.4.0
Bump @sentry/electron from 2.2.0 to 2.4.0
2021-03-10 20:42:12 +01:00
Eugene
44427ac3b6 Merge pull request #3568 from Eugeny/dependabot/npm_and_yarn/terminus-terminal/xterm-4.11.0
Bump xterm from 4.10.0 to 4.11.0 in /terminus-terminal
2021-03-10 20:42:04 +01:00
Eugene
8816910e43 Merge pull request #3567 from Eugeny/dependabot/npm_and_yarn/terminus-terminal/xterm-addon-serialize-0.5.0
Bump xterm-addon-serialize from 0.4.0 to 0.5.0 in /terminus-terminal
2021-03-10 20:41:01 +01:00
Eugene
31464ee37a Merge pull request #3566 from Eugeny/dependabot/npm_and_yarn/terminus-terminal/xterm-addon-webgl-0.10.0
Bump xterm-addon-webgl from 0.9.0 to 0.10.0 in /terminus-terminal
2021-03-10 20:40:54 +01:00
dependabot-preview[bot]
4bdb72021b Bump html-loader from 1.3.2 to 2.1.2
Bumps [html-loader](https://github.com/webpack-contrib/html-loader) from 1.3.2 to 2.1.2.
- [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/v1.3.2...v2.1.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-10 04:21:47 +00:00
dependabot-preview[bot]
7d5e70c718 Bump xterm from 4.10.0 to 4.11.0 in /terminus-terminal
Bumps [xterm](https://github.com/xtermjs/xterm.js) from 4.10.0 to 4.11.0.
- [Release notes](https://github.com/xtermjs/xterm.js/releases)
- [Commits](https://github.com/xtermjs/xterm.js/compare/4.10.0...4.11.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-10 04:18:43 +00:00
dependabot-preview[bot]
6af92c9f95 Bump xterm-addon-serialize from 0.4.0 to 0.5.0 in /terminus-terminal
Bumps xterm-addon-serialize from 0.4.0 to 0.5.0.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-10 04:18:16 +00:00
dependabot-preview[bot]
4a8fe78b07 Bump xterm-addon-webgl from 0.9.0 to 0.10.0 in /terminus-terminal
Bumps [xterm-addon-webgl](https://github.com/xtermjs/xterm.js) from 0.9.0 to 0.10.0.
- [Release notes](https://github.com/xtermjs/xterm.js/releases)
- [Commits](https://github.com/xtermjs/xterm.js/compare/0.9...0.10)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-10 04:17:54 +00:00
dependabot-preview[bot]
1aa6bc3c10 Bump @typescript-eslint/parser from 4.14.1 to 4.17.0
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 4.14.1 to 4.17.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v4.17.0/packages/parser)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-09 04:18:01 +00:00
dependabot-preview[bot]
93d74bf3cb Bump node-abi from 2.20.0 to 2.21.0 in /app
Bumps [node-abi](https://github.com/lgeiger/node-abi) from 2.20.0 to 2.21.0.
- [Release notes](https://github.com/lgeiger/node-abi/releases)
- [Commits](https://github.com/lgeiger/node-abi/compare/v2.20.0...v2.21.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-08 04:21:17 +00:00
Eugene
9e16ef5a57 Merge pull request #3555 from Eugeny/all-contributors/add-iamchating 2021-03-05 17:18:41 +03:00
allcontributors[bot]
741c77506c docs: update .all-contributorsrc [skip ci] 2021-03-05 14:17:23 +00:00
allcontributors[bot]
507cc16190 docs: update README.md [skip ci] 2021-03-05 14:17:22 +00:00
Eugene
bfeb353858 Merge pull request #3554 from iamchating/master
FIX: #3520
2021-03-05 17:17:06 +03:00
Tan, Tian
806bfef8bf FIX: #3520 2021-03-05 21:19:43 +08:00
Eugene Pankov
975b5a117d build typings before docs 2021-03-04 09:42:46 +01:00
dependabot-preview[bot]
46e4832a66 Bump @sentry/electron from 2.2.0 to 2.4.0
Bumps [@sentry/electron](https://github.com/getsentry/sentry-electron) from 2.2.0 to 2.4.0.
- [Release notes](https://github.com/getsentry/sentry-electron/releases)
- [Changelog](https://github.com/getsentry/sentry-electron/blob/master/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-electron/compare/2.2.0...2.4.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-04 04:22:48 +00:00
dependabot-preview[bot]
6ab7093cc6 Bump pug from 3.0.1 to 3.0.2
Bumps [pug](https://github.com/pugjs/pug) from 3.0.1 to 3.0.2.
- [Release notes](https://github.com/pugjs/pug/releases)
- [Commits](https://github.com/pugjs/pug/compare/pug@3.0.1...pug@3.0.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-04 04:20:52 +00:00
dependabot-preview[bot]
00cc2474cc Bump core-js from 3.8.3 to 3.9.1
Bumps [core-js](https://github.com/zloirock/core-js/tree/HEAD/packages/core-js) from 3.8.3 to 3.9.1.
- [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/commits/v3.9.1/packages/core-js)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-03 20:42:25 +00:00
dependabot-preview[bot]
4e4d02041a Bump webpack-cli from 4.4.0 to 4.5.0
Bumps [webpack-cli](https://github.com/webpack/webpack-cli) from 4.4.0 to 4.5.0.
- [Release notes](https://github.com/webpack/webpack-cli/releases)
- [Changelog](https://github.com/webpack/webpack-cli/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.4.0...webpack-cli@4.5.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-03 20:41:22 +00:00
Eugene
09ac506dd3 Merge pull request #3504 from Eugeny/dependabot/npm_and_yarn/terminus-settings/utils-decorators-1.8.1
Bump utils-decorators from 1.8.0 to 1.8.1 in /terminus-settings
2021-03-03 23:40:26 +03:00
Eugene
769ce6bc0b Merge pull request #3527 from Eugeny/dependabot/npm_and_yarn/app/rxjs-6.6.6
Bump rxjs from 6.6.3 to 6.6.6 in /app
2021-03-03 23:40:14 +03:00
Eugene
26605124c1 Merge pull request #3172 from Eugeny/dependabot/npm_and_yarn/terminus-plugin-manager/semver-7.3.4
Bump semver from 7.2.2 to 7.3.4 in /terminus-plugin-manager
2021-03-03 23:40:07 +03:00
Eugene
7465c32645 Merge pull request #3380 from Eugeny/dependabot/npm_and_yarn/tslib-2.1.0
Bump tslib from 2.0.3 to 2.1.0
2021-03-03 23:39:56 +03:00
Eugene
846ac62a7f Merge pull request #3541 from Eugeny/dependabot/npm_and_yarn/pug-code-gen-2.0.3
Bump pug-code-gen from 2.0.2 to 2.0.3
2021-03-03 23:39:49 +03:00
Eugene
eae2c5ee16 Merge pull request #3529 from Eugeny/dependabot/npm_and_yarn/typescript-3.9.9
Bump typescript from 3.9.7 to 3.9.9
2021-03-03 23:39:05 +03:00
Eugene
4fd89105e5 Merge pull request #3483 from Eugeny/dependabot/npm_and_yarn/terminus-ssh/types/node-14.14.31
Bump @types/node from 14.14.14 to 14.14.31 in /terminus-ssh
2021-03-03 23:38:56 +03:00
dependabot[bot]
87c1bef16e Bump pug-code-gen from 2.0.2 to 2.0.3
Bumps [pug-code-gen](https://github.com/pugjs/pug) from 2.0.2 to 2.0.3.
- [Release notes](https://github.com/pugjs/pug/releases)
- [Commits](https://github.com/pugjs/pug/compare/pug-code-gen@2.0.2...pug@2.0.3)

Signed-off-by: dependabot[bot] <support@github.com>
2021-03-03 20:38:54 +00:00
Eugene
eed35c2613 Merge pull request #3484 from Eugeny/dependabot/npm_and_yarn/app/types/node-14.14.31
Bump @types/node from 14.14.14 to 14.14.31 in /app
2021-03-03 23:38:44 +03:00
dependabot-preview[bot]
678f2f7a85 Bump @types/node from 14.14.14 to 14.14.31 in /app
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 14.14.14 to 14.14.31.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-03 20:37:35 +00:00
Eugene
0b1bacaf0d Merge pull request #3542 from Eugeny/dependabot/npm_and_yarn/pug-3.0.1
[Security] Bump pug from 3.0.0 to 3.0.1
2021-03-03 23:37:31 +03:00
dependabot-preview[bot]
98b5a27382 Bump @types/node from 14.14.14 to 14.14.31 in /terminus-ssh
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 14.14.14 to 14.14.31.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-03 20:37:11 +00:00
dependabot-preview[bot]
76a81b9402 Bump typescript from 3.9.7 to 3.9.9
Bumps [typescript](https://github.com/Microsoft/TypeScript) from 3.9.7 to 3.9.9.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/compare/v3.9.7...v3.9.9)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-03 20:36:37 +00:00
dependabot-preview[bot]
634b221aa3 Bump tslib from 2.0.3 to 2.1.0
Bumps [tslib](https://github.com/Microsoft/tslib) from 2.0.3 to 2.1.0.
- [Release notes](https://github.com/Microsoft/tslib/releases)
- [Commits](https://github.com/Microsoft/tslib/compare/2.0.3...2.1.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-03 20:36:17 +00:00
dependabot-preview[bot]
ffcb3e72c2 [Security] Bump pug from 3.0.0 to 3.0.1
Bumps [pug](https://github.com/pugjs/pug) from 3.0.0 to 3.0.1. **This update includes a security fix.**
- [Release notes](https://github.com/pugjs/pug/releases)
- [Commits](https://github.com/pugjs/pug/compare/pug@3.0.0...pug@3.0.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-03 20:36:17 +00:00
dependabot-preview[bot]
b4b7bdeb16 Bump semver from 7.2.2 to 7.3.4 in /terminus-plugin-manager
Bumps [semver](https://github.com/npm/node-semver) from 7.2.2 to 7.3.4.
- [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/v7.2.2...v7.3.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-03 20:36:04 +00:00
Eugene
21daa4aa18 Merge pull request #3486 from Eugeny/dependabot/npm_and_yarn/types/node-14.14.31
Bump @types/node from 14.14.14 to 14.14.31
2021-03-03 23:35:51 +03:00
Eugene
867dbcddcc Merge pull request #3482 from Eugeny/dependabot/npm_and_yarn/terminus-terminal/slugify-1.4.7
Bump slugify from 1.4.6 to 1.4.7 in /terminus-terminal
2021-03-03 23:35:08 +03:00
Eugene
b906dbd8d6 Merge pull request #3189 from Eugeny/dependabot/npm_and_yarn/terminus-core/uuid-8.3.2
Bump uuid from 8.2.0 to 8.3.2 in /terminus-core
2021-03-03 23:34:59 +03:00
Eugene
e5c7d0649f Merge pull request #3347 from Eugeny/dependabot/npm_and_yarn/terminus-ssh/run-script-os-1.1.5
Bump run-script-os from 1.1.3 to 1.1.5 in /terminus-ssh
2021-03-03 23:34:48 +03:00
Eugene
55286bc7e7 Merge pull request #3429 from Eugeny/dependabot/npm_and_yarn/sass-loader-11.0.1
Bump sass-loader from 10.1.1 to 11.0.1
2021-03-03 23:34:40 +03:00
Eugene Pankov
359e41f884 Merge branch 'dependabot/npm_and_yarn/typedoc-0.20.28' 2021-03-03 21:33:49 +01:00
Eugene Pankov
cc93578ada typedoc fixes 2021-03-03 21:33:37 +01:00
dependabot-preview[bot]
2e54fa317c Bump @types/node from 14.14.14 to 14.14.31
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 14.14.14 to 14.14.31.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-03 20:26:55 +00:00
dependabot-preview[bot]
c3bd725ce8 Bump ngx-perfect-scrollbar from 8.0.0 to 10.1.0 in /terminus-core
Bumps [ngx-perfect-scrollbar](https://github.com/zefoy/ngx-perfect-scrollbar) from 8.0.0 to 10.1.0.
- [Release notes](https://github.com/zefoy/ngx-perfect-scrollbar/releases)
- [Commits](https://github.com/zefoy/ngx-perfect-scrollbar/compare/v8.0.0...v10.1.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-03 20:25:49 +00:00
Eugene
18f69c5527 Merge pull request #3485 from Eugeny/dependabot/npm_and_yarn/app/serialport-9.0.7
Bump serialport from 9.0.4 to 9.0.7 in /app
2021-03-03 23:24:38 +03:00
Eugene
0102a2a61b Merge pull request #3301 from Eugeny/dependabot/npm_and_yarn/terminus-core/types/js-yaml-4.0.0
Bump @types/js-yaml from 3.12.5 to 4.0.0 in /terminus-core
2021-03-03 23:24:31 +03:00
Eugene
1de709561c Merge pull request #3381 from Eugeny/dependabot/npm_and_yarn/types/js-yaml-4.0.0
Bump @types/js-yaml from 3.12.5 to 4.0.0
2021-03-03 23:24:26 +03:00
Eugene
9f985ee8f0 Merge pull request #3287 from Eugeny/dependabot/npm_and_yarn/terminus-core/js-yaml-4.0.0
Bump js-yaml from 3.14.0 to 4.0.0 in /terminus-core
2021-03-03 23:24:20 +03:00
Eugene
1a35ed3c73 Merge pull request #3528 from Eugeny/dependabot/npm_and_yarn/app/electron-is-dev-2.0.0
Bump electron-is-dev from 1.2.0 to 2.0.0 in /app
2021-03-03 23:23:53 +03:00
dependabot-preview[bot]
a241144827 Bump electron-is-dev from 1.2.0 to 2.0.0 in /app
Bumps [electron-is-dev](https://github.com/sindresorhus/electron-is-dev) from 1.2.0 to 2.0.0.
- [Release notes](https://github.com/sindresorhus/electron-is-dev/releases)
- [Commits](https://github.com/sindresorhus/electron-is-dev/compare/v1.2.0...v2.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-03 20:04:32 +00:00
dependabot-preview[bot]
18e341f886 Bump js-yaml from 3.14.0 to 4.0.0 in /terminus-core
Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 3.14.0 to 4.0.0.
- [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.14.0...4.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-03 20:03:52 +00:00
Eugene
3182d4428d Merge pull request #3321 from Eugeny/dependabot/npm_and_yarn/app/glasstron-0.0.7
Bump glasstron from 0.0.6 to 0.0.7 in /app
2021-03-03 23:02:28 +03:00
Eugene
6dfcb9422a Merge pull request #3379 from Eugeny/dependabot/npm_and_yarn/fortawesome/fontawesome-free-5.15.2
Bump @fortawesome/fontawesome-free from 5.15.1 to 5.15.2
2021-03-03 22:59:20 +03:00
Eugene Pankov
ad5993b94f bumepd node-abi 2021-03-03 20:58:33 +01:00
Eugene Pankov
eb9826fb2a macos: only query default shell once 2021-03-02 22:55:06 +01:00
Eugene Pankov
1c81baa6f2 added docking space adjustment - fixes #3524 2021-03-02 22:53:26 +01:00
Eugene Pankov
e07c5db0a8 let themes specify macos titlebar buttons offset - fixes #3507 2021-03-02 22:41:17 +01:00
Eugene Pankov
b93989d02b remove titlebar padding in fullscreen - fixes #3532 2021-03-02 22:12:15 +01:00
Eugene Pankov
15bfde6077 Update linux.yml 2021-03-02 22:01:42 +01:00
Eugene Pankov
4243e79a11 patch node-abi in linux builds 2021-03-02 21:58:15 +01:00
Eugene Pankov
eb49001614 node-abi patches 2021-03-02 15:58:36 +01:00
Eugene
3aaa670400 Merge pull request #3535 from Eugeny/all-contributors/add-clarkwang 2021-03-02 13:03:25 +03:00
allcontributors[bot]
5371b2d1a6 docs: update .all-contributorsrc [skip ci] 2021-03-02 09:13:12 +00:00
allcontributors[bot]
e46281a9a7 docs: update README.md [skip ci] 2021-03-02 09:13:11 +00:00
Eugene
9d4aa179a0 Merge pull request #3534 from clarkwang/hotkeys-for-tab-11-20
fixes #3500: add hotkey support for Tabs 11~20
2021-03-02 12:12:59 +03:00
Clark Wang
20118afd1f fixes #3500: add hotkey support for Tabs 11~20 2021-03-02 16:57:40 +08:00
dependabot-preview[bot]
b29daac3c6 Bump @types/js-yaml from 3.12.5 to 4.0.0
Bumps [@types/js-yaml](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/js-yaml) from 3.12.5 to 4.0.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/js-yaml)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-02 08:56:51 +00:00
dependabot-preview[bot]
8ba9e8b210 Bump @types/js-yaml from 3.12.5 to 4.0.0 in /terminus-core
Bumps [@types/js-yaml](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/js-yaml) from 3.12.5 to 4.0.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/js-yaml)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-02 08:55:39 +00:00
Eugene
f3f3edfbb6 Merge pull request #3526 from Eugeny/dependabot/npm_and_yarn/terminus-core/electron-updater-4.3.8
Bump electron-updater from 4.3.5 to 4.3.8 in /terminus-core
2021-03-02 11:54:23 +03:00
Eugene Pankov
472cb18a16 Merge branch 'master' of github.com:Eugeny/terminus 2021-03-02 09:52:51 +01:00
Eugene Pankov
7c8d8ebc81 ui tweaks 2021-03-02 09:52:48 +01:00
Eugene Pankov
18fc0fa886 bumped electron to stable 2021-03-02 09:52:41 +01:00
dependabot-preview[bot]
5a90c246b9 Bump rxjs from 6.6.3 to 6.6.6 in /app
Bumps [rxjs](https://github.com/reactivex/rxjs) from 6.6.3 to 6.6.6.
- [Release notes](https://github.com/reactivex/rxjs/releases)
- [Changelog](https://github.com/ReactiveX/rxjs/blob/6.6.6/CHANGELOG.md)
- [Commits](https://github.com/reactivex/rxjs/compare/6.6.3...6.6.6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-02 04:16:46 +00:00
dependabot-preview[bot]
9bc31556f2 Bump electron-updater from 4.3.5 to 4.3.8 in /terminus-core
Bumps [electron-updater](https://github.com/electron-userland/electron-builder) from 4.3.5 to 4.3.8.
- [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)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-02 04:16:22 +00:00
dependabot-preview[bot]
2c81491825 Bump @fortawesome/fontawesome-free from 5.15.1 to 5.15.2
Bumps [@fortawesome/fontawesome-free](https://github.com/FortAwesome/Font-Awesome) from 5.15.1 to 5.15.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.15.1...5.15.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-01 20:16:43 +00:00
dependabot-preview[bot]
9ed18d965c Bump glasstron from 0.0.6 to 0.0.7 in /app
Bumps [glasstron](https://github.com/AryToNeX/Glasstron) from 0.0.6 to 0.0.7.
- [Release notes](https://github.com/AryToNeX/Glasstron/releases)
- [Commits](https://github.com/AryToNeX/Glasstron/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-01 20:15:11 +00:00
Eugene
b4f76847bf Merge pull request #3425 from Eugeny/dependabot/npm_and_yarn/electron-rebuild-2.3.5
Bump electron-rebuild from 2.3.4 to 2.3.5
2021-03-01 23:03:26 +03:00
Eugene
b9bcb14dd7 Merge pull request #3466 from Eugeny/dependabot/npm_and_yarn/app/keytar-7.4.0
Bump keytar from 7.3.0 to 7.4.0 in /app
2021-03-01 23:03:05 +03:00
Eugene
ee3e17981b Merge pull request #3503 from Eugeny/dependabot/npm_and_yarn/app/zone.js-0.11.4
Bump zone.js from 0.11.3 to 0.11.4 in /app
2021-03-01 23:02:37 +03:00
Eugene
415d833ae6 Merge pull request #3515 from Eugeny/dependabot/npm_and_yarn/sentry/cli-1.63.0
Bump @sentry/cli from 1.61.0 to 1.63.0
2021-03-01 23:02:13 +03:00
Eugene Pankov
ed9117670e split fpm options 2021-02-28 12:34:49 +01:00
Eugene Pankov
0ecd47346d Merge branch 'master' of github.com:Eugeny/terminus 2021-02-28 12:15:27 +01:00
Eugene Pankov
bc0024ec06 disable packaging build-id links - fixes #3523 2021-02-28 12:15:25 +01:00
dependabot-preview[bot]
bdec20f7c7 Bump @sentry/cli from 1.61.0 to 1.63.0
Bumps [@sentry/cli](https://github.com/getsentry/sentry-cli) from 1.61.0 to 1.63.0.
- [Release notes](https://github.com/getsentry/sentry-cli/releases)
- [Changelog](https://github.com/getsentry/sentry-cli/blob/master/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-cli/compare/1.61.0...1.63.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-26 04:22:23 +00:00
dependabot-preview[bot]
45ebe3caf9 Bump utils-decorators from 1.8.0 to 1.8.1 in /terminus-settings
Bumps [utils-decorators](https://github.com/vlio20/utils-decorators) from 1.8.0 to 1.8.1.
- [Release notes](https://github.com/vlio20/utils-decorators/releases)
- [Commits](https://github.com/vlio20/utils-decorators/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-24 04:17:51 +00:00
dependabot-preview[bot]
7315bc8d8b Bump zone.js from 0.11.3 to 0.11.4 in /app
Bumps [zone.js](https://github.com/angular/angular/tree/HEAD/packages/zone.js) from 0.11.3 to 0.11.4.
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/master/packages/zone.js/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/zone.js-0.11.4/packages/zone.js)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-24 04:17:15 +00:00
Eugene
a969dc1ea4 use yarn in HACKING.md 2021-02-23 13:51:48 +01:00
dependabot-preview[bot]
2733dc69be Bump typedoc from 0.18.0 to 0.20.28
Bumps [typedoc](https://github.com/TypeStrong/TypeDoc) from 0.18.0 to 0.20.28.
- [Release notes](https://github.com/TypeStrong/TypeDoc/releases)
- [Commits](https://github.com/TypeStrong/TypeDoc/compare/v0.18.0...v0.20.28)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-23 04:24:34 +00:00
Eugene Pankov
bb86848cd3 Merge branch 'master' of github.com:Eugeny/terminus 2021-02-22 11:22:25 +01:00
Eugene
e844ad6063 Merge pull request #3491 from Eugeny/all-contributors/add-VectorKappa 2021-02-22 12:58:48 +03:00
allcontributors[bot]
a096a691cc docs: update .all-contributorsrc [skip ci] 2021-02-22 09:58:08 +00:00
allcontributors[bot]
a28e25e96a docs: update README.md [skip ci] 2021-02-22 09:58:07 +00:00
Eugene
a09ce13709 Merge pull request #3489 from VectorKappa/master
Add Nord theme
2021-02-22 12:57:28 +03:00
VectorKappa
123d8ceb5f Add Nord theme 2021-02-22 09:34:36 +01:00
dependabot-preview[bot]
c0155c8d4e Bump serialport from 9.0.4 to 9.0.7 in /app
Bumps [serialport](https://github.com/serialport/node-serialport) from 9.0.4 to 9.0.7.
- [Release notes](https://github.com/serialport/node-serialport/releases)
- [Changelog](https://github.com/serialport/node-serialport/blob/master/CHANGELOG.md)
- [Commits](https://github.com/serialport/node-serialport/compare/@serialport/bindings@9.0.4...v9.0.7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-22 04:18:38 +00:00
dependabot-preview[bot]
fcda35b02e Bump slugify from 1.4.6 to 1.4.7 in /terminus-terminal
Bumps [slugify](https://github.com/simov/slugify) from 1.4.6 to 1.4.7.
- [Release notes](https://github.com/simov/slugify/releases)
- [Commits](https://github.com/simov/slugify/compare/v1.4.6...v1.4.7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-22 04:16:20 +00:00
Eugene Pankov
9d6a1031da more responsive css editing 2021-02-20 19:53:27 +01:00
Eugene Pankov
c119d3283e fixed #3464 2021-02-20 19:43:21 +01:00
dependabot-preview[bot]
3667fb45ee Bump keytar from 7.3.0 to 7.4.0 in /app
Bumps [keytar](https://github.com/atom/node-keytar) from 7.3.0 to 7.4.0.
- [Release notes](https://github.com/atom/node-keytar/releases)
- [Commits](https://github.com/atom/node-keytar/compare/v7.3.0...v7.4.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-16 04:16:55 +00:00
Eugene Pankov
92d34343f1 fixed missing serial settings tab 2021-02-15 16:08:55 +01:00
Eugene Pankov
8afad944b7 Merge branch 'master' of https://github.com/Eugeny/terminus 2021-02-14 13:07:56 +01:00
Eugene Pankov
707d077eb2 fixed winpty input - fixes #3397 2021-02-13 15:05:29 +01:00
Eugene Pankov
92eabab509 cleanup 2021-02-13 14:53:19 +01:00
Eugene Pankov
888cfc6548 fixed windows build 2021-02-13 14:10:56 +01:00
Eugene Pankov
9cb10c3e21 tweaked plugins ui 2021-02-13 13:53:25 +01:00
Eugene Pankov
661d5af9ba casing 2021-02-13 13:40:05 +01:00
Eugene Pankov
26429bf209 removed toolbar buttons from touchbar 2021-02-13 13:25:46 +01:00
Eugene Pankov
4779c41f48 bumped electron 2021-02-13 13:16:55 +01:00
Eugene Pankov
b11eda8653 bumped electron 2021-02-13 13:04:41 +01:00
Eugene Pankov
23bff8750c added static/dynamic tab size setting - fixes #3426 2021-02-13 12:55:55 +01:00
Eugene Pankov
aab1ae3ceb reconnect hotkey - fixes #3344 2021-02-13 12:49:07 +01:00
Eugene Pankov
9b5b5a9d00 re-fixed session restarting 2021-02-13 12:47:21 +01:00
Eugene Pankov
9c87cf3f3a fixed tabs on side with compact theme 2021-02-13 12:42:23 +01:00
Eugene Pankov
a8c7134218 fixed SSH reconnection behaviour - fixed #3446, fixed #3442 2021-02-13 12:42:15 +01:00
Eugene Pankov
9734830a74 web demo fixes 2021-02-13 12:14:14 +01:00
Eugene Pankov
5fa056751d bumped angular 2021-02-13 12:14:09 +01:00
Eugene Pankov
6fdccd0a02 cleanup webpack configs 2021-02-13 12:11:38 +01:00
dependabot-preview[bot]
41ee7b7bbf Bump sass-loader from 10.1.1 to 11.0.1
Bumps [sass-loader](https://github.com/webpack-contrib/sass-loader) from 10.1.1 to 11.0.1.
- [Release notes](https://github.com/webpack-contrib/sass-loader/releases)
- [Changelog](https://github.com/webpack-contrib/sass-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/sass-loader/compare/v10.1.1...v11.0.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-09 04:22:04 +00:00
dependabot-preview[bot]
a755fdaa4e Bump electron-rebuild from 2.3.4 to 2.3.5
Bumps [electron-rebuild](https://github.com/electron/electron-rebuild) from 2.3.4 to 2.3.5.
- [Release notes](https://github.com/electron/electron-rebuild/releases)
- [Changelog](https://github.com/electron/electron-rebuild/blob/master/.releaserc.json)
- [Commits](https://github.com/electron/electron-rebuild/compare/v2.3.4...v2.3.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-08 04:25:07 +00:00
Eugene
1149d68d1c Merge pull request #3243 from Eugeny/dependabot/npm_and_yarn/https-proxy-agent-2.2.4
[Security] Bump https-proxy-agent from 2.0.0 to 2.2.4
2021-02-07 16:33:41 +01:00
Eugene
1d92a3f89d Merge pull request #3242 from Eugeny/dependabot/npm_and_yarn/tar-2.2.2
[Security] Bump tar from 2.2.1 to 2.2.2
2021-02-07 16:33:25 +01:00
Eugene
3557345d70 Merge pull request #3222 from Eugeny/dependabot/npm_and_yarn/terminus-plugin-manager/axios-0.21.1
[Security] Bump axios from 0.19.2 to 0.21.1 in /terminus-plugin-manager
2021-02-07 16:33:06 +01:00
Eugene
86ebdd92b4 Merge pull request #3221 from Eugeny/dependabot/npm_and_yarn/terminus-core/axios-0.21.1
[Security] Bump axios from 0.19.2 to 0.21.1 in /terminus-core
2021-02-07 16:32:59 +01:00
Eugene
4764ec8249 Merge pull request #3239 from Eugeny/dependabot/npm_and_yarn/tough-cookie-2.3.4
[Security] Bump tough-cookie from 2.3.2 to 2.3.4
2021-02-07 16:32:49 +01:00
Eugene Pankov
b1752bd0b4 updated cwd settings UI 2021-02-07 13:44:17 +01:00
Eugene Pankov
1e697a952a upgraded xterm.js 2021-02-07 13:44:08 +01:00
Eugene Pankov
6bad2a2167 cache dscl output 2021-02-07 13:43:58 +01:00
Eugene Pankov
61a46e3b4a lint 2021-02-07 13:15:24 +01:00
Eugene Pankov
cba90cec0a better error messages for X11 forwarding issues 2021-02-07 12:49:34 +01:00
Eugene Pankov
7583d92747 set terminus to use built-in graphics by default - fixes #657 2021-02-07 12:49:22 +01:00
Eugene Pankov
e2b99d71ad lint 2021-02-06 17:47:17 +01:00
dependabot-preview[bot]
c829daac41 [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 a security fix.**
- [Release notes](https://github.com/npm/node-tar/releases)
- [Changelog](https://github.com/npm/node-tar/blob/master/CHANGELOG.md)
- [Commits](https://github.com/npm/node-tar/compare/v2.2.1...v2.2.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-06 15:47:12 +00:00
Eugene Pankov
aac38fa190 CWD detection on windows where possible 2021-02-06 16:45:38 +01:00
Eugene Pankov
7098622c8f bumped electron 2021-02-06 11:20:34 +01:00
Eugene Pankov
8695003c74 lint 2021-02-01 11:40:49 +01:00
Eugene Pankov
43a27a7b7c serial newline modes 2021-01-31 20:07:26 +01:00
Eugene Pankov
dd2d2ce20d Update tsconfig.json 2021-01-31 19:33:33 +01:00
Eugene Pankov
73574374f0 readline input mode for serial terminals - #3099, #2661 2021-01-31 19:33:30 +01:00
Eugene Pankov
5bd1bfd565 better editor ts support 2021-01-31 18:20:58 +01:00
Eugene Pankov
0611afa8b5 better session handlers behaviour, added serial auto-reconnection logic - #3099 2021-01-31 18:20:39 +01:00
Eugene Pankov
91c9e8affd bumped angular 2021-01-28 22:01:42 +01:00
Eugene Pankov
322ffc5847 margin fix 2021-01-28 21:55:29 +01:00
Eugene Pankov
21084b5d24 bumped js-yaml 2021-01-28 21:52:11 +01:00
dependabot-preview[bot]
4c840a0db1 [Security] Bump https-proxy-agent from 2.0.0 to 2.2.4
Bumps [https-proxy-agent](https://github.com/TooTallNate/node-https-proxy-agent) from 2.0.0 to 2.2.4. **This update includes security fixes.**
- [Release notes](https://github.com/TooTallNate/node-https-proxy-agent/releases)
- [Commits](https://github.com/TooTallNate/node-https-proxy-agent/compare/2.0.0...2.2.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-28 20:48:14 +00:00
dependabot-preview[bot]
3b69172f62 Bump uuid from 8.2.0 to 8.3.2 in /terminus-core
Bumps [uuid](https://github.com/uuidjs/uuid) from 8.2.0 to 8.3.2.
- [Release notes](https://github.com/uuidjs/uuid/releases)
- [Changelog](https://github.com/uuidjs/uuid/blob/master/CHANGELOG.md)
- [Commits](https://github.com/uuidjs/uuid/compare/v8.2.0...v8.3.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-28 20:48:05 +00:00
Eugene Pankov
e0efb4073a bumped eslint 2021-01-28 21:46:31 +01:00
Eugene Pankov
c42b62afe6 bumped deps 2021-01-28 21:11:53 +01:00
Eugene Pankov
e2b11c83d5 fixed cli args handling 2021-01-28 21:11:47 +01:00
Eugene Pankov
891fa5770a Update electron-builder.yml 2021-01-28 18:45:09 +01:00
Eugene Pankov
6b395cc2b3 fixed windows native module import 2021-01-28 18:20:45 +01:00
Eugene Pankov
448a1a094f fixed macOS native module builds 2021-01-27 00:26:48 +01:00
Eugene Pankov
788dd61a13 exclude native modules from app.asar and sign them 2021-01-26 15:29:18 +01:00
Eugene Pankov
467684d9ab Update api.ts 2021-01-25 21:35:00 +01:00
Eugene Pankov
5069070040 added a 'copy current path' hotkey and context menu item - fixes #2586 2021-01-25 17:30:44 +01:00
Eugene Pankov
ecf5297bc3 Merge branch 'master' of github.com:Eugeny/terminus 2021-01-24 19:27:42 +01:00
Eugene Pankov
78bd90ac55 fixed window re-focusing on linux 2021-01-24 19:27:36 +01:00
Eugene Pankov
712589eb93 fixed #1510 2021-01-24 19:06:51 +01:00
Eugene Pankov
f103e71285 better handling of CLI args - fixes #1436 2021-01-24 19:06:41 +01:00
Eugene Pankov
0cf883cc4a bumped electron 2021-01-24 13:58:47 +01:00
Eugene Pankov
2b0ad0d558 ssh: 15s default keepalive interval 2021-01-24 13:33:54 +01:00
Eugene Pankov
67bacb9dd3 ssh: better session close and reconnect behaviours - fixes #3351, fixes #3010, fixes #3276, fixes #3074, fixes #2825, fixes #3285 2021-01-24 13:28:59 +01:00
Eugene Pankov
d0a597634d ssh: fixed clearing jump host in connection settings 2021-01-24 13:08:07 +01:00
Eugene Pankov
322014c409 Merge branch 'master' of github.com:Eugeny/terminus 2021-01-24 12:43:02 +01:00
Eugene Pankov
c751a8725b rollback node-pty to pre-napi state 2021-01-24 12:42:59 +01:00
Eugene Pankov
5417efe558 ssh: blacklist broken kex algorithms 2021-01-24 11:26:43 +01:00
Eugene
bf356fcd19 Merge pull request #3362 from mi544/readme-fix
Removes unnecessary asterisks from README
2021-01-22 09:37:05 +01:00
Maksim Verkhoturov
10ee66b9dd removes unnecessary asterisks 2021-01-21 15:45:37 -07:00
dependabot-preview[bot]
6545a2fda6 Bump run-script-os from 1.1.3 to 1.1.5 in /terminus-ssh
Bumps [run-script-os](https://github.com/charlesguse/run-script-os) from 1.1.3 to 1.1.5.
- [Release notes](https://github.com/charlesguse/run-script-os/releases)
- [Commits](https://github.com/charlesguse/run-script-os/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-18 04:31:15 +00:00
Eugene
763da0d80c Merge pull request #3310 from Eugeny/dependabot/npm_and_yarn/app/npm-6.14.11
Bump npm from 6.14.10 to 6.14.11 in /app
2021-01-15 15:12:16 +01:00
Eugene
8d46bb2181 Merge pull request #3290 from Eugeny/dependabot/npm_and_yarn/terminus-core/core-js-3.8.2
Bump core-js from 3.7.0 to 3.8.2 in /terminus-core
2021-01-15 15:12:05 +01:00
Eugene Pankov
fe936c7726 fixed #3333 - duplicate color schemes 2021-01-14 09:48:58 +01:00
Eugene Pankov
2f3e32990a Update macos.yml 2021-01-13 13:52:23 +01:00
Eugene Pankov
22344f8d54 Update macos.yml 2021-01-13 10:50:34 +01:00
Eugene Pankov
f6d37a39f4 Update macos.yml 2021-01-12 18:20:17 +01:00
dependabot-preview[bot]
0e4c60ad4b Bump npm from 6.14.10 to 6.14.11 in /app
Bumps [npm](https://github.com/npm/cli) from 6.14.10 to 6.14.11.
- [Release notes](https://github.com/npm/cli/releases)
- [Changelog](https://github.com/npm/cli/blob/v6.14.11/CHANGELOG.md)
- [Commits](https://github.com/npm/cli/compare/v6.14.10...v6.14.11)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-12 17:01:34 +00:00
dependabot-preview[bot]
e8c2171d8f Bump core-js from 3.7.0 to 3.8.2 in /terminus-core
Bumps [core-js](https://github.com/zloirock/core-js) from 3.7.0 to 3.8.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/v3.7.0...v3.8.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-12 17:01:01 +00:00
Eugene Pankov
f7a5be2c67 downgraded electron 2021-01-12 17:59:13 +01:00
Eugene Pankov
39fa0424a6 handle auto-updater errors 2021-01-09 18:22:58 +01:00
Eugene Pankov
bcb1b6a13b fixed tab scrolling 2021-01-09 17:48:31 +01:00
Eugene Pankov
a19f35ac44 fixed macos builds 2021-01-09 17:30:23 +01:00
Eugene Pankov
ea92f1a700 Revert "vibrancy fixes"
This reverts commit a8d78ce185.
2021-01-09 17:29:37 +01:00
Eugene Pankov
b5701cf9f9 fixed linux crashes 2021-01-09 17:29:34 +01:00
Eugene Pankov
4742530cf3 fixed invisible tab bar on the bottom in full-titlebar mode - fixes #3191 2021-01-09 17:11:05 +01:00
Eugene Pankov
a8d78ce185 vibrancy fixes 2021-01-09 17:02:01 +01:00
Eugene Pankov
bba1eaccbe fixed hotkeys page crash - fixes #3311 2021-01-09 16:15:20 +01:00
Eugene Pankov
cd6d05aa69 Merge branch 'master' of github.com:Eugeny/terminus 2021-01-09 15:38:58 +01:00
Eugene Pankov
412403c72a updated glasstron 2021-01-09 15:38:55 +01:00
Eugene
93ae907dd1 Merge pull request #3304 from Eugeny/all-contributors/add-frauhottelmann 2021-01-06 10:34:38 +01:00
allcontributors[bot]
ce24b9cc52 docs: update .all-contributorsrc [skip ci] 2021-01-06 09:32:42 +00:00
allcontributors[bot]
dc68372d76 docs: update README.md [skip ci] 2021-01-06 09:32:40 +00:00
Eugene
e0fe125cf2 Merge pull request #3303 from frauhottelmann/master
add baudrate 1500000
2021-01-06 10:32:21 +01:00
frauhottelmann
e594fcd0e7 add baudrate 1500000
1500000bps is needed for single board computers with RK3399 CPUs
2021-01-06 10:19:18 +01:00
Eugene Pankov
0219da4d85 sourcemap separation 2021-01-04 21:31:33 +01:00
Eugene Pankov
5e06b2248b better sentry upload 2021-01-04 20:44:24 +01:00
Eugene Pankov
cdc3623986 sentry wip 2021-01-04 20:02:47 +01:00
Eugene Pankov
6d016002c0 sentry symbols on linux 2021-01-04 19:39:59 +01:00
Eugene Pankov
f3569f5d2d sentry symbols on win 2021-01-04 19:21:12 +01:00
Eugene Pankov
4125582ef2 sentry symbols on mac 2021-01-04 19:11:57 +01:00
Eugene Pankov
c6331c9b1c fixed AppService.selectTab crash 2021-01-03 20:53:53 +01:00
Eugene Pankov
aaab475e5f fixed ssh sessions - fixes #3282 2021-01-03 18:33:03 +01:00
Eugene Pankov
e6bf76c616 reenabled @typescript-eslint/no-shadow 2021-01-02 20:53:34 +01:00
Eugene Pankov
e36bad2553 reenabled @typescript-eslint/no-unnecessary-type-assertion 2021-01-02 20:48:37 +01:00
Eugene Pankov
154cc29333 reenabled @typescript-eslint/no-untyped-public-signature 2021-01-02 20:38:45 +01:00
Eugene Pankov
1b0402c2cf reenabled @typescript-eslint/no-base-to-string 2021-01-02 20:33:32 +01:00
Eugene Pankov
15073cbc81 reenabled @typescript-eslint/no-dynamic-delete 2021-01-02 20:31:26 +01:00
Eugene Pankov
3365b143d8 fixes 2021-01-02 20:24:26 +01:00
Eugene Pankov
4d9cc91e91 reenabled @typescript-eslint/no-unnecessary-condition 2021-01-02 20:10:00 +01:00
Eugene Pankov
946f4292ef reenabled @typescript-eslint/prefer-nullish-coalescing 2021-01-02 19:09:34 +01:00
Eugene
eb12b1ae60 Merge pull request #3245 from Eugeny/dependabot/npm_and_yarn/style-loader-2.0.0
Bump style-loader from 1.3.0 to 2.0.0
2021-01-02 18:17:17 +01:00
Eugene
4765c97d31 Merge pull request #3173 from Eugeny/dependabot/npm_and_yarn/terminus-ssh/types/ssh2-0.5.46
Bump @types/ssh2 from 0.5.44 to 0.5.46 in /terminus-ssh
2021-01-02 18:16:20 +01:00
Eugene Pankov
3fb32e1a97 allow changing installation path - fixes #3267 2021-01-02 13:15:27 +01:00
Eugene Pankov
9ec1a0d253 theme fix 2021-01-02 13:12:12 +01:00
Eugene Pankov
fef19615bb fixed macOS vibrancy 2021-01-02 13:08:00 +01:00
Eugene Pankov
4d237baf33 Update hostApp.service.ts 2021-01-02 12:19:08 +01:00
Eugene Pankov
03e654b5a0 further reduce bundle 2021-01-02 11:49:56 +01:00
Eugene Pankov
ef815eaa40 Merge branch 'master' of github.com:Eugeny/terminus 2021-01-02 11:49:49 +01:00
Eugene Pankov
4771a38747 added nightly links for all platforms 2021-01-02 11:49:47 +01:00
Eugene
ce016793d4 Merge pull request #3079 from Eugeny/dependabot/npm_and_yarn/npm-user-validate-1.0.1
Bump npm-user-validate from 1.0.0 to 1.0.1
2021-01-02 11:19:12 +01:00
Eugene
3a854f04e1 Merge pull request #3233 from Eugeny/dependabot/npm_and_yarn/tar-fs-1.16.3
Bump tar-fs from 1.15.3 to 1.16.3
2021-01-02 11:18:41 +01:00
Eugene
b5658d61d9 Merge pull request #3234 from Eugeny/dependabot/npm_and_yarn/fstream-1.0.12
Bump fstream from 1.0.11 to 1.0.12
2021-01-02 11:18:24 +01:00
Eugene
02750d8581 Merge pull request #3231 from Eugeny/dependabot/npm_and_yarn/http-proxy-agent-2.1.0
Bump http-proxy-agent from 2.0.0 to 2.1.0
2021-01-02 11:18:12 +01:00
Eugene
077a3e6bba Merge pull request #3232 from Eugeny/dependabot/npm_and_yarn/stringstream-0.0.6
Bump stringstream from 0.0.5 to 0.0.6
2021-01-02 11:17:38 +01:00
Eugene Pankov
5454be032a Update windows.yml 2021-01-02 11:03:20 +01:00
dependabot-preview[bot]
ceb638e08d [Security] Bump tough-cookie from 2.3.2 to 2.3.4
Bumps [tough-cookie](https://github.com/salesforce/tough-cookie) from 2.3.2 to 2.3.4. **This update includes security fixes.**
- [Release notes](https://github.com/salesforce/tough-cookie/releases)
- [Changelog](https://github.com/salesforce/tough-cookie/blob/master/CHANGELOG.md)
- [Commits](https://github.com/salesforce/tough-cookie/compare/v2.3.2...v2.3.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-02 09:43:15 +00:00
dependabot-preview[bot]
040098050d Bump axios from 0.19.2 to 0.21.1 in /terminus-plugin-manager
Bumps [axios](https://github.com/axios/axios) from 0.19.2 to 0.21.1.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v0.21.1/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.19.2...v0.21.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-02 09:43:10 +00:00
dependabot-preview[bot]
00de7c148f Bump axios from 0.19.2 to 0.21.1 in /terminus-core
Bumps [axios](https://github.com/axios/axios) from 0.19.2 to 0.21.1.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v0.21.1/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.19.2...v0.21.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-02 09:43:06 +00:00
Eugene Pankov
8a0b4f82db leaner build 2021-01-02 10:41:04 +01:00
Eugene Pankov
74fd1aeea5 Update linux.yml 2021-01-02 10:33:39 +01:00
Eugene Pankov
aac230e362 Update macos.yml 2021-01-02 10:20:44 +01:00
dependabot[bot]
ae82ed4a47 Bump http-proxy-agent from 2.0.0 to 2.1.0
Bumps [http-proxy-agent](https://github.com/TooTallNate/node-http-proxy-agent) from 2.0.0 to 2.1.0.
- [Release notes](https://github.com/TooTallNate/node-http-proxy-agent/releases)
- [Changelog](https://github.com/TooTallNate/node-http-proxy-agent/blob/2.1.0/History.md)
- [Commits](https://github.com/TooTallNate/node-http-proxy-agent/compare/2.0.0...2.1.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-01 22:13:13 +00:00
dependabot[bot]
9d1b0e9861 Bump npm-user-validate from 1.0.0 to 1.0.1
Bumps [npm-user-validate](https://github.com/npm/npm-user-validate) from 1.0.0 to 1.0.1.
- [Release notes](https://github.com/npm/npm-user-validate/releases)
- [Commits](https://github.com/npm/npm-user-validate/compare/v1.0.0...v1.0.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-01 22:13:10 +00:00
Eugene Pankov
8cb4e9f27d wip 2021-01-01 22:27:20 +01:00
Eugene Pankov
c8c00a2c9b wip 2021-01-01 22:23:27 +01:00
Eugene Pankov
bacb475896 merged node-pty n-api migration - potentially fixing #3261 2021-01-01 14:30:45 +01:00
Eugene Pankov
c8faa67083 fixed plugin installation - fixes #3264 2020-12-30 19:43:37 +01:00
dependabot[bot]
b6c0e3cdfb Bump tar-fs from 1.15.3 to 1.16.3
Bumps [tar-fs](https://github.com/mafintosh/tar-fs) from 1.15.3 to 1.16.3.
- [Release notes](https://github.com/mafintosh/tar-fs/releases)
- [Commits](https://github.com/mafintosh/tar-fs/compare/v1.15.3...v1.16.3)

Signed-off-by: dependabot[bot] <support@github.com>
2020-12-30 18:37:57 +00:00
Eugene
323581d513 Merge pull request #3235 from Eugeny/dependabot/npm_and_yarn/electron-builder-22.10.4
Bump electron-builder from 22.10.3 to 22.10.4
2020-12-30 19:37:02 +01:00
Eugene Pankov
bc7a537c4c lint 2020-12-27 21:03:12 +01:00
Eugene Pankov
10ae6ffd99 build fix 2020-12-27 20:58:25 +01:00
Eugene Pankov
847628fbff Merge branch 'master' of github.com:Eugeny/terminus 2020-12-27 18:51:14 +01:00
Eugene Pankov
b502c3e84d fixed notification size 2020-12-27 18:51:12 +01:00
Eugene Pankov
85e99ff0a8 build fix 2020-12-27 13:15:04 +01:00
dependabot-preview[bot]
21b81f476c Bump electron-builder from 22.10.3 to 22.10.4
Bumps [electron-builder](https://github.com/electron-userland/electron-builder) from 22.10.3 to 22.10.4.
- [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/v22.10.3...v22.10.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-27 12:06:23 +00:00
Eugene Pankov
02de15a6d2 re-added missing dep 2020-12-27 13:03:46 +01:00
Eugene Pankov
38a6e7fe67 work around win32 fluent background bugs - #949 2020-12-27 13:03:38 +01:00
dependabot-preview[bot]
2283a5dad9 Bump style-loader from 1.3.0 to 2.0.0
Bumps [style-loader](https://github.com/webpack-contrib/style-loader) from 1.3.0 to 2.0.0.
- [Release notes](https://github.com/webpack-contrib/style-loader/releases)
- [Changelog](https://github.com/webpack-contrib/style-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/style-loader/compare/v1.3.0...v2.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-25 04:26:28 +00:00
Eugene Pankov
e98c12d409 lint typescript-eslint/prefer-enum-initializers 2020-12-24 18:59:33 +01:00
Eugene Pankov
aacc603309 lint typescript-eslint/consistent-indexed-object-style 2020-12-24 18:56:59 +01:00
Eugene
2ef3a81dd8 Merge pull request #3218 from Eugeny/dependabot/npm_and_yarn/electron-11.1.1
Bump electron from 8.5.2 to 11.1.1
2020-12-24 18:51:14 +01:00
Eugene
22ef1bbb87 Merge pull request #3238 from Eugeny/dependabot/npm_and_yarn/extend-3.0.2
[Security] Bump extend from 3.0.1 to 3.0.2
2020-12-24 18:50:42 +01:00
Eugene
7ff9f268c9 Merge pull request #3236 from Eugeny/dependabot/npm_and_yarn/debug-2.6.9
[Security] Bump debug from 2.6.8 to 2.6.9
2020-12-24 18:50:25 +01:00
Eugene
7866bcd9a4 Merge pull request #3227 from Eugeny/dependabot/npm_and_yarn/highlight.js-10.5.0
[Security] Bump highlight.js from 10.0.1 to 10.5.0
2020-12-24 18:50:11 +01:00
Eugene
5a20ac19d9 Merge pull request #3198 from Eugeny/dependabot/npm_and_yarn/app/ini-1.3.7
[Security] Bump ini from 1.3.5 to 1.3.7 in /app
2020-12-24 18:50:02 +01:00
Eugene
915f6acf22 Merge pull request #3199 from Eugeny/dependabot/npm_and_yarn/ini-1.3.7
[Security] Bump ini from 1.3.5 to 1.3.7
2020-12-24 18:49:51 +01:00
Eugene
59b73fcdc1 Merge pull request #2999 from Eugeny/dependabot/npm_and_yarn/bl-1.2.3
[Security] Bump bl from 1.2.2 to 1.2.3
2020-12-24 18:49:44 +01:00
Eugene
8699634492 Merge pull request #3237 from Eugeny/all-contributors/add-pinpins 2020-12-24 18:49:06 +01:00
dependabot-preview[bot]
d625e90464 [Security] Bump extend from 3.0.1 to 3.0.2
Bumps [extend](https://github.com/justmoon/node-extend) from 3.0.1 to 3.0.2. **This update includes a security fix.**
- [Release notes](https://github.com/justmoon/node-extend/releases)
- [Changelog](https://github.com/justmoon/node-extend/blob/main/CHANGELOG.md)
- [Commits](https://github.com/justmoon/node-extend/compare/v3.0.1...v3.0.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-24 17:47:34 +00:00
allcontributors[bot]
bc31c775e9 docs: update .all-contributorsrc [skip ci] 2020-12-24 17:46:47 +00:00
allcontributors[bot]
49424e8da5 docs: update README.md [skip ci] 2020-12-24 17:46:46 +00:00
dependabot-preview[bot]
2526c4e458 [Security] Bump debug from 2.6.8 to 2.6.9
Bumps [debug](https://github.com/visionmedia/debug) from 2.6.8 to 2.6.9. **This update includes a security fix.**
- [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)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-24 17:46:38 +00:00
dependabot-preview[bot]
24de3ba77c Bump electron from 8.5.2 to 11.1.1
Bumps [electron](https://github.com/electron/electron) from 8.5.2 to 11.1.1.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/master/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v8.5.2...v11.1.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-24 17:46:21 +00:00
dependabot-preview[bot]
157ed82000 [Security] Bump highlight.js from 10.0.1 to 10.5.0
Bumps [highlight.js](https://github.com/highlightjs/highlight.js) from 10.0.1 to 10.5.0. **This update includes security fixes.**
- [Release notes](https://github.com/highlightjs/highlight.js/releases)
- [Changelog](https://github.com/highlightjs/highlight.js/blob/master/CHANGES.md)
- [Commits](https://github.com/highlightjs/highlight.js/compare/10.0.1...10.5.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-24 17:45:34 +00:00
dependabot-preview[bot]
8275a9449a [Security] Bump ini from 1.3.5 to 1.3.7 in /app
Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.7. **This update includes a security fix.**
- [Release notes](https://github.com/isaacs/ini/releases)
- [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-24 17:45:23 +00:00
dependabot-preview[bot]
6ed6b90840 [Security] Bump ini from 1.3.5 to 1.3.7
Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.7. **This update includes a security fix.**
- [Release notes](https://github.com/isaacs/ini/releases)
- [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-24 17:45:16 +00:00
dependabot-preview[bot]
d7565e497d Bump @types/ssh2 from 0.5.44 to 0.5.46 in /terminus-ssh
Bumps [@types/ssh2](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/ssh2) from 0.5.44 to 0.5.46.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/ssh2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-24 17:45:09 +00:00
dependabot-preview[bot]
de827ef61a [Security] Bump bl from 1.2.2 to 1.2.3
Bumps [bl](https://github.com/rvagg/bl) from 1.2.2 to 1.2.3. **This update includes a security fix.**
- [Release notes](https://github.com/rvagg/bl/releases)
- [Commits](https://github.com/rvagg/bl/compare/v1.2.2...v1.2.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-24 17:44:58 +00:00
dependabot[bot]
7b4e99fc5f Bump fstream from 1.0.11 to 1.0.12
Bumps [fstream](https://github.com/npm/fstream) from 1.0.11 to 1.0.12.
- [Release notes](https://github.com/npm/fstream/releases)
- [Commits](https://github.com/npm/fstream/compare/v1.0.11...v1.0.12)

Signed-off-by: dependabot[bot] <support@github.com>
2020-12-24 17:44:21 +00:00
dependabot[bot]
035a6f8da8 Bump stringstream from 0.0.5 to 0.0.6
Bumps [stringstream](https://github.com/mhart/StringStream) from 0.0.5 to 0.0.6.
- [Release notes](https://github.com/mhart/StringStream/releases)
- [Commits](https://github.com/mhart/StringStream/compare/v0.0.5...v0.0.6)

Signed-off-by: dependabot[bot] <support@github.com>
2020-12-24 17:44:15 +00:00
Eugene
bcdbab43de Merge pull request #3226 from pinpins/terminus_pinpin 2020-12-24 18:43:18 +01:00
Eugene Pankov
a24f52c58a more build fixes 2020-12-24 18:18:07 +01:00
Eugene Pankov
0e745ea607 Update package.json 2020-12-24 16:49:48 +01:00
Eugene Pankov
8fe9232d9b Update lint.yml 2020-12-24 16:30:00 +01:00
Eugene Pankov
e6004fa980 build on big sur 2020-12-24 16:21:38 +01:00
Eugene Pankov
987b89b914 build fixes 2020-12-24 16:16:13 +01:00
Eugene Pankov
9fddfa6fc2 removed temp files 2020-12-24 16:10:31 +01:00
Eugene Pankov
6d765bb1b8 build fixes 2020-12-24 16:04:15 +01:00
Eugene Pankov
0ca971a289 electron 11 cleanup 2020-12-24 14:03:14 +01:00
pinpins
e87f6e7af0 Support for Apple Silicon via node 15, electron 11.1 update 2020-12-23 22:45:47 +02:00
pinpins
56be0a1085 Merge branch 'master' into terminus_pinpin 2020-12-18 15:56:18 +02:00
pinpins
41f464d21d Merge branch 'master' into terminus_pinpin
update from master
2020-12-18 14:17:40 +02:00
pinpins
c8dde73158 remove DS_Store 2020-12-18 13:46:50 +02:00
Eugene Pankov
0971a85db4 ssh: added dynamic port forwarding (fixes #2077) 2020-12-13 13:36:37 +01:00
Eugene Pankov
51d54a8477 fixed compact theme icon size (fixes #3196, fixes #3197) 2020-12-13 13:36:09 +01:00
Eugene Pankov
b75775283f use run-script-os for xcopy 2020-12-13 12:21:28 +01:00
Eugene Pankov
66558290a0 fixed missing tabs at the bottom 2020-12-09 09:30:20 +01:00
Eugene
a1980afd9d Merge pull request #3158 from Eugeny/dependabot/npm_and_yarn/sentry/electron-2.0.4
Bump @sentry/electron from 1.5.1 to 2.0.4
2020-12-06 19:26:27 +01:00
Eugene
2b28802ce7 Merge pull request #3049 from Eugeny/dependabot/npm_and_yarn/electron-8.5.2
Bump electron from 8.2.5 to 8.5.2
2020-12-06 19:25:58 +01:00
Eugene
0514a7c229 Merge pull request #3178 from Eugeny/all-contributors/add-TakuroOnoda 2020-12-06 19:21:10 +01:00
allcontributors[bot]
326901b7e8 docs: update .all-contributorsrc [skip ci] 2020-12-06 18:20:37 +00:00
allcontributors[bot]
bbe6b61d63 docs: update README.md [skip ci] 2020-12-06 18:20:36 +00:00
Eugene
204c1057db Merge pull request #3084 from TakuroOnoda/feature/sidetab 2020-12-06 19:20:17 +01:00
Eugene Pankov
dff6a2470c refined vertical tabs 2020-12-06 19:12:15 +01:00
Eugene
cbebc09504 Merge branch 'master' into feature/sidetab 2020-12-06 18:21:03 +01:00
Eugene Pankov
f56dd71f43 Merge branch 'master' of github.com:Eugeny/terminus 2020-12-06 18:14:36 +01:00
Eugene Pankov
17f52a257e PS ctrl-left, ctrl-right and ctrl-del bindings (#507, #2739) 2020-12-06 18:11:15 +01:00
Eugene
8d09ddb686 Merge pull request #3177 from Eugeny/all-contributors/add-pinpins 2020-12-06 17:43:21 +01:00
Eugene Pankov
e6fd31e0b0 don't try to load the private key if not selected - fixes #2968 2020-12-06 17:43:00 +01:00
allcontributors[bot]
c6188a49f5 docs: update .all-contributorsrc [skip ci] 2020-12-06 16:28:09 +00:00
allcontributors[bot]
9a60b4d102 docs: update README.md [skip ci] 2020-12-06 16:28:08 +00:00
Eugene Pankov
7977c1d644 cleanup 2020-12-06 17:27:45 +01:00
Eugene
ac85a1d7d3 Merge pull request #3142 from pinpins/master 2020-12-06 17:25:19 +01:00
Eugene Pankov
86b503093c only send args to the most recent window 2020-12-06 17:03:07 +01:00
Eugene Pankov
dd3e7a0f89 fixed #2558 2020-12-06 15:39:49 +01:00
Eugene
8905106b48 Merge pull request #3174 from opensorceror/opensorceror-patch-1
Fix typos
2020-12-04 09:03:00 +01:00
Harsh Gadgil
225760a9a5 Update api.ts
Fix typos
2020-12-03 19:09:26 -05:00
dependabot-preview[bot]
4aa79a76ea Bump @sentry/electron from 1.5.1 to 2.0.4
Bumps [@sentry/electron](https://github.com/getsentry/sentry-electron) from 1.5.1 to 2.0.4.
- [Release notes](https://github.com/getsentry/sentry-electron/releases)
- [Changelog](https://github.com/getsentry/sentry-electron/blob/master/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-electron/compare/v1.5.1...2.0.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-24 04:23:53 +00:00
pinpins
1e2d6c7e75 script for local macos release 2020-11-21 20:53:17 +02:00
pinpin
f1e79e9ada Fixes based on PR reviews 2020-11-17 09:32:02 +02:00
pinpin
37cc37650e Fixes based on PR reviews 2020-11-17 09:14:05 +02:00
pinpin
d607b7423a fix 2020-11-16 22:33:16 +02:00
pinpin
a2e843ec84 fix 2020-11-16 22:33:13 +02:00
pinpin
17cafbfa52 add restart prompt 2020-11-16 22:19:44 +02:00
pinpin
91333abc4f add restart prompt 2020-11-16 22:17:19 +02:00
pinpin
05b2b11af5 add restart prompt 2020-11-16 22:16:37 +02:00
pinpin
3931e8088e revert version of node 2020-11-16 21:44:20 +02:00
pinpin
299ede2eb1 Add Hide Tab Index and Hide Tab Close Button 2020-11-16 21:41:11 +02:00
pinpin
4fed323a2a Revert "remove workwlows temporary"
This reverts commit b4bf8ec250.
2020-11-16 20:56:18 +02:00
pinpin
b4bf8ec250 remove workwlows temporary 2020-11-16 20:37:51 +02:00
pinpin
780657ce1d remove workflows for now 2020-11-16 20:35:24 +02:00
pinpin
2d558563e4 Add Hide Tab Index and Hide Tab Close Button 2020-11-16 20:27:39 +02:00
Eugene
bc5e6e9535 Merge pull request #3098 from Eugeny/all-contributors/add-matishadow 2020-10-23 09:04:39 +02:00
allcontributors[bot]
0c15fc2657 docs: update .all-contributorsrc [skip ci] 2020-10-23 07:03:53 +00:00
allcontributors[bot]
5e115c63f1 docs: update README.md [skip ci] 2020-10-23 07:03:52 +00:00
Eugene
2bcf23cff1 Merge pull request #3055 from matishadow/feature/regex-search-configuration 2020-10-23 09:03:35 +02:00
matishadow
2c59022b78 Fix lint 2020-10-23 07:53:43 +02:00
matishadow
358d9f30d2 Make search options be remembered 2020-10-22 23:35:23 +02:00
matishadow
afd6ce4346 Remove RegexAlwaysEnabled from settings component 2020-10-22 19:48:28 +02:00
TakuroOnoda
5c7256ffe5 Adding Tab Location "left" 2020-10-18 18:48:10 +09:00
Eugene Pankov
a15e79ad5a PEM related patches (potentially fixes #2053) 2020-10-16 15:53:41 +02:00
Eugene
f1ecbd1a93 handle windows usernames with spaces - fixed #2944 2020-10-16 12:47:03 +02:00
Eugene
7da941d038 Merge pull request #3073 from Eugeny/all-contributors/add-zend 2020-10-14 13:10:22 +02:00
allcontributors[bot]
3efc142630 docs: update .all-contributorsrc [skip ci] 2020-10-14 11:09:21 +00:00
allcontributors[bot]
d592469237 docs: update README.md [skip ci] 2020-10-14 11:09:20 +00:00
Eugene
b3e63620b3 Merge pull request #3072 from zend/master 2020-10-14 13:09:19 +02:00
Zenghai Liang
22b79510ea lint: add the parameter type 2020-10-14 17:31:45 +08:00
Zenghai Liang
70cf63f8fa lint: using a template literal 2020-10-14 17:17:07 +08:00
Zenghai Liang
c9067cf8b8 Fix the linting issue 2020-10-14 16:57:09 +08:00
Zenghai Liang
4ccc406768 Using Object.assign to copy connection 2020-10-14 16:40:14 +08:00
Zenghai Liang
1c25747de0 feat: Add copy button to ssh connection 2020-10-14 15:43:12 +08:00
matishadow
8e4c36ec24 Fix lint problems 2020-10-08 19:53:13 +02:00
matishadow
444d92d393 Add possibility to configure always enabled regex 2020-10-08 19:30:57 +02:00
dependabot[bot]
2597702676 Bump electron from 8.2.5 to 8.5.2
Bumps [electron](https://github.com/electron/electron) from 8.2.5 to 8.5.2.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/master/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v8.2.5...v8.5.2)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-06 17:56:11 +00:00
Eugene
c9d75d81e4 Merge pull request #2965 from Eugeny/dependabot/npm_and_yarn/app/bl-3.0.1
Bump bl from 3.0.0 to 3.0.1 in /app
2020-09-02 17:57:12 +02:00
dependabot[bot]
98eb68c845 Bump bl from 3.0.0 to 3.0.1 in /app
Bumps [bl](https://github.com/rvagg/bl) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/rvagg/bl/releases)
- [Commits](https://github.com/rvagg/bl/compare/v3.0.0...v3.0.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-02 15:55:20 +00:00
Eugene
5185e1fe1d Update ssh.service.ts 2020-08-27 23:03:54 +02:00
Eugene Pankov
5bde116a4e Merge branch 'master' of github.com:Eugeny/terminus 2020-08-26 10:54:52 +02:00
Eugene Pankov
179acc1382 only use pageant as agent if it's runing - fixes #2935, fixes #2936 2020-08-26 10:54:49 +02:00
Eugene Pankov
c6d918e401 build fix 2020-08-23 16:02:56 +02:00
Eugene Pankov
62b53575ac WinSCP integration 2020-08-23 14:59:06 +02:00
Eugene Pankov
32b29a91e9 fixed random conpty freezes - fixes #2805, fixes #1583, fixes #2686, fixes #2293 2020-08-23 14:06:49 +02:00
Eugene Pankov
4346030459 lint 2020-08-16 18:52:45 +02:00
Eugene Pankov
9e8c0ccb14 restore all split tab children at once 2020-08-16 18:30:42 +02:00
Eugene Pankov
6c8d00eb16 don't mention legacy API in README 2020-08-16 18:24:55 +02:00
Eugene Pankov
b3fcfd0c8b added hotkey to focus all panes (fixes #722) 2020-08-16 18:24:47 +02:00
Eugene Pankov
4eefab5655 made warning when closing SSH tabs optional - fixes #2801 2020-08-15 21:07:35 +02:00
Eugene Pankov
2745896ec3 lint 2020-08-15 20:49:18 +02:00
Eugene Pankov
cdfaaabb70 bumped native deps 2020-08-15 20:46:50 +02:00
Eugene Pankov
60ab6ece62 fixed tab context menu for custom tab colors 2020-08-15 20:46:40 +02:00
Eugene Pankov
436318b534 Merge branch 'master' of github.com:Eugeny/terminus 2020-08-15 20:46:21 +02:00
Eugene
248f431437 Merge pull request #2648 from Eugeny/dependabot/npm_and_yarn/node-abi-2.18.0
Bump node-abi from 2.16.0 to 2.18.0
2020-08-15 20:45:56 +02:00
Eugene
7794280115 Merge pull request #2879 from Eugeny/dependabot/npm_and_yarn/typedoc-0.18.0
Bump typedoc from 0.17.7 to 0.18.0
2020-08-15 20:45:32 +02:00
Eugene Pankov
c2cc4c977f Update shellSettingsTab.component.pug 2020-08-15 19:21:12 +02:00
Eugene Pankov
f9b7f97863 handle cwd detection errors on linux 2020-08-14 12:39:14 +02:00
Eugene Pankov
59ce7eeee6 prioritize pubkey auth over password (fixes #2894) 2020-08-13 15:05:05 +02:00
Eugene Pankov
0e012a90ea Update xtermFrontend.ts 2020-08-12 21:04:42 +02:00
Eugene Pankov
6773d260cf Merge branch 'master' of github.com:Eugeny/terminus 2020-08-12 21:02:29 +02:00
Eugene
7379f6cd59 Merge pull request #2859 from 695137400/patch-1
Update xtermFrontend.ts
2020-08-12 21:02:25 +02:00
Jonathan Beverley
3aee24bdbd Re-added an option for Agent Forwarding 2020-08-12 21:00:55 +02:00
dependabot-preview[bot]
84dbfa5d6c Bump typedoc from 0.17.7 to 0.18.0
Bumps [typedoc](https://github.com/TypeStrong/TypeDoc) from 0.17.7 to 0.18.0.
- [Release notes](https://github.com/TypeStrong/TypeDoc/releases)
- [Commits](https://github.com/TypeStrong/TypeDoc/compare/v0.17.7...v0.18.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-10 04:19:24 +00:00
Eugene Pankov
43958d88b8 Merge branch 'master' of github.com:Eugeny/terminus 2020-08-07 12:25:05 +02:00
Eugene Pankov
f4b0e4cb52 Update package.json 2020-08-07 12:25:02 +02:00
Eugene
d91c898f6d Merge pull request #2830 from Eugeny/dependabot/npm_and_yarn/app/yargs-15.4.1
Bump yargs from 15.3.1 to 15.4.1 in /app
2020-08-07 09:22:38 +02:00
Eugene
f16989a45d Merge pull request #2724 from Eugeny/dependabot/npm_and_yarn/electron-notarize-1.0.0
Bump electron-notarize from 0.1.1 to 1.0.0
2020-08-07 09:20:54 +02:00
Eugene
1ef524e832 Merge pull request #2852 from Eugeny/dependabot/npm_and_yarn/eslint-7.6.0
Bump eslint from 7.2.0 to 7.6.0
2020-08-07 09:19:33 +02:00
Eugene
65fcdd2745 Merge pull request #2856 from Eugeny/dependabot/npm_and_yarn/typescript-eslint/parser-3.8.0
Bump @typescript-eslint/parser from 3.3.0 to 3.8.0
2020-08-07 09:18:56 +02:00
695137400
7030f562e8 Update xtermFrontend.ts
console error
2020-08-04 18:21:26 +08:00
dependabot-preview[bot]
047b31dd67 Bump @typescript-eslint/parser from 3.3.0 to 3.8.0
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 3.3.0 to 3.8.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v3.8.0/packages/parser)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-04 04:24:06 +00:00
Eugene Pankov
ae0d33f026 use update.electronjs.org for updates (fixes #2393, fixes #2087, fixes #2835, fixes #2436, fixes #2635, fixes #1495, fixes #2158) 2020-08-03 23:14:05 +02:00
dependabot-preview[bot]
039a0b7eb5 Bump eslint from 7.2.0 to 7.6.0
Bumps [eslint](https://github.com/eslint/eslint) from 7.2.0 to 7.6.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v7.2.0...v7.6.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-03 04:25:33 +00:00
Eugene Pankov
3d3fcc41b8 lint 2020-07-29 19:27:23 +02:00
Eugene Pankov
3e3e8f3132 added fontawesome regular style 2020-07-29 19:19:05 +02:00
Eugene Pankov
da21895e40 more explicit SSH auth options and agent forwarding - fixes #2284, fixes #2511, fixes #2717, fixes #2184 2020-07-29 19:18:57 +02:00
Eugene Pankov
34752ed69e Merge branch 'master' of https://github.com/Eugeny/terminus 2020-07-29 18:50:16 +02:00
Eugene
008eb98f50 Merge pull request #2767 from Eugeny/dependabot/npm_and_yarn/terminus-ssh/types/ssh2-0.5.44 2020-07-29 18:50:10 +02:00
Eugene
e521cd4648 Merge pull request #2844 from Eugeny/all-contributors/add-JonathanBeverley 2020-07-29 18:31:10 +02:00
Eugene Pankov
cb97a784da support windows openssh agent 2020-07-29 18:11:10 +02:00
allcontributors[bot]
96d9d81be2 docs: update .all-contributorsrc [skip ci] 2020-07-29 15:45:53 +00:00
allcontributors[bot]
71797eb93f docs: update README.md [skip ci] 2020-07-29 15:45:52 +00:00
Eugene
ae3870e297 Merge pull request #2601 from JonathanBeverley/jmb/features 2020-07-29 17:45:05 +02:00
Eugene Pankov
055de5013c updated uac.exe 2020-07-29 09:50:08 +02:00
dependabot-preview[bot]
ad1ea01976 Bump yargs from 15.3.1 to 15.4.1 in /app
Bumps [yargs](https://github.com/yargs/yargs) from 15.3.1 to 15.4.1.
- [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/v15.3.1...v15.4.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-28 04:20:35 +00:00
Eugene
064fbfac67 Merge pull request #2736 from Eugeny/dependabot/npm_and_yarn/terminus-core/winston-3.3.3 2020-07-27 22:33:53 +02:00
Eugene
a31c83476d Merge pull request #2759 from Eugeny/dependabot/npm_and_yarn/app/rxjs-compat-6.6.0 2020-07-27 22:33:21 +02:00
Eugene
bc9f4c267e Merge pull request #2723 from Eugeny/dependabot/npm_and_yarn/webpack-cli-3.3.12
Bump webpack-cli from 3.3.10 to 3.3.12
2020-07-27 22:33:03 +02:00
Eugene
3e92ae278e Merge pull request #2823 from Eugeny/dependabot/npm_and_yarn/sentry/electron-1.5.1
Bump @sentry/electron from 1.2.1 to 1.5.1
2020-07-27 22:22:31 +02:00
Eugene
6adc3543a8 Merge pull request #2826 from Eugeny/all-contributors/add-dimitory 2020-07-27 22:21:01 +02:00
allcontributors[bot]
af5293948c docs: update .all-contributorsrc [skip ci] 2020-07-27 20:15:14 +00:00
allcontributors[bot]
34620db925 docs: update README.md [skip ci] 2020-07-27 20:15:13 +00:00
Eugene
4a5a96ea16 Merge pull request #2824 from Dimitory/patch-1 2020-07-27 22:15:09 +02:00
Dmitry Pronin
fcc9d7cf7d Update ssh.service.ts 2020-07-27 19:26:02 +03:00
Dmitry Pronin
9cae50bfc5 Fixed SSH Keys Permission Denied 2020-07-27 19:19:21 +03:00
Eugene Pankov
3cff5909bd rebuild uac.exe in release mode (fixes #2800) 2020-07-27 17:38:26 +02:00
Eugene Pankov
0130cd9d54 handle global hotkeys with win key - fixes #2524 2020-07-27 16:36:11 +02:00
Eugene Pankov
926d4f51b3 use more performant sourcemap mode - fixes #2617 2020-07-27 16:12:16 +02:00
Eugene Pankov
efe390f68d allow searching for hotkey values - #1509 2020-07-27 16:04:31 +02:00
Eugene Pankov
6d0b2608a2 added an option to disable the global hotkey to the welcome tab (fixes #1509, fixes #2809) 2020-07-27 15:56:09 +02:00
Eugene Pankov
ddd306dbf6 bumped xterm 2020-07-27 15:55:24 +02:00
Eugene Pankov
30c632a5cc Merge branch 'master' of github.com:Eugeny/terminus 2020-07-27 15:39:27 +02:00
Eugene
65b3254b77 Merge pull request #2699 from Eugeny/dependabot/npm_and_yarn/terminus-terminal/xterm-addon-webgl-0.8.0
Bump xterm-addon-webgl from 0.7.0 to 0.8.0 in /terminus-terminal
2020-07-27 15:38:31 +02:00
Eugene
f776a30c9f Merge pull request #2787 from Eugeny/dependabot/npm_and_yarn/terminus-terminal/xterm-addon-ligatures-0.4.0-beta.5
Bump xterm-addon-ligatures from 0.3.0 to 0.4.0-beta.5 in /terminus-terminal
2020-07-27 15:38:20 +02:00
dependabot-preview[bot]
c02525440c Bump @sentry/electron from 1.2.1 to 1.5.1
Bumps [@sentry/electron](https://github.com/getsentry/sentry-electron) from 1.2.1 to 1.5.1.
- [Release notes](https://github.com/getsentry/sentry-electron/releases)
- [Changelog](https://github.com/getsentry/sentry-electron/blob/master/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-electron/compare/v1.2.1...v1.5.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-27 04:22:58 +00:00
Eugene Pankov
dbda8dad34 lint 2020-07-17 20:45:18 +02:00
dependabot-preview[bot]
bc44f55989 Bump xterm-addon-ligatures in /terminus-terminal
Bumps [xterm-addon-ligatures](https://github.com/xtermjs/xterm.js) from 0.3.0 to 0.4.0-beta.5.
- [Release notes](https://github.com/xtermjs/xterm.js/releases)
- [Commits](https://github.com/xtermjs/xterm.js/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-14 04:20:15 +00:00
dependabot-preview[bot]
a3c998adab Bump @types/ssh2 from 0.5.43 to 0.5.44 in /terminus-ssh
Bumps [@types/ssh2](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/ssh2) from 0.5.43 to 0.5.44.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/ssh2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-07 04:20:14 +00:00
dependabot-preview[bot]
b62b59f9b8 Bump winston from 3.2.1 to 3.3.3 in /terminus-core
Bumps [winston](https://github.com/winstonjs/winston) from 3.2.1 to 3.3.3.
- [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/3.2.1...v3.3.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-05 10:54:28 +00:00
Eugene Pankov
bb1557b0a4 avoid ResizeObserver feedback loop 2020-07-05 12:47:40 +02:00
Eugene Pankov
d0fe64355b ssh reconnection logic improvements - fixes #2705, fixes #761, fixes #2662 2020-07-05 12:47:32 +02:00
Eugene Pankov
7b4e6e8f3a build fix 2020-07-05 12:19:08 +02:00
dependabot-preview[bot]
bd11c90846 Bump rxjs-compat from 6.5.5 to 6.6.0 in /app
Bumps rxjs-compat from 6.5.5 to 6.6.0.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-02 04:22:04 +00:00
Eugene Pankov
21f33618d4 stop ssh session after connection errors 2020-06-30 15:35:07 +02:00
Eugene Pankov
11c8ca6582 don't crash on missing wsl distro flags - fixes #2744 2020-06-30 15:34:55 +02:00
Eugene Pankov
6e9ac1b59a added entitlements and usage descriptions - fixed #2746 2020-06-28 15:11:52 +02:00
dependabot-preview[bot]
91591a81ff Bump electron-notarize from 0.1.1 to 1.0.0
Bumps [electron-notarize](https://github.com/electron/electron-notarize) from 0.1.1 to 1.0.0.
- [Release notes](https://github.com/electron/electron-notarize/releases)
- [Changelog](https://github.com/electron/electron-notarize/blob/master/.releaserc.json)
- [Commits](https://github.com/electron/electron-notarize/compare/v0.1.1...v1.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-22 04:19:42 +00:00
dependabot-preview[bot]
1ce0ff2e00 Bump webpack-cli from 3.3.10 to 3.3.12
Bumps [webpack-cli](https://github.com/webpack/webpack-cli) from 3.3.10 to 3.3.12.
- [Release notes](https://github.com/webpack/webpack-cli/releases)
- [Changelog](https://github.com/webpack/webpack-cli/blob/v3.3.12/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-cli/compare/v3.3.10...v3.3.12)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-22 04:19:12 +00:00
Eugene
92cef766f6 Merge pull request #2682 from Eugeny/dependabot/npm_and_yarn/eslint-7.2.0
Bump eslint from 7.1.0 to 7.2.0
2020-06-19 20:00:36 +02:00
Eugene
d1d55d39b1 Merge pull request #2716 from Eugeny/dependabot/npm_and_yarn/app/angular/forms-9.1.11
Bump @angular/forms from 9.1.9 to 9.1.11 in /app
2020-06-19 20:00:24 +02:00
Eugene
4ad55bff6e Merge pull request #2714 from Eugeny/dependabot/npm_and_yarn/webpack-5.0.0-beta.18
Bump webpack from 5.0.0-beta.16 to 5.0.0-beta.18
2020-06-19 20:00:13 +02:00
Eugene
f73c41a709 Merge pull request #2710 from Eugeny/dependabot/npm_and_yarn/app/angular/common-9.1.11
Bump @angular/common from 9.1.9 to 9.1.11 in /app
2020-06-19 19:59:45 +02:00
Eugene
3ca55d972a Merge pull request #2707 from Eugeny/dependabot/npm_and_yarn/typescript-eslint/parser-3.3.0
Bump @typescript-eslint/parser from 3.1.0 to 3.3.0
2020-06-19 19:59:05 +02:00
dependabot-preview[bot]
2b25c25337 Bump @angular/forms from 9.1.9 to 9.1.11 in /app
Bumps [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms) from 9.1.9 to 9.1.11.
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/9.1.11/packages/forms)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-19 04:17:10 +00:00
dependabot-preview[bot]
3621877f32 Bump webpack from 5.0.0-beta.16 to 5.0.0-beta.18
Bumps [webpack](https://github.com/webpack/webpack) from 5.0.0-beta.16 to 5.0.0-beta.18.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.0.0-beta.16...v5.0.0-beta.18)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-18 04:20:19 +00:00
dependabot-preview[bot]
cf2a8ddc96 Bump @angular/common from 9.1.9 to 9.1.11 in /app
Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common) from 9.1.9 to 9.1.11.
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/9.1.11/packages/common)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-17 04:19:49 +00:00
dependabot-preview[bot]
d461515881 Bump @typescript-eslint/parser from 3.1.0 to 3.3.0
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 3.1.0 to 3.3.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v3.3.0/packages/parser)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-16 04:21:28 +00:00
Eugene Pankov
5828571a95 fixed uac.exe encoding (fixes #654) 2020-06-14 18:46:22 +02:00
Eugene Pankov
3aba7c9b93 lint 2020-06-14 17:26:57 +02:00
Eugene Pankov
d371bf2f41 fixed arrow keys in admin shells (fixes #691) 2020-06-14 17:25:32 +02:00
Eugene Pankov
51934dccbd use glasstron on win32 2020-06-14 16:16:00 +02:00
Eugene Pankov
b6caf47ce6 Update theme.scss 2020-06-14 16:13:01 +02:00
dependabot-preview[bot]
e8362268bb Bump xterm-addon-webgl from 0.7.0 to 0.8.0 in /terminus-terminal
Bumps [xterm-addon-webgl](https://github.com/xtermjs/xterm.js) from 0.7.0 to 0.8.0.
- [Release notes](https://github.com/xtermjs/xterm.js/releases)
- [Commits](https://github.com/xtermjs/xterm.js/compare/0.7...0.8)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-12 04:17:36 +00:00
dependabot-preview[bot]
88c57a6794 Bump eslint from 7.1.0 to 7.2.0
Bumps [eslint](https://github.com/eslint/eslint) from 7.1.0 to 7.2.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v7.1.0...v7.2.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-09 04:18:03 +00:00
Eugene Pankov
69a0b46a20 auto-trim single-line clipboard contents (fixes #2677) 2020-06-08 10:04:29 +02:00
dependabot-preview[bot]
a5a662c05d Bump node-abi from 2.16.0 to 2.18.0
Bumps [node-abi](https://github.com/lgeiger/node-abi) from 2.16.0 to 2.18.0.
- [Release notes](https://github.com/lgeiger/node-abi/releases)
- [Commits](https://github.com/lgeiger/node-abi/compare/v2.16.0...v2.18.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-08 07:15:31 +00:00
Eugene
4ab0b51d87 Merge pull request #2647 from Eugeny/dependabot/npm_and_yarn/app/node-abi-2.18.0
Bump node-abi from 2.16.0 to 2.18.0 in /app
2020-06-08 09:13:38 +02:00
dependabot-preview[bot]
c3285b24d9 Bump node-abi from 2.16.0 to 2.18.0 in /app
Bumps [node-abi](https://github.com/lgeiger/node-abi) from 2.16.0 to 2.18.0.
- [Release notes](https://github.com/lgeiger/node-abi/releases)
- [Commits](https://github.com/lgeiger/node-abi/compare/v2.16.0...v2.18.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-08 07:13:06 +00:00
Eugene
313345da3d Merge pull request #2666 from Eugeny/dependabot/npm_and_yarn/node-gyp-7.0.0
Bump node-gyp from 6.1.0 to 7.0.0
2020-06-08 09:12:12 +02:00
Eugene
7173be8c22 Merge pull request #2628 from Eugeny/dependabot/npm_and_yarn/app/keytar-6.0.1
Bump keytar from 5.6.0 to 6.0.1 in /app
2020-06-08 09:11:27 +02:00
Eugene
b97ef8c643 Merge pull request #2678 from Eugeny/dependabot/npm_and_yarn/eslint-plugin-import-2.21.1
Bump eslint-plugin-import from 2.20.2 to 2.21.1
2020-06-08 09:11:12 +02:00
Eugene Pankov
d221f8e561 properly clear jump host from settings (fixes #2675) 2020-06-08 09:11:00 +02:00
dependabot-preview[bot]
95ed0a58b9 Bump eslint-plugin-import from 2.20.2 to 2.21.1
Bumps [eslint-plugin-import](https://github.com/benmosher/eslint-plugin-import) from 2.20.2 to 2.21.1.
- [Release notes](https://github.com/benmosher/eslint-plugin-import/releases)
- [Changelog](https://github.com/benmosher/eslint-plugin-import/blob/master/CHANGELOG.md)
- [Commits](https://github.com/benmosher/eslint-plugin-import/compare/v2.20.2...v2.21.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-08 04:18:27 +00:00
dependabot-preview[bot]
77d4176b55 Bump keytar from 5.6.0 to 6.0.1 in /app
Bumps [keytar](https://github.com/atom/node-keytar) from 5.6.0 to 6.0.1.
- [Release notes](https://github.com/atom/node-keytar/releases)
- [Commits](https://github.com/atom/node-keytar/compare/v5.6.0...v6.0.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-05 08:32:24 +00:00
Eugene Pankov
48013e2102 moved glasstron outside of webpack realm 2020-06-05 10:08:20 +02:00
dependabot-preview[bot]
31dcb2b514 Bump node-gyp from 6.1.0 to 7.0.0
Bumps [node-gyp](https://github.com/nodejs/node-gyp) from 6.1.0 to 7.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/v6.1.0...v7.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-05 04:21:13 +00:00
Eugene
43a9a7cb19 Merge pull request #2629 from Eugeny/dependabot/npm_and_yarn/app/serialport-9.0.0
Bump serialport from 8.0.7 to 9.0.0 in /app
2020-06-04 13:52:00 +02:00
Eugene
88cecba2b6 Merge pull request #2619 from Eugeny/dependabot/npm_and_yarn/eslint-7.1.0
Bump eslint from 6.8.0 to 7.1.0
2020-06-04 13:51:37 +02:00
Eugene
91e1870f91 Merge pull request #2631 from Eugeny/dependabot/npm_and_yarn/typedoc-0.17.7
Bump typedoc from 0.17.6 to 0.17.7
2020-06-04 13:51:11 +02:00
Eugene
705050a96a Merge pull request #2655 from Eugeny/dependabot/npm_and_yarn/typescript-eslint/parser-3.1.0
Bump @typescript-eslint/parser from 2.34.0 to 3.1.0
2020-06-04 13:49:53 +02:00
Eugene
8d2550fb99 Merge pull request #2660 from Eugeny/all-contributors/add-3l0w 2020-06-04 13:49:14 +02:00
dependabot-preview[bot]
c4a89d4ee3 Bump eslint from 6.8.0 to 7.1.0
Bumps [eslint](https://github.com/eslint/eslint) from 6.8.0 to 7.1.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v6.8.0...v7.1.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-04 11:43:04 +00:00
allcontributors[bot]
6140cdfabc docs: update .all-contributorsrc [skip ci] 2020-06-04 11:41:01 +00:00
allcontributors[bot]
5786d61620 docs: update README.md [skip ci] 2020-06-04 11:41:00 +00:00
Eugene
32f6e16275 Merge pull request #2657 from 3l0w/master 2020-06-04 13:40:58 +02:00
Gwilherm Folliot
668986fc08 fixed lint 2020-06-04 13:34:33 +02:00
Gwilherm Folliot
9190893ccf Added acrylic background for linux 2020-06-03 18:41:23 +02:00
dependabot-preview[bot]
546837ab55 Bump @typescript-eslint/parser from 2.34.0 to 3.1.0
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 2.34.0 to 3.1.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v3.1.0/packages/parser)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-03 04:20:59 +00:00
dependabot-preview[bot]
3825feae08 Bump typedoc from 0.17.6 to 0.17.7
Bumps [typedoc](https://github.com/TypeStrong/TypeDoc) from 0.17.6 to 0.17.7.
- [Release notes](https://github.com/TypeStrong/TypeDoc/releases)
- [Commits](https://github.com/TypeStrong/TypeDoc/compare/0.17.6...v0.17.7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-27 04:21:13 +00:00
dependabot-preview[bot]
fdeabae061 Bump serialport from 8.0.7 to 9.0.0 in /app
Bumps [serialport](https://github.com/serialport/node-serialport) from 8.0.7 to 9.0.0.
- [Release notes](https://github.com/serialport/node-serialport/releases)
- [Changelog](https://github.com/serialport/node-serialport/blob/master/CHANGELOG.md)
- [Commits](https://github.com/serialport/node-serialport/compare/@serialport/bindings@8.0.7...@serialport/bindings@9.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-27 04:19:14 +00:00
Eugene Pankov
8b307be92d Merge branch 'master' of github.com:Eugeny/terminus 2020-05-26 18:52:26 +02:00
Eugene
45516c4013 Merge pull request #2622 from Eugeny/dependabot/npm_and_yarn/app/js-yaml-3.14.0 2020-05-26 17:32:06 +02:00
Eugene
5d8f7a4e34 Merge pull request #2623 from Eugeny/dependabot/npm_and_yarn/terminus-core/js-yaml-3.14.0 2020-05-26 17:31:47 +02:00
Eugene
792c9279e2 Merge pull request #2592 from Eugeny/dependabot/npm_and_yarn/terminus-core/types/js-yaml-3.12.4 2020-05-26 17:31:34 +02:00
Eugene
8825a8163e Merge pull request #2591 from Eugeny/dependabot/npm_and_yarn/types/js-yaml-3.12.4 2020-05-26 17:31:28 +02:00
Eugene Pankov
7e42328c6f bumped node-pty 2020-05-26 17:31:09 +02:00
Eugene
2dd99d43ed Merge pull request #2597 from Eugeny/dependabot/npm_and_yarn/typescript-eslint/parser-2.34.0 2020-05-26 17:31:04 +02:00
Eugene Pankov
991b4fc965 Merge branch 'master' of github.com:Eugeny/terminus 2020-05-26 17:30:42 +02:00
Eugene
e9d7af5320 Merge pull request #2552 from Eugeny/dependabot/npm_and_yarn/app/serialport-9.0.0 2020-05-26 17:29:30 +02:00
Eugene
bff23fe825 Merge pull request #2573 from Eugeny/dependabot/npm_and_yarn/tslib-2.0.0 2020-05-26 17:29:10 +02:00
Eugene
79bd94ee6f Merge pull request #2604 from Eugeny/dependabot/npm_and_yarn/typescript-3.9.3 2020-05-26 17:28:57 +02:00
Eugene
fdd833ef7c Merge pull request #2603 from Eugeny/dependabot/npm_and_yarn/app/node-abi-2.17.0 2020-05-26 17:28:47 +02:00
Eugene Pankov
c386504296 fixed #2624 - fixed analytics initialization 2020-05-26 17:28:02 +02:00
Eugene
9cc8649422 Merge pull request #2610 from Eugeny/dependabot/npm_and_yarn/terminus-core/uuid-8.1.0 2020-05-26 17:27:00 +02:00
Eugene Pankov
625a9179c5 dropped uuid dependency 2020-05-26 17:26:39 +02:00
Eugene Pankov
66ed73f7c9 bumped angular 2020-05-26 17:19:45 +02:00
Eugene Pankov
95bd48d6c6 warn when closing ssh tabs - fixes #2512 2020-05-26 17:12:48 +02:00
Eugene Pankov
328490a85e move "close" menu items to the bottom - fixes #2599 2020-05-26 17:10:02 +02:00
Eugene Pankov
d08413aeab fixed focus loss on new windows 2020-05-26 17:04:39 +02:00
Eugene Pankov
922f1fbade fixed #1870 - new window hotkey on mac 2020-05-26 17:04:10 +02:00
Eugene
cb96c8d470 Merge pull request #2578 from Eugeny/dependabot/npm_and_yarn/terminus-terminal/xterm-addon-unicode11-0.2.0
Bump xterm-addon-unicode11 from 0.2.0-beta.5 to 0.2.0 in /terminus-terminal
2020-05-26 16:53:19 +02:00
Eugene
f3ebc43667 Merge pull request #2572 from Eugeny/dependabot/npm_and_yarn/terminus-terminal/xterm-addon-webgl-0.7.0 2020-05-26 16:53:06 +02:00
dependabot-preview[bot]
e7696dcdf3 Bump js-yaml from 3.13.1 to 3.14.0 in /app
Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 3.13.1 to 3.14.0.
- [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.13.1...3.14.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-26 14:52:51 +00:00
Eugene
4abf7d7738 Merge pull request #2574 from Eugeny/dependabot/npm_and_yarn/terminus-terminal/xterm-4.6.0 2020-05-26 16:52:46 +02:00
dependabot-preview[bot]
be206161d6 Bump uuid from 8.0.0 to 8.1.0 in /terminus-core
Bumps [uuid](https://github.com/uuidjs/uuid) from 8.0.0 to 8.1.0.
- [Release notes](https://github.com/uuidjs/uuid/releases)
- [Changelog](https://github.com/uuidjs/uuid/blob/master/CHANGELOG.md)
- [Commits](https://github.com/uuidjs/uuid/compare/v8.0.0...v8.1.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-26 14:52:11 +00:00
dependabot-preview[bot]
dcd17f886e Bump xterm-addon-unicode11 in /terminus-terminal
Bumps [xterm-addon-unicode11](https://github.com/xtermjs/xterm.js) from 0.2.0-beta.5 to 0.2.0.
- [Release notes](https://github.com/xtermjs/xterm.js/releases)
- [Commits](https://github.com/xtermjs/xterm.js/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-26 14:52:08 +00:00
dependabot-preview[bot]
2c94dea941 Bump xterm from 4.6.0-beta.41 to 4.6.0 in /terminus-terminal
Bumps [xterm](https://github.com/xtermjs/xterm.js) from 4.6.0-beta.41 to 4.6.0.
- [Release notes](https://github.com/xtermjs/xterm.js/releases)
- [Commits](https://github.com/xtermjs/xterm.js/commits/4.6.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-26 14:51:57 +00:00
dependabot-preview[bot]
7a2291f7db Bump js-yaml from 3.13.1 to 3.14.0 in /terminus-core
Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 3.13.1 to 3.14.0.
- [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.13.1...3.14.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-26 14:51:15 +00:00
Eugene
af0d9142ed Merge pull request #2579 from Eugeny/dependabot/npm_and_yarn/terminus-terminal/xterm-addon-serialize-0.3.0 2020-05-26 16:50:59 +02:00
Eugene
6ba7d5b78f Merge pull request #2577 from Eugeny/dependabot/npm_and_yarn/terminus-terminal/xterm-addon-search-0.7.0 2020-05-26 16:50:45 +02:00
Eugene
bbf035d5fd Merge pull request #2576 from Eugeny/dependabot/npm_and_yarn/terminus-terminal/xterm-addon-ligatures-0.3.0
Bump xterm-addon-ligatures from 0.3.0-beta.1 to 0.3.0 in /terminus-terminal
2020-05-26 16:50:25 +02:00
Eugene
84bc4369cb Merge pull request #2575 from Eugeny/dependabot/npm_and_yarn/terminus-terminal/xterm-addon-fit-0.4.0 2020-05-26 16:50:15 +02:00
Eugene
e01f77998c Merge pull request #2595 from Eugeny/dependabot/npm_and_yarn/electron-builder-22.6.1 2020-05-26 16:49:30 +02:00
Eugene Pankov
08acd4df46 depend on gnome-keyring (fixes #2203, fixes #2568) 2020-05-22 11:30:05 +02:00
dependabot-preview[bot]
2c9d968aa8 Bump typescript from 3.8.3 to 3.9.3
Bumps [typescript](https://github.com/Microsoft/TypeScript) from 3.8.3 to 3.9.3.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/compare/v3.8.3...v3.9.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-20 04:24:04 +00:00
dependabot-preview[bot]
19a3996861 Bump node-abi from 2.16.0 to 2.17.0 in /app
Bumps [node-abi](https://github.com/lgeiger/node-abi) from 2.16.0 to 2.17.0.
- [Release notes](https://github.com/lgeiger/node-abi/releases)
- [Commits](https://github.com/lgeiger/node-abi/compare/v2.16.0...v2.17.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-20 04:22:02 +00:00
Jonathan Beverley
6d187e8117 Add an option for Agent Forwarding
I don't understand why this is on by default, let alone not
configurable. Agent forwarding is a significant security concern, and
buggy agent forwarding is the cause of a couple existing bugs.
2020-05-19 12:09:07 -04:00
Jonathan Beverley
a7687a6fc2 Include pagent.exe in installer, Remove check for pageant (fixed Eugeny#350) 2020-05-19 12:08:55 -04:00
dependabot-preview[bot]
7cbec63039 Bump @typescript-eslint/parser from 2.31.0 to 2.34.0
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 2.31.0 to 2.34.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v2.34.0/packages/parser)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-19 04:23:17 +00:00
dependabot-preview[bot]
91320f1cd7 Bump electron-builder from 22.5.1 to 22.6.1
Bumps [electron-builder](https://github.com/electron-userland/electron-builder) from 22.5.1 to 22.6.1.
- [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/v22.5.1...v22.6.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-19 04:22:40 +00:00
dependabot-preview[bot]
5518ce5e0c Bump @types/js-yaml from 3.12.3 to 3.12.4 in /terminus-core
Bumps [@types/js-yaml](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/js-yaml) from 3.12.3 to 3.12.4.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/js-yaml)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-18 04:30:04 +00:00
dependabot-preview[bot]
d59c52d7a5 Bump @types/js-yaml from 3.12.3 to 3.12.4
Bumps [@types/js-yaml](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/js-yaml) from 3.12.3 to 3.12.4.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/js-yaml)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-18 04:22:03 +00:00
dependabot-preview[bot]
dd3a4cb289 Bump xterm-addon-serialize in /terminus-terminal
Bumps xterm-addon-serialize from 0.3.0-beta.4 to 0.3.0.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-14 04:25:51 +00:00
dependabot-preview[bot]
fc6ded4b1a Bump xterm-addon-search from 0.7.0-beta.2 to 0.7.0 in /terminus-terminal
Bumps [xterm-addon-search](https://github.com/xtermjs/xterm.js) from 0.7.0-beta.2 to 0.7.0.
- [Release notes](https://github.com/xtermjs/xterm.js/releases)
- [Commits](https://github.com/xtermjs/xterm.js/commits/0.7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-14 04:25:00 +00:00
dependabot-preview[bot]
d4f61b3846 Bump xterm-addon-ligatures in /terminus-terminal
Bumps [xterm-addon-ligatures](https://github.com/xtermjs/xterm.js) from 0.3.0-beta.1 to 0.3.0.
- [Release notes](https://github.com/xtermjs/xterm.js/releases)
- [Commits](https://github.com/xtermjs/xterm.js/commits/0.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-14 04:24:35 +00:00
dependabot-preview[bot]
ffad7b6ba7 Bump xterm-addon-fit from 0.4.0-beta.8 to 0.4.0 in /terminus-terminal
Bumps [xterm-addon-fit](https://github.com/xtermjs/xterm.js) from 0.4.0-beta.8 to 0.4.0.
- [Release notes](https://github.com/xtermjs/xterm.js/releases)
- [Commits](https://github.com/xtermjs/xterm.js/commits/0.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-14 04:24:10 +00:00
dependabot-preview[bot]
499f541328 Bump tslib from 1.11.1 to 2.0.0
Bumps [tslib](https://github.com/Microsoft/tslib) from 1.11.1 to 2.0.0.
- [Release notes](https://github.com/Microsoft/tslib/releases)
- [Commits](https://github.com/Microsoft/tslib/compare/1.11.1...2.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-14 04:23:36 +00:00
dependabot-preview[bot]
7c893a3c4b Bump xterm-addon-webgl from 0.7.0-beta.10 to 0.7.0 in /terminus-terminal
Bumps [xterm-addon-webgl](https://github.com/xtermjs/xterm.js) from 0.7.0-beta.10 to 0.7.0.
- [Release notes](https://github.com/xtermjs/xterm.js/releases)
- [Commits](https://github.com/xtermjs/xterm.js/commits/0.7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-14 04:23:24 +00:00
dependabot-preview[bot]
1f5c55826b Bump serialport from 8.0.7 to 9.0.0 in /app
Bumps [serialport](https://github.com/serialport/node-serialport) from 8.0.7 to 9.0.0.
- [Release notes](https://github.com/serialport/node-serialport/releases)
- [Changelog](https://github.com/serialport/node-serialport/blob/master/CHANGELOG.md)
- [Commits](https://github.com/serialport/node-serialport/compare/@serialport/bindings@8.0.7...@serialport/bindings@9.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-11 04:22:52 +00:00
Eugene Pankov
197824004e notarize pkg 2020-05-07 17:37:39 +02:00
Eugene Pankov
ee1d465bf6 Revert "separate mac builds"
This reverts commit 90cc06c3fd.
2020-05-07 13:00:42 +02:00
Eugene Pankov
12bb070def Revert "separate pkg/zip builds for macos"
This reverts commit 8cf0445b6d.
2020-05-07 12:59:26 +02:00
248 changed files with 12001 additions and 8881 deletions

View File

@@ -271,6 +271,114 @@
"contributions": [ "contributions": [
"code" "code"
] ]
},
{
"login": "3l0w",
"name": "Gwilherm Folliot",
"avatar_url": "https://avatars2.githubusercontent.com/u/37798980?v=4",
"profile": "https://github.com/3l0w",
"contributions": [
"code"
]
},
{
"login": "dimitory",
"name": "Dmitry Pronin",
"avatar_url": "https://avatars0.githubusercontent.com/u/475955?v=4",
"profile": "https://github.com/Dimitory",
"contributions": [
"code"
]
},
{
"login": "JonathanBeverley",
"name": "Jonathan Beverley",
"avatar_url": "https://avatars1.githubusercontent.com/u/20328966?v=4",
"profile": "https://github.com/JonathanBeverley",
"contributions": [
"code"
]
},
{
"login": "zend",
"name": "Zenghai Liang",
"avatar_url": "https://avatars1.githubusercontent.com/u/25160?v=4",
"profile": "https://github.com/zend",
"contributions": [
"code"
]
},
{
"login": "matishadow",
"name": "Mateusz Tracz",
"avatar_url": "https://avatars0.githubusercontent.com/u/9083085?v=4",
"profile": "https://about.me/matishadow",
"contributions": [
"code"
]
},
{
"login": "pinpins",
"name": "pinpin",
"avatar_url": "https://avatars3.githubusercontent.com/u/36234677?v=4",
"profile": "https://zergpool.com",
"contributions": [
"code"
]
},
{
"login": "TakuroOnoda",
"name": "Takuro Onoda",
"avatar_url": "https://avatars0.githubusercontent.com/u/1407926?v=4",
"profile": "https://github.com/TakuroOnoda",
"contributions": [
"code"
]
},
{
"login": "frauhottelmann",
"name": "frauhottelmann",
"avatar_url": "https://avatars2.githubusercontent.com/u/902705?v=4",
"profile": "https://github.com/frauhottelmann",
"contributions": [
"code"
]
},
{
"login": "VectorKappa",
"name": "Piotr Patalong",
"avatar_url": "https://avatars.githubusercontent.com/u/29167842?v=4",
"profile": "http://patalong.pl",
"contributions": [
"design"
]
},
{
"login": "clarkwang",
"name": "Clark Wang",
"avatar_url": "https://avatars.githubusercontent.com/u/157076?v=4",
"profile": "https://github.com/clarkwang",
"contributions": [
"code"
]
},
{
"login": "iamchating",
"name": "iamchating",
"avatar_url": "https://avatars.githubusercontent.com/u/7088153?v=4",
"profile": "https://github.com/iamchating",
"contributions": [
"code"
]
},
{
"login": "starxg",
"name": "starxg",
"avatar_url": "https://avatars.githubusercontent.com/u/34997494?v=4",
"profile": "https://github.com/starxg",
"contributions": [
"plugin"
]
} }
], ],
"contributorsPerLine": 7, "contributorsPerLine": 7,

View File

@@ -1,6 +1,8 @@
parser: '@typescript-eslint/parser' parser: '@typescript-eslint/parser'
parserOptions: parserOptions:
project: tsconfig.json project:
- tsconfig.json
- '*/tsconfig.typings.json'
extends: extends:
- 'plugin:@typescript-eslint/all' - 'plugin:@typescript-eslint/all'
plugins: plugins:
@@ -29,7 +31,6 @@ rules:
'@typescript-eslint/no-magic-numbers': off '@typescript-eslint/no-magic-numbers': off
'@typescript-eslint/member-delimiter-style': off '@typescript-eslint/member-delimiter-style': off
'@typescript-eslint/promise-function-async': off '@typescript-eslint/promise-function-async': off
'@typescript-eslint/no-unnecessary-type-assertion': off
'@typescript-eslint/require-array-sort-compare': off '@typescript-eslint/require-array-sort-compare': off
'@typescript-eslint/no-floating-promises': off '@typescript-eslint/no-floating-promises': off
'@typescript-eslint/prefer-readonly': off '@typescript-eslint/prefer-readonly': off
@@ -37,6 +38,8 @@ rules:
'@typescript-eslint/strict-boolean-expressions': off '@typescript-eslint/strict-boolean-expressions': off
'@typescript-eslint/no-misused-promises': off '@typescript-eslint/no-misused-promises': off
'@typescript-eslint/typedef': off '@typescript-eslint/typedef': off
'@typescript-eslint/consistent-type-imports': off
'@typescript-eslint/sort-type-union-intersection-members': off
'@typescript-eslint/no-use-before-define': '@typescript-eslint/no-use-before-define':
- error - error
- classes: false - classes: false
@@ -53,7 +56,8 @@ rules:
computed-property-spacing: computed-property-spacing:
- error - error
- never - never
comma-dangle: comma-dangle: off
'@typescript-eslint/comma-dangle':
- error - error
- always-multiline - always-multiline
curly: error curly: error
@@ -80,7 +84,8 @@ rules:
argsIgnorePattern: ^_ argsIgnorePattern: ^_
no-undef: error no-undef: error
no-var: error no-var: error
object-curly-spacing: object-curly-spacing: off
'@typescript-eslint/object-curly-spacing':
- error - error
- always - always
quote-props: quote-props:
@@ -93,14 +98,22 @@ rules:
- error - error
- single - single
- allowTemplateLiterals: true - allowTemplateLiterals: true
'@typescript-eslint/no-confusing-void-expression': off
'@typescript-eslint/no-non-null-assertion': off '@typescript-eslint/no-non-null-assertion': off
'@typescript-eslint/no-unnecessary-condition': off '@typescript-eslint/no-unnecessary-condition':
'@typescript-eslint/no-untyped-public-signature': off # bugs out on constructors - error
- allowConstantLoopConditions: true
'@typescript-eslint/restrict-template-expressions': off '@typescript-eslint/restrict-template-expressions': off
'@typescript-eslint/no-dynamic-delete': off
'@typescript-eslint/prefer-nullish-coalescing': off
'@typescript-eslint/prefer-readonly-parameter-types': off '@typescript-eslint/prefer-readonly-parameter-types': off
'@typescript-eslint/no-unsafe-member-access': off '@typescript-eslint/no-unsafe-member-access': off
'@typescript-eslint/no-unsafe-call': off '@typescript-eslint/no-unsafe-call': off
'@typescript-eslint/no-unsafe-return': off '@typescript-eslint/no-unsafe-return': off
'@typescript-eslint/no-base-to-string': off # broken in typescript-eslint '@typescript-eslint/no-unsafe-assignment': off
'@typescript-eslint/naming-convention': off
'@typescript-eslint/lines-between-class-members':
- error
- exceptAfterSingleLine: true
'@typescript-eslint/dot-notation': off
'@typescript-eslint/no-implicit-any-catch': off
'@typescript-eslint/member-ordering': off
'@typescript-eslint/no-var-requires': off

56
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,56 @@
version: 2
updates:
- package-ecosystem: npm
directory: "/"
schedule:
interval: daily
time: "04:00"
open-pull-requests-limit: 20
- package-ecosystem: npm
directory: "/app"
schedule:
interval: daily
time: "04:00"
open-pull-requests-limit: 20
- package-ecosystem: npm
directory: "/terminus-core"
schedule:
interval: daily
time: "04:00"
open-pull-requests-limit: 20
- package-ecosystem: npm
directory: "/terminus-settings"
schedule:
interval: daily
time: "04:00"
open-pull-requests-limit: 20
- package-ecosystem: npm
directory: "/terminus-terminal"
schedule:
interval: daily
time: "04:00"
open-pull-requests-limit: 20
- package-ecosystem: npm
directory: "/terminus-community-color-schemes"
schedule:
interval: daily
time: "04:00"
open-pull-requests-limit: 20
- package-ecosystem: npm
directory: "/terminus-plugin-manager"
schedule:
interval: daily
time: "04:00"
open-pull-requests-limit: 20
- package-ecosystem: npm
directory: "/terminus-ssh"
schedule:
interval: daily
time: "04:00"
open-pull-requests-limit: 20
- package-ecosystem: github-actions
directory: "/"
schedule:
interval: daily
time: "04:00"
open-pull-requests-limit: 20

View File

@@ -11,7 +11,7 @@ jobs:
- name: Installing Node - name: Installing Node
uses: actions/setup-node@v1 uses: actions/setup-node@v1
with: with:
node-version: 10 node-version: 15
- name: Build - name: Build
run: | run: |
@@ -23,6 +23,7 @@ jobs:
cd .. cd ..
rm app/node_modules/.yarn-integrity rm app/node_modules/.yarn-integrity
yarn yarn
yarn run build:typings
yarn run docs yarn run docs
rsync -e "ssh -o StrictHostKeyChecking=no" -arv docs/api/ root@ajenti.org:/srv/terminus-docs/ rsync -e "ssh -o StrictHostKeyChecking=no" -arv docs/api/ root@ajenti.org:/srv/terminus-docs/

View File

@@ -11,7 +11,7 @@ jobs:
- name: Installing Node - name: Installing Node
uses: actions/setup-node@v1 uses: actions/setup-node@v1
with: with:
node-version: 10 node-version: 15
- name: Install deps - name: Install deps
run: | run: |
@@ -22,5 +22,8 @@ jobs:
rm app/node_modules/.yarn-integrity rm app/node_modules/.yarn-integrity
yarn yarn
- name: Build typings
run: yarn run build:typings
- name: Lint - name: Lint
run: yarn run lint run: yarn run lint

View File

@@ -2,7 +2,7 @@ name: Linux Build
on: [push, pull_request] on: [push, pull_request]
jobs: jobs:
build: build:
runs-on: ubuntu-latest runs-on: ubuntu-18.04
steps: steps:
- name: Checkout - name: Checkout
@@ -11,16 +11,21 @@ jobs:
- name: Install Node - name: Install Node
uses: actions/setup-node@v1 uses: actions/setup-node@v1
with: with:
node-version: 10 node-version: 15
- name: Install deps - name: Install deps
run: | run: |
sudo apt-get install bsdtar
npm i -g yarn@1.19.1 npm i -g yarn@1.19.1
cd app cd app
yarn yarn
cd .. cd ..
rm app/node_modules/.yarn-integrity rm app/node_modules/.yarn-integrity
yarn yarn
./node_modules/.bin/patch-package
cd app
../node_modules/.bin/patch-package
cd ..
- name: Build native deps - name: Build native deps
run: scripts/build-native.js run: scripts/build-native.js
@@ -36,6 +41,16 @@ jobs:
env: env:
DEBUG: electron-builder,electron-builder:* DEBUG: electron-builder,electron-builder:*
GH_TOKEN: ${{ secrets.GH_TOKEN }} GH_TOKEN: ${{ secrets.GH_TOKEN }}
USE_HARD_LINKS: false
- name: Upload symbols
run: |
sudo npm install -g @sentry/cli --unsafe-perm
./scripts/sentry-upload.js
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_ORG: ${{ secrets.SENTRY_ORG }}
SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }}
- name: Package artifacts - name: Package artifacts
run: | run: |
@@ -43,6 +58,8 @@ jobs:
mv dist/*.deb artifact-deb/ || true mv dist/*.deb artifact-deb/ || true
mkdir artifact-rpm mkdir artifact-rpm
mv dist/*.rpm artifact-rpm/ || true mv dist/*.rpm artifact-rpm/ || true
mkdir artifact-pacman
mv dist/*.pacman artifact-pacman/ || true
mkdir artifact-snap mkdir artifact-snap
mv dist/*.snap artifact-snap/ || true mv dist/*.snap artifact-snap/ || true
mkdir artifact-tar.gz mkdir artifact-tar.gz
@@ -51,19 +68,25 @@ jobs:
- uses: actions/upload-artifact@master - uses: actions/upload-artifact@master
name: Upload DEB name: Upload DEB
with: with:
name: Linux .deb name: Linux DEB
path: artifact-deb path: artifact-deb
- uses: actions/upload-artifact@master - uses: actions/upload-artifact@master
name: Upload RPM name: Upload RPM
with: with:
name: Linux .rpm name: Linux RPM
path: artifact-rpm path: artifact-rpm
- uses: actions/upload-artifact@master
name: Upload Pacman Package
with:
name: Linux Pacman
path: artifact-pacman
- uses: actions/upload-artifact@master - uses: actions/upload-artifact@master
name: Upload Snap name: Upload Snap
with: with:
name: Linux .snap name: Linux Snap
path: artifact-snap path: artifact-snap
- uses: actions/upload-artifact@master - uses: actions/upload-artifact@master

View File

@@ -1,64 +0,0 @@
name: macOS Build (ZIP)
on: [push, pull_request]
jobs:
build:
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@v1
- name: Installing Node
uses: actions/setup-node@v1
with:
node-version: 10
- name: Install deps
run: |
sudo npm i -g yarn@1.19.1
cd app
yarn
cd ..
rm app/node_modules/.yarn-integrity
yarn
- name: Build native deps
run: scripts/build-native.js
- name: Webpack
run: yarn run build
- name: Prepackage plugins
run: scripts/prepackage-plugins.js
# Prevent permission corruption caused by electron-builder
# This is the reason there's a separate workflow for the ZIP build
- run: sed -i '' 's/updateInfo = await/\/\/updateInfo = await/g' node_modules/app-builder-lib/out/targets/ArchiveTarget.js
- name: Build and sign packages
run: scripts/build-macos-zip.js
if: github.repository == 'Eugeny/terminus' && github.event_name == 'push'
env:
#DEBUG: electron-builder,electron-builder:*
GH_TOKEN: ${{ secrets.GH_TOKEN }}
CSC_LINK: ${{ secrets.CSC_LINK }}
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
APPSTORE_USERNAME: ${{ secrets.APPSTORE_USERNAME }}
APPSTORE_PASSWORD: ${{ secrets.APPSTORE_PASSWORD }}
- name: Build packages without signing
run: scripts/build-macos.js
if: github.repository != 'Eugeny/terminus' || github.event_name != 'push'
env:
DEBUG: electron-builder,electron-builder:*
- name: Package artifacts
run: |
mkdir artifact-zip
mv dist/*.zip artifact-zip/
- uses: actions/upload-artifact@master
name: Upload ZIP
with:
name: macOS .zip
path: artifact-zip

View File

@@ -2,7 +2,12 @@ name: macOS Build
on: [push, pull_request] on: [push, pull_request]
jobs: jobs:
build: build:
runs-on: macos-latest runs-on: macos-11.0
strategy:
matrix:
include:
- arch: x86_64
- arch: arm64
steps: steps:
- name: Checkout - name: Checkout
@@ -11,50 +16,80 @@ jobs:
- name: Installing Node - name: Installing Node
uses: actions/setup-node@v1 uses: actions/setup-node@v1
with: with:
node-version: 10 node-version: 15
- name: Install deps - name: Install deps
run: | run: |
sudo npm i -g yarn@1.19.1 sudo npm i -g yarn@1.22.1
cd app cd app
yarn yarn
cd .. cd ..
rm app/node_modules/.yarn-integrity rm app/node_modules/.yarn-integrity
yarn yarn
./node_modules/.bin/patch-package
cd app
../node_modules/.bin/patch-package
cd ..
- name: Build native deps - name: Build native deps
run: scripts/build-native.js run: scripts/build-native.js
env:
ARCH: ${{matrix.arch}}
- name: Webpack - name: Webpack
run: yarn run build run: yarn run build
- name: Prepackage plugins - name: Prepackage plugins
run: scripts/prepackage-plugins.js run: scripts/prepackage-plugins.js
env:
ARCH: ${{matrix.arch}}
- run: sed -i '' 's/updateInfo = await/\/\/updateInfo = await/g' node_modules/app-builder-lib/out/targets/ArchiveTarget.js
- name: Build and sign packages - name: Build and sign packages
run: scripts/build-macos.js run: scripts/build-macos.js
if: github.repository == 'Eugeny/terminus' && github.event_name == 'push' if: github.repository == 'Eugeny/terminus' && github.event_name == 'push'
env: env:
#DEBUG: electron-builder,electron-builder:* ARCH: ${{matrix.arch}}
GH_TOKEN: ${{ secrets.GH_TOKEN }} GH_TOKEN: ${{ secrets.GH_TOKEN }}
CSC_LINK: ${{ secrets.CSC_LINK }} CSC_LINK: ${{ secrets.CSC_LINK }}
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }} CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
APPSTORE_USERNAME: ${{ secrets.APPSTORE_USERNAME }} APPSTORE_USERNAME: ${{ secrets.APPSTORE_USERNAME }}
APPSTORE_PASSWORD: ${{ secrets.APPSTORE_PASSWORD }} APPSTORE_PASSWORD: ${{ secrets.APPSTORE_PASSWORD }}
USE_HARD_LINKS: false
# DEBUG: electron-builder,electron-builder:*
- name: Build packages without signing - name: Build packages without signing
run: scripts/build-macos.js run: scripts/build-macos.js
if: github.repository != 'Eugeny/terminus' || github.event_name != 'push' if: github.repository != 'Eugeny/terminus' || github.event_name != 'push'
env: env:
DEBUG: electron-builder,electron-builder:* ARCH: ${{matrix.arch}}
# DEBUG: electron-builder,electron-builder:*
- name: Upload symbols
run: |
sudo npm install -g @sentry/cli --unsafe-perm
./scripts/sentry-upload.js
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_ORG: ${{ secrets.SENTRY_ORG }}
SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }}
- name: Package artifacts - name: Package artifacts
run: | run: |
mkdir artifact-pkg mkdir artifact-pkg
mv dist/*.pkg artifact-pkg/ mv dist/*.pkg artifact-pkg/
mkdir artifact-zip
mv dist/*.zip artifact-zip/
- uses: actions/upload-artifact@master - uses: actions/upload-artifact@master
name: Upload PKG name: Upload PKG
with: with:
name: macOS .pkg name: macOS .pkg (${{matrix.arch}})
path: artifact-pkg path: artifact-pkg
- uses: actions/upload-artifact@master
name: Upload ZIP
with:
name: macOS .zip (${{matrix.arch}})
path: artifact-zip

View File

@@ -11,7 +11,7 @@ jobs:
- name: Installing Node - name: Installing Node
uses: actions/setup-node@v1 uses: actions/setup-node@v1
with: with:
node-version: 10 node-version: 14
- name: Build - name: Build
shell: powershell shell: powershell
@@ -34,6 +34,15 @@ jobs:
run: node scripts/build-windows.js run: node scripts/build-windows.js
if: github.repository != 'Eugeny/terminus' || github.event_name != 'push' if: github.repository != 'Eugeny/terminus' || github.event_name != 'push'
- name: Upload symbols
run: |
npm install @sentry/cli
node scripts/sentry-upload.js
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_ORG: ${{ secrets.SENTRY_ORG }}
SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }}
- name: Package artifacts - name: Package artifacts
run: | run: |
mkdir artifact-setup mkdir artifact-setup

6
.gitignore vendored
View File

@@ -13,6 +13,9 @@ dist
*.xcuserstate *.xcuserstate
*.wixpdb *.wixpdb
.DS_Store
.DS_Store?
coverage coverage
.nyc_output .nyc_output
npm-debug.log npm-debug.log
@@ -28,3 +31,6 @@ docs/api
.electron-symbols .electron-symbols
sentry.properties sentry.properties
sentry-symbols.js sentry-symbols.js
terminus-ssh/util/pagent.exe
*.psd

View File

@@ -1,5 +1,5 @@
language: node_js language: node_js
node_js: 11 node_js: 15
stages: stages:
- Build - Build

View File

@@ -10,27 +10,25 @@ First, install the dependencies:
``` ```
# macOS/Linux: # macOS/Linux:
npm install yarn
./scripts/install-deps.js
./scripts/build-native.js ./scripts/build-native.js
# Windows: # Windows:
npm -g install windows-build-tools npm -g install windows-build-tools
npm install yarn
node scripts\install-deps.js
node scripts\build-native.js node scripts\build-native.js
``` ```
Now, check if your build is working: Now, check if your build is working:
``` ```
npm run build yarn run build
``` ```
Start Terminus with Start Terminus with
``` ```
npm start yarn start
``` ```
# Project layout # Project layout

167
README.md
View File

@@ -1,44 +1,92 @@
![](https://github.com/Eugeny/terminus/raw/master/docs/readme.png) ![](docs/readme.png)
<p align="center"> <p align="center">
<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://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> <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=RELEASE&logo=github&style=for-the-badge"></a> <a href="https://nightly.link/Eugeny/terminus/workflows/windows/master"><img src="https://shields.io/badge/-Nightly-blue?logo=windows&style=for-the-badge"/></a> <a href="https://nightly.link/Eugeny/terminus/workflows/macos/master"><img src="https://shields.io/badge/-Nightly-black?logo=apple&style=for-the-badge"/></a> <a href="https://nightly.link/Eugeny/terminus/workflows/linux/master"><img src="https://shields.io/badge/-Nightly-orange?logo=linux&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=magenta&logo=gitter&style=for-the-badge"></a>
</p>
<p align="center">
<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> </p>
---- ----
**Terminus** is a highly configurable terminal emulator for Windows, macOS and Linux **Terminus** is a highly configurable terminal emulator, SSH and serial client for Windows, macOS and Linux
* Integrated SSH client and connection manager * Integrated SSH client and connection manager
* Theming and color schemes * Integrated serial terminal
* Fully configurable shortcuts * Theming and color schemes
* Split panes * Fully configurable shortcuts and multi-chord shortcuts
* Remembers your tabs * Split panes
* PowerShell (and PS Core), WSL, Git-Bash, Cygwin, Cmder and CMD support * Remembers your tabs
* Direct file transfer from/to SSH sessions via Zmodem * PowerShell (and PS Core), WSL, Git-Bash, Cygwin, Cmder and CMD support
* Full Unicode support including double-width characters * Direct file transfer from/to SSH sessions via Zmodem
* Doesn't choke on fast-flowing outputs * Full Unicode support including double-width characters
* Proper shell experience on Windows including tab completion (via Clink) * Doesn't choke on fast-flowing outputs
* 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) [![Buy me a coffee](https://github.com/Eugeny/terminus/raw/master/docs/kofi.png)](https://ko-fi.com/eugeny)
--- ---
# Contents
- [Contents](#contents)
- [What Terminus is and isn't](#what-terminus-is-and-isnt)
- [Terminal features](#terminal-features)
- [SSH Client](#ssh-client)
- [Serial Terminal](#serial-terminal)
- [Portable](#portable)
- [Plugins](#plugins)
- [Themes](#themes)
- [Contributing](#contributing)
<a name="about"></a>
# What Terminus is and isn't
* **Terminus is** an alternative to Windows' standard terminal (conhost), PowerShell ISE, PuTTY or iTerm * **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) * **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)
--- <a name="terminal"></a>
# Terminal features
![](docs/readme-terminal.png)
* A V220 terminal + various extensions
* Multiple nested split panes
* Tabs on any side of the window
* Optional dockable window with a global spawn hotkey ("Quake console")
* Progress detection
* Notification on process completion
* Bracketed paste, multiline paste warnings
* Font ligatures
* Custom shell profiles
* Optional RMB paste and copy-on select (PuTTY style)
<a name="ssh"></a>
# SSH Client
![](docs/readme-ssh.png)
* SSH2 client with a connection manager
* X11 and port forwarding
* Automatic jump host management
* Agent forwarding (incl. Pageant and Windows native OpenSSH Agent)
* Login scripts
<a name="serial"></a>
# Serial Terminal
* Saved connections
* Readline input support
* Optional hex byte-by-byte input and hexdump output
* Newline conversion
* Automatic reconnection
<a name="portable"></a>
# Portable # Portable
For portable in windows, user can create folder `data` at the same directory as `Terminal.exe` to save the settings. Terminus will run as a portable app on Windows, if you create a `data` folder in the same location where `Terminus.exe` lives.
<a name="plugins"></a>
# Plugins # Plugins
Plugins and themes can be installed directly from the Settings view inside Terminus. Plugins and themes can be installed directly from the Settings view inside Terminus.
@@ -48,7 +96,9 @@ Plugins and themes can be installed directly from the Settings view inside Termi
* [quick-cmds](https://github.com/Domain/terminus-quick-cmds) - quickly send commands to one or all 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 * [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 * [scrollbar](https://github.com/kbjr/terminus-scrollbar) - adds a scrollbar to hterm tabs
* [sync-config](https://github.com/starxg/terminus-sync-config) - sync the config to Gist or Gitee
<a name="themes"></a>
# Themes # Themes
* [hype](https://github.com/Eugeny/terminus-theme-hype) - a Hyper inspired theme * [hype](https://github.com/Eugeny/terminus-theme-hype) - a Hyper inspired theme
@@ -57,8 +107,7 @@ Plugins and themes can be installed directly from the Settings view inside Termi
* [windows10](https://www.npmjs.com/package/terminus-theme-windows10) * [windows10](https://www.npmjs.com/package/terminus-theme-windows10)
* [altair](https://github.com/yxuko/terminus-altair) * [altair](https://github.com/yxuko/terminus-altair)
--- <a name="contributing"></a>
# Contributing # Contributing
Pull requests and plugins are welcome! Pull requests and plugins are welcome!
@@ -66,6 +115,7 @@ Pull requests and plugins are welcome!
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. 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.
--- ---
<a name="contributors"></a>
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)): Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
@@ -74,48 +124,63 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
<!-- markdownlint-disable --> <!-- markdownlint-disable -->
<table> <table>
<tr> <tr>
<td align="center"><a href="http://www.russellmyers.com"><img src="https://avatars2.githubusercontent.com/u/184085?v=4" width="100px;" alt=""/><br /><sub><b>Russell Myers</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=mezner" title="Code">💻</a></td> <td align="center"><a href="http://www.russellmyers.com"><img src="https://avatars2.githubusercontent.com/u/184085?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Russell Myers</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=mezner" title="Code">💻</a></td>
<td align="center"><a href="http://www.morwire.com"><img src="https://avatars1.githubusercontent.com/u/3991658?v=4" width="100px;" alt=""/><br /><sub><b>Austin Warren</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=ehwarren" title="Code">💻</a></td> <td align="center"><a href="http://www.morwire.com"><img src="https://avatars1.githubusercontent.com/u/3991658?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Austin Warren</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=ehwarren" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/Drachenkaetzchen"><img src="https://avatars1.githubusercontent.com/u/162974?v=4" width="100px;" alt=""/><br /><sub><b>Felicia Hummel</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=Drachenkaetzchen" title="Code">💻</a></td> <td align="center"><a href="https://github.com/Drachenkaetzchen"><img src="https://avatars1.githubusercontent.com/u/162974?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Felicia Hummel</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=Drachenkaetzchen" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/mikemaccana"><img src="https://avatars2.githubusercontent.com/u/172594?v=4" width="100px;" alt=""/><br /><sub><b>Mike MacCana</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=mikemaccana" title="Tests">⚠️</a> <a href="#design-mikemaccana" title="Design">🎨</a></td> <td align="center"><a href="https://github.com/mikemaccana"><img src="https://avatars2.githubusercontent.com/u/172594?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Mike MacCana</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=mikemaccana" title="Tests">⚠️</a> <a href="#design-mikemaccana" title="Design">🎨</a></td>
<td align="center"><a href="https://github.com/yxuko"><img src="https://avatars1.githubusercontent.com/u/1786317?v=4" width="100px;" alt=""/><br /><sub><b>Yacine Kanzari</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=yxuko" title="Code">💻</a></td> <td align="center"><a href="https://github.com/yxuko"><img src="https://avatars1.githubusercontent.com/u/1786317?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Yacine Kanzari</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=yxuko" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/BBJip"><img src="https://avatars2.githubusercontent.com/u/32908927?v=4" width="100px;" alt=""/><br /><sub><b>BBJip</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=BBJip" title="Code">💻</a></td> <td align="center"><a href="https://github.com/BBJip"><img src="https://avatars2.githubusercontent.com/u/32908927?v=4?s=100" width="100px;" alt=""/><br /><sub><b>BBJip</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=BBJip" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/Futagirl"><img src="https://avatars2.githubusercontent.com/u/33533958?v=4" width="100px;" alt=""/><br /><sub><b>Futagirl</b></sub></a><br /><a href="#design-Futagirl" title="Design">🎨</a></td> <td align="center"><a href="https://github.com/Futagirl"><img src="https://avatars2.githubusercontent.com/u/33533958?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Futagirl</b></sub></a><br /><a href="#design-Futagirl" title="Design">🎨</a></td>
</tr> </tr>
<tr> <tr>
<td align="center"><a href="https://www.levrik.io"><img src="https://avatars3.githubusercontent.com/u/9491603?v=4" width="100px;" alt=""/><br /><sub><b>Levin Rickert</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=levrik" title="Code">💻</a></td> <td align="center"><a href="https://www.levrik.io"><img src="https://avatars3.githubusercontent.com/u/9491603?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Levin Rickert</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=levrik" title="Code">💻</a></td>
<td align="center"><a href="https://kwonoj.github.io"><img src="https://avatars2.githubusercontent.com/u/1210596?v=4" width="100px;" alt=""/><br /><sub><b>OJ Kwon</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=kwonoj" title="Code">💻</a></td> <td align="center"><a href="https://kwonoj.github.io"><img src="https://avatars2.githubusercontent.com/u/1210596?v=4?s=100" width="100px;" alt=""/><br /><sub><b>OJ Kwon</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=kwonoj" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/Domain"><img src="https://avatars2.githubusercontent.com/u/903197?v=4" width="100px;" alt=""/><br /><sub><b>domain</b></sub></a><br /><a href="#plugin-Domain" title="Plugin/utility libraries">🔌</a> <a href="https://github.com/Eugeny/terminus/commits?author=Domain" title="Code">💻</a></td> <td align="center"><a href="https://github.com/Domain"><img src="https://avatars2.githubusercontent.com/u/903197?v=4?s=100" width="100px;" alt=""/><br /><sub><b>domain</b></sub></a><br /><a href="#plugin-Domain" title="Plugin/utility libraries">🔌</a> <a href="https://github.com/Eugeny/terminus/commits?author=Domain" title="Code">💻</a></td>
<td align="center"><a href="http://www.jbrumond.me"><img src="https://avatars1.githubusercontent.com/u/195127?v=4" width="100px;" alt=""/><br /><sub><b>James Brumond</b></sub></a><br /><a href="#plugin-kbjr" title="Plugin/utility libraries">🔌</a></td> <td align="center"><a href="http://www.jbrumond.me"><img src="https://avatars1.githubusercontent.com/u/195127?v=4?s=100" width="100px;" alt=""/><br /><sub><b>James Brumond</b></sub></a><br /><a href="#plugin-kbjr" title="Plugin/utility libraries">🔌</a></td>
<td align="center"><a href="http://www.growingwiththeweb.com"><img src="https://avatars0.githubusercontent.com/u/2193314?v=4" width="100px;" alt=""/><br /><sub><b>Daniel Imms</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=Tyriar" title="Code">💻</a> <a href="#plugin-Tyriar" title="Plugin/utility libraries">🔌</a> <a href="https://github.com/Eugeny/terminus/commits?author=Tyriar" title="Tests">⚠️</a></td> <td align="center"><a href="http://www.growingwiththeweb.com"><img src="https://avatars0.githubusercontent.com/u/2193314?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Daniel Imms</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=Tyriar" title="Code">💻</a> <a href="#plugin-Tyriar" title="Plugin/utility libraries">🔌</a> <a href="https://github.com/Eugeny/terminus/commits?author=Tyriar" title="Tests">⚠️</a></td>
<td align="center"><a href="https://github.com/baflo"><img src="https://avatars2.githubusercontent.com/u/834350?v=4" width="100px;" alt=""/><br /><sub><b>Florian Bachmann</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=baflo" title="Code">💻</a></td> <td align="center"><a href="https://github.com/baflo"><img src="https://avatars2.githubusercontent.com/u/834350?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Florian Bachmann</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=baflo" title="Code">💻</a></td>
<td align="center"><a href="http://michael-kuehnel.de"><img src="https://avatars2.githubusercontent.com/u/441011?v=4" width="100px;" alt=""/><br /><sub><b>Michael Kühnel</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=mischah" title="Code">💻</a> <a href="#design-mischah" title="Design">🎨</a></td> <td align="center"><a href="http://michael-kuehnel.de"><img src="https://avatars2.githubusercontent.com/u/441011?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Michael Kühnel</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=mischah" title="Code">💻</a> <a href="#design-mischah" title="Design">🎨</a></td>
</tr> </tr>
<tr> <tr>
<td align="center"><a href="https://github.com/NieLeben"><img src="https://avatars3.githubusercontent.com/u/47182955?v=4" width="100px;" alt=""/><br /><sub><b>Tilmann Meyer</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=NieLeben" title="Code">💻</a></td> <td align="center"><a href="https://github.com/NieLeben"><img src="https://avatars3.githubusercontent.com/u/47182955?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Tilmann Meyer</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=NieLeben" title="Code">💻</a></td>
<td align="center"><a href="http://www.jubeat.net"><img src="https://avatars3.githubusercontent.com/u/11289158?v=4" width="100px;" alt=""/><br /><sub><b>PM Extra</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/issues?q=author%3APMExtra" title="Bug reports">🐛</a></td> <td align="center"><a href="http://www.jubeat.net"><img src="https://avatars3.githubusercontent.com/u/11289158?v=4?s=100" width="100px;" alt=""/><br /><sub><b>PM Extra</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/issues?q=author%3APMExtra" title="Bug reports">🐛</a></td>
<td align="center"><a href="https://jjuhas.keybase.pub//"><img src="https://avatars1.githubusercontent.com/u/6438760?v=4" width="100px;" alt=""/><br /><sub><b>Jonathan</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=IgnusG" title="Code">💻</a></td> <td align="center"><a href="https://jjuhas.keybase.pub//"><img src="https://avatars1.githubusercontent.com/u/6438760?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jonathan</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=IgnusG" title="Code">💻</a></td>
<td align="center"><a href="https://hans-koch.me"><img src="https://avatars0.githubusercontent.com/u/1093709?v=4" width="100px;" alt=""/><br /><sub><b>Hans Koch</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=hammster" title="Code">💻</a></td> <td align="center"><a href="https://hans-koch.me"><img src="https://avatars0.githubusercontent.com/u/1093709?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Hans Koch</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=hammster" title="Code">💻</a></td>
<td align="center"><a href="http://thepuzzlemaker.info"><img src="https://avatars3.githubusercontent.com/u/12666617?v=4" width="100px;" alt=""/><br /><sub><b>Dak Smyth</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=ThePuzzlemaker" title="Code">💻</a></td> <td align="center"><a href="http://thepuzzlemaker.info"><img src="https://avatars3.githubusercontent.com/u/12666617?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Dak Smyth</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=ThePuzzlemaker" title="Code">💻</a></td>
<td align="center"><a href="http://yfwz100.github.io"><img src="https://avatars2.githubusercontent.com/u/983211?v=4" width="100px;" alt=""/><br /><sub><b>Wang Zhi</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=yfwz100" title="Code">💻</a></td> <td align="center"><a href="http://yfwz100.github.io"><img src="https://avatars2.githubusercontent.com/u/983211?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Wang Zhi</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=yfwz100" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/jack1142"><img src="https://avatars0.githubusercontent.com/u/6032823?v=4" width="100px;" alt=""/><br /><sub><b>jack1142</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=jack1142" title="Code">💻</a></td> <td align="center"><a href="https://github.com/jack1142"><img src="https://avatars0.githubusercontent.com/u/6032823?v=4?s=100" width="100px;" alt=""/><br /><sub><b>jack1142</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=jack1142" title="Code">💻</a></td>
</tr> </tr>
<tr> <tr>
<td align="center"><a href="https://github.com/hdougie"><img src="https://avatars1.githubusercontent.com/u/450799?v=4" width="100px;" alt=""/><br /><sub><b>Howie Douglas</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=hdougie" title="Code">💻</a></td> <td align="center"><a href="https://github.com/hdougie"><img src="https://avatars1.githubusercontent.com/u/450799?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Howie Douglas</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=hdougie" title="Code">💻</a></td>
<td align="center"><a href="https://chriskaczor.com"><img src="https://avatars2.githubusercontent.com/u/180906?v=4" width="100px;" alt=""/><br /><sub><b>Chris Kaczor</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=ckaczor" title="Code">💻</a></td> <td align="center"><a href="https://chriskaczor.com"><img src="https://avatars2.githubusercontent.com/u/180906?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Chris Kaczor</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=ckaczor" title="Code">💻</a></td>
<td align="center"><a href="https://www.boxmein.net"><img src="https://avatars1.githubusercontent.com/u/358714?v=4" width="100px;" alt=""/><br /><sub><b>Johannes Kadak</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=boxmein" title="Code">💻</a></td> <td align="center"><a href="https://www.boxmein.net"><img src="https://avatars1.githubusercontent.com/u/358714?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Johannes Kadak</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=boxmein" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/LeSeulArtichaut"><img src="https://avatars1.githubusercontent.com/u/38361244?v=4" width="100px;" alt=""/><br /><sub><b>LeSeulArtichaut</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=LeSeulArtichaut" title="Code">💻</a></td> <td align="center"><a href="https://github.com/LeSeulArtichaut"><img src="https://avatars1.githubusercontent.com/u/38361244?v=4?s=100" width="100px;" alt=""/><br /><sub><b>LeSeulArtichaut</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=LeSeulArtichaut" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/CyrilTaylor"><img src="https://avatars0.githubusercontent.com/u/12631466?v=4" width="100px;" alt=""/><br /><sub><b>Cyril Taylor</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=CyrilTaylor" title="Code">💻</a></td> <td align="center"><a href="https://github.com/CyrilTaylor"><img src="https://avatars0.githubusercontent.com/u/12631466?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Cyril Taylor</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=CyrilTaylor" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/nstefanou"><img src="https://avatars3.githubusercontent.com/u/51129173?v=4" width="100px;" alt=""/><br /><sub><b>nstefanou</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=nstefanou" title="Code">💻</a> <a href="#plugin-nstefanou" title="Plugin/utility libraries">🔌</a></td> <td align="center"><a href="https://github.com/nstefanou"><img src="https://avatars3.githubusercontent.com/u/51129173?v=4?s=100" width="100px;" alt=""/><br /><sub><b>nstefanou</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=nstefanou" title="Code">💻</a> <a href="#plugin-nstefanou" title="Plugin/utility libraries">🔌</a></td>
<td align="center"><a href="https://github.com/orin220444"><img src="https://avatars3.githubusercontent.com/u/30747229?v=4" width="100px;" alt=""/><br /><sub><b>orin220444</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=orin220444" title="Code">💻</a></td> <td align="center"><a href="https://github.com/orin220444"><img src="https://avatars3.githubusercontent.com/u/30747229?v=4?s=100" width="100px;" alt=""/><br /><sub><b>orin220444</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=orin220444" title="Code">💻</a></td>
</tr> </tr>
<tr> <tr>
<td align="center"><a href="https://github.com/Goobles"><img src="https://avatars3.githubusercontent.com/u/8776771?v=4" width="100px;" alt=""/><br /><sub><b>Gobius Dolhain</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=Goobles" title="Code">💻</a></td> <td align="center"><a href="https://github.com/Goobles"><img src="https://avatars3.githubusercontent.com/u/8776771?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Gobius Dolhain</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=Goobles" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/3l0w"><img src="https://avatars2.githubusercontent.com/u/37798980?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Gwilherm Folliot</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=3l0w" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/Dimitory"><img src="https://avatars0.githubusercontent.com/u/475955?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Dmitry Pronin</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=dimitory" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/JonathanBeverley"><img src="https://avatars1.githubusercontent.com/u/20328966?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jonathan Beverley</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=JonathanBeverley" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/zend"><img src="https://avatars1.githubusercontent.com/u/25160?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Zenghai Liang</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=zend" title="Code">💻</a></td>
<td align="center"><a href="https://about.me/matishadow"><img src="https://avatars0.githubusercontent.com/u/9083085?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Mateusz Tracz</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=matishadow" title="Code">💻</a></td>
<td align="center"><a href="https://zergpool.com"><img src="https://avatars3.githubusercontent.com/u/36234677?v=4?s=100" width="100px;" alt=""/><br /><sub><b>pinpin</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=pinpins" title="Code">💻</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/TakuroOnoda"><img src="https://avatars0.githubusercontent.com/u/1407926?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Takuro Onoda</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=TakuroOnoda" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/frauhottelmann"><img src="https://avatars2.githubusercontent.com/u/902705?v=4?s=100" width="100px;" alt=""/><br /><sub><b>frauhottelmann</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=frauhottelmann" title="Code">💻</a></td>
<td align="center"><a href="http://patalong.pl"><img src="https://avatars.githubusercontent.com/u/29167842?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Piotr Patalong</b></sub></a><br /><a href="#design-VectorKappa" title="Design">🎨</a></td>
<td align="center"><a href="https://github.com/clarkwang"><img src="https://avatars.githubusercontent.com/u/157076?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Clark Wang</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=clarkwang" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/iamchating"><img src="https://avatars.githubusercontent.com/u/7088153?v=4?s=100" width="100px;" alt=""/><br /><sub><b>iamchating</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=iamchating" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/starxg"><img src="https://avatars.githubusercontent.com/u/34997494?v=4?s=100" width="100px;" alt=""/><br /><sub><b>starxg</b></sub></a><br /><a href="#plugin-starxg" title="Plugin/utility libraries">🔌</a></td>
</tr> </tr>
</table> </table>
<!-- markdownlint-enable --> <!-- markdownlint-restore -->
<!-- prettier-ignore-end --> <!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END --> <!-- ALL-CONTRIBUTORS-LIST:END -->
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!

View File

@@ -1,55 +1 @@
<?xml version="1.0" encoding="utf-8"?> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="Layer_1" x="0" y="0" version="1.1" viewBox="0 0 1024 1024" xml:space="preserve" style="enable-background:new 0 0 1024 1024"><style type="text/css">.st0{fill:url(#SVGID_1_)}.st1{opacity:.16;fill:url(#SVGID_2_)}.st2{fill:url(#SVGID_3_)}.st3{opacity:.16;fill:url(#SVGID_4_)}.st4{fill:url(#SVGID_5_)}.st5{opacity:.15;fill:url(#SVGID_6_)}.st6{fill:url(#SVGID_7_)}</style><g><linearGradient id="SVGID_1_" x1="260.967" x2="919.184" y1="871.181" y2="491.16" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#669abd"/><stop offset="1" style="stop-color:#77dbdb"/></linearGradient><polygon points="297.54 934.52 882.6 596.72 882.61 427.82 297.54 765.65" class="st0"/><linearGradient id="SVGID_2_" x1="553.505" x2="626.647" y1="617.828" y2="744.513" gradientUnits="userSpaceOnUse"><stop offset=".559" style="stop-color:#000;stop-opacity:0"/><stop offset="1" style="stop-color:#000"/></linearGradient><polygon points="297.54 934.52 882.6 596.72 882.61 427.82 297.54 765.65" class="st1"/></g><g><linearGradient id="SVGID_3_" x1="114.663" x2="334.091" y1="744.528" y2="871.214" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#6a8fad"/><stop offset="1" style="stop-color:#669abd"/></linearGradient><polygon points="151.23 681.18 151.22 850.09 297.54 934.52 297.54 765.65" class="st2"/><linearGradient id="SVGID_4_" x1="260.948" x2="187.806" y1="744.528" y2="871.213" gradientUnits="userSpaceOnUse"><stop offset=".559" style="stop-color:#000;stop-opacity:0"/><stop offset="1" style="stop-color:#000"/></linearGradient><polygon points="151.23 681.18 151.22 850.09 297.54 934.52 297.54 765.65" class="st3"/></g><g><linearGradient id="SVGID_5_" x1="114.663" x2="553.503" y1="237.793" y2="491.157" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#6a8fad"/><stop offset="1" style="stop-color:#669abd"/></linearGradient><polygon points="151.23 174.45 151.21 343.36 443.79 512.27 590.08 427.81" class="st4"/><linearGradient id="SVGID_6_" x1="370.656" x2="297.509" y1="301.128" y2="427.822" gradientUnits="userSpaceOnUse"><stop offset=".559" style="stop-color:#000;stop-opacity:0"/><stop offset="1" style="stop-color:#000"/></linearGradient><polygon points="151.23 174.45 151.21 343.36 443.79 512.27 590.08 427.81" class="st5"/></g><linearGradient id="SVGID_7_" x1="78.091" x2="736.337" y1="554.498" y2="174.459" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#ccecff"/><stop offset="1" style="stop-color:#9feced"/></linearGradient><polygon points="297.51 765.64 151.23 681.18 590.08 427.81 151.23 174.45 297.5 90 882.61 427.82" class="st6"/></svg>
<!-- Generator: Adobe Illustrator 23.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{fill:url(#SVGID_1_);}
.st1{opacity:0.16;fill:url(#SVGID_2_);}
.st2{fill:url(#SVGID_3_);}
.st3{opacity:0.16;fill:url(#SVGID_4_);}
.st4{fill:url(#SVGID_5_);}
.st5{opacity:0.15;fill:url(#SVGID_6_);}
.st6{fill:url(#SVGID_7_);}
</style>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="260.9675" y1="871.1813" x2="919.1845" y2="491.1596">
<stop offset="0" style="stop-color:#669ABD"/>
<stop offset="1" style="stop-color:#77DBDB"/>
</linearGradient>
<polygon class="st0" points="297.54,934.52 882.6,596.72 882.61,427.82 297.54,765.65 "/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="553.5051" y1="617.8278" x2="626.647" y2="744.5132">
<stop offset="0.5588" style="stop-color:#000000;stop-opacity:0"/>
<stop offset="1" style="stop-color:#000000"/>
</linearGradient>
<polygon class="st1" points="297.54,934.52 882.6,596.72 882.61,427.82 297.54,765.65 "/>
</g>
<g>
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="114.6631" y1="744.5275" x2="334.0905" y2="871.2141">
<stop offset="0" style="stop-color:#6A8FAD"/>
<stop offset="1" style="stop-color:#669ABD"/>
</linearGradient>
<polygon class="st2" points="151.23,681.18 151.22,850.09 297.54,934.52 297.54,765.65 "/>
<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="260.9478" y1="744.5281" x2="187.8059" y2="871.2135">
<stop offset="0.5588" style="stop-color:#000000;stop-opacity:0"/>
<stop offset="1" style="stop-color:#000000"/>
</linearGradient>
<polygon class="st3" points="151.23,681.18 151.22,850.09 297.54,934.52 297.54,765.65 "/>
</g>
<g>
<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="114.663" y1="237.793" x2="553.5026" y2="491.1571">
<stop offset="0" style="stop-color:#6A8FAD"/>
<stop offset="1" style="stop-color:#669ABD"/>
</linearGradient>
<polygon class="st4" points="151.23,174.45 151.21,343.36 443.79,512.27 590.08,427.81 "/>
<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="370.6562" y1="301.1281" x2="297.5094" y2="427.8221">
<stop offset="0.5588" style="stop-color:#000000;stop-opacity:0"/>
<stop offset="1" style="stop-color:#000000"/>
</linearGradient>
<polygon class="st5" points="151.23,174.45 151.21,343.36 443.79,512.27 590.08,427.81 "/>
</g>
<linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="78.0912" y1="554.4979" x2="736.3375" y2="174.4593">
<stop offset="0" style="stop-color:#CCECFF"/>
<stop offset="1" style="stop-color:#9FECED"/>
</linearGradient>
<polygon class="st6" points="297.51,765.64 151.23,681.18 590.08,427.81 151.23,174.45 297.5,90 882.61,427.82 "/>
</svg>

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@@ -1,27 +1,42 @@
import { app, ipcMain, Menu, Tray, shell, globalShortcut } from 'electron' import { app, ipcMain, Menu, Tray, shell, screen, globalShortcut, MenuItemConstructorOptions } from 'electron'
// eslint-disable-next-line no-duplicate-imports import * as promiseIpc from 'electron-promise-ipc'
import * as electron from 'electron' import * as remote from '@electron/remote/main'
import { loadConfig } from './config' import { loadConfig } from './config'
import { Window, WindowOptions } from './window' import { Window, WindowOptions } from './window'
import { pluginManager } from './pluginManager'
import { PTYManager } from './pty'
export class Application { export class Application {
private tray: Tray private tray?: Tray
private ptyManager = new PTYManager()
private windows: Window[] = [] private windows: Window[] = []
constructor () { constructor () {
remote.initialize()
this.ptyManager.init(this)
ipcMain.on('app:config-change', (_event, config) => { ipcMain.on('app:config-change', (_event, config) => {
this.broadcast('host:config-change', config) this.broadcast('host:config-change', config)
}) })
ipcMain.on('app:register-global-hotkey', (_event, specs) => { ipcMain.on('app:register-global-hotkey', (_event, specs) => {
globalShortcut.unregisterAll() globalShortcut.unregisterAll()
for (let spec of specs) { for (const spec of specs) {
globalShortcut.register(spec, () => { globalShortcut.register(spec, () => {
this.onGlobalHotkey() this.onGlobalHotkey()
}) })
} }
}) })
;(promiseIpc as any).on('plugin-manager:install', (path, name, version) => {
return pluginManager.install(path, name, version)
})
;(promiseIpc as any).on('plugin-manager:uninstall', (path, name) => {
return pluginManager.uninstall(path, name)
})
const configData = loadConfig() const configData = loadConfig()
if (process.platform === 'linux') { if (process.platform === 'linux') {
app.commandLine.appendSwitch('no-sandbox') app.commandLine.appendSwitch('no-sandbox')
@@ -32,6 +47,7 @@ export class Application {
} }
app.commandLine.appendSwitch('disable-http-cache') app.commandLine.appendSwitch('disable-http-cache')
app.commandLine.appendSwitch('max-active-webgl-contexts', '9000')
app.commandLine.appendSwitch('lang', 'EN') app.commandLine.appendSwitch('lang', 'EN')
app.allowRendererProcessReuse = false app.allowRendererProcessReuse = false
@@ -41,11 +57,13 @@ export class Application {
} }
init (): void { init (): void {
electron.screen.on('display-metrics-changed', () => this.broadcast('host:display-metrics-changed')) screen.on('display-metrics-changed', () => this.broadcast('host:display-metrics-changed'))
screen.on('display-added', () => this.broadcast('host:displays-changed'))
screen.on('display-removed', () => this.broadcast('host:displays-changed'))
} }
async newWindow (options?: WindowOptions): Promise<Window> { async newWindow (options?: WindowOptions): Promise<Window> {
let window = new Window(options) const window = new Window(options)
this.windows.push(window) this.windows.push(window)
window.visible$.subscribe(visible => { window.visible$.subscribe(visible => {
if (visible) { if (visible) {
@@ -65,30 +83,30 @@ export class Application {
} }
onGlobalHotkey (): void { onGlobalHotkey (): void {
if (this.windows.some(x => x.isFocused())) { if (this.windows.some(x => x.isFocused() && x.isVisible())) {
for (let window of this.windows) { for (const window of this.windows) {
window.hide() window.hide()
} }
} else { } else {
for (let window of this.windows) { for (const window of this.windows) {
window.present() window.present()
} }
} }
} }
presentAllWindows (): void { presentAllWindows (): void {
for (let window of this.windows) { for (const window of this.windows) {
window.present() window.present()
} }
} }
broadcast (event: string, ...args): void { broadcast (event: string, ...args: any[]): void {
for (const window of this.windows) { for (const window of this.windows) {
window.send(event, ...args) window.send(event, ...args)
} }
} }
async send (event: string, ...args): Promise<void> { async send (event: string, ...args: any[]): Promise<void> {
if (!this.hasWindows()) { if (!this.hasWindows()) {
await this.newWindow() await this.newWindow()
} }
@@ -96,7 +114,7 @@ export class Application {
} }
enableTray (): void { enableTray (): void {
if (this.tray) { if (this.tray || process.platform === 'linux') {
return return
} }
if (process.platform === 'darwin') { if (process.platform === 'darwin') {
@@ -121,10 +139,11 @@ export class Application {
} }
disableTray (): void { disableTray (): void {
if (this.tray) { if (process.platform === 'linux') {
this.tray.destroy() return
this.tray = null
} }
this.tray?.destroy()
this.tray = null
} }
hasWindows (): boolean { hasWindows (): boolean {
@@ -132,20 +151,18 @@ export class Application {
} }
focus (): void { focus (): void {
for (let window of this.windows) { for (const window of this.windows) {
window.show() window.show()
} }
} }
handleSecondInstance (argv: string[], cwd: string): void { handleSecondInstance (argv: string[], cwd: string): void {
this.presentAllWindows() this.presentAllWindows()
for (let window of this.windows) { this.windows[this.windows.length - 1].passCliArguments(argv, cwd, true)
window.handleSecondInstance(argv, cwd)
}
} }
private setupMenu () { private setupMenu () {
let template: Electron.MenuItemConstructorOptions[] = [ const template: MenuItemConstructorOptions[] = [
{ {
label: 'Application', label: 'Application',
submenu: [ submenu: [
@@ -195,13 +212,8 @@ export class Application {
label: 'View', label: 'View',
submenu: [ submenu: [
{ role: 'reload' }, { role: 'reload' },
{ role: 'forceReload' },
{ role: 'toggleDevTools' }, { role: 'toggleDevTools' },
{ type: 'separator' }, { type: 'separator' },
{ role: 'resetZoom' },
{ role: 'zoomIn' },
{ role: 'zoomOut' },
{ type: 'separator' },
{ role: 'togglefullscreen' }, { role: 'togglefullscreen' },
], ],
}, },

57
app/lib/bufferizedPTY.js Normal file
View File

@@ -0,0 +1,57 @@
/** @hidden */
module.exports = function patchPTYModule (mod) {
const oldSpawn = mod.spawn
if (mod.patched) {
return
}
mod.patched = true
mod.spawn = (file, args, opt) => {
let terminal = oldSpawn(file, args, opt)
let timeout = null
let buffer = Buffer.from('')
let lastFlush = 0
let nextTimeout = 0
// Minimum prebuffering window (ms) if the input is non-stop flowing
const minWindow = 5
// Maximum buffering time (ms) until output must be flushed unconditionally
const maxWindow = 100
function flush () {
if (buffer.length) {
terminal.emit('data-buffered', buffer)
}
lastFlush = Date.now()
buffer = Buffer.from('')
}
function reschedule () {
if (timeout) {
clearTimeout(timeout)
}
nextTimeout = Date.now() + minWindow
timeout = setTimeout(() => {
timeout = null
flush()
}, minWindow)
}
terminal.on('data', data => {
if (typeof data === 'string') {
data = Buffer.from(data)
}
buffer = Buffer.concat([buffer, data])
if (Date.now() - lastFlush > maxWindow) {
// Taking too much time buffering, flush to keep things interactive
flush()
} else {
if (Date.now() > nextTimeout - maxWindow / 10) {
// Extend the window if it's expiring
reschedule()
}
}
})
return terminal
}
}

View File

@@ -5,7 +5,7 @@ export function parseArgs (argv: string[], cwd: string): any {
argv = argv.slice(1) argv = argv.slice(1)
} }
return require('yargs') return require('yargs/yargs')(argv.slice(1))
.usage('terminus [command] [arguments]') .usage('terminus [command] [arguments]')
.command('open [directory]', 'open a shell in a directory', { .command('open [directory]', 'open a shell in a directory', {
directory: { type: 'string', 'default': cwd }, directory: { type: 'string', 'default': cwd },
@@ -41,5 +41,5 @@ export function parseArgs (argv: string[], cwd: string): any {
type: 'boolean', type: 'boolean',
}) })
.help('help') .help('help')
.parse(argv.slice(1)) .parse()
} }

View File

@@ -4,9 +4,9 @@ import * as yaml from 'js-yaml'
import { app } from 'electron' import { app } from 'electron'
export function loadConfig (): any { export function loadConfig (): any {
let configPath = path.join(app.getPath('userData'), 'config.yaml') const configPath = path.join(app.getPath('userData'), 'config.yaml')
if (fs.existsSync(configPath)) { if (fs.existsSync(configPath)) {
return yaml.safeLoad(fs.readFileSync(configPath, 'utf8')) return yaml.load(fs.readFileSync(configPath, 'utf8'))
} else { } else {
return {} return {}
} }

View File

@@ -1,4 +1,5 @@
import './portable' import './portable'
import 'source-map-support/register'
import './sentry' import './sentry'
import './lru' import './lru'
import { app, ipcMain, Menu } from 'electron' import { app, ipcMain, Menu } from 'electron'
@@ -52,7 +53,7 @@ if (argv.d) {
}) })
} }
app.on('ready', () => { app.on('ready', async () => {
if (process.platform === 'darwin') { if (process.platform === 'darwin') {
app.dock.setMenu(Menu.buildFromTemplate([ app.dock.setMenu(Menu.buildFromTemplate([
{ {
@@ -64,5 +65,8 @@ app.on('ready', () => {
])) ]))
} }
application.init() application.init()
application.newWindow({ hidden: argv.hidden })
const window = await application.newWindow({ hidden: argv.hidden })
await window.ready
window.passCliArguments(process.argv, process.cwd(), false)
}) })

View File

@@ -1,6 +1,6 @@
import * as createLRU from 'lru-cache' import * as LRU from 'lru-cache'
import * as fs from 'fs' import * as fs from 'fs'
const lru = createLRU({ max: 256, maxAge: 250 }) const lru = new LRU({ max: 256, maxAge: 250 })
const origLstat = fs.realpathSync.bind(fs) const origLstat = fs.realpathSync.bind(fs)
// NB: The biggest offender of thrashing realpathSync is the node module system // NB: The biggest offender of thrashing realpathSync is the node module system

40
app/lib/pluginManager.ts Normal file
View File

@@ -0,0 +1,40 @@
import { promisify } from 'util'
export class PluginManager {
npm: any
npmReady?: Promise<void>
async ensureLoaded (): Promise<void> {
if (!this.npmReady) {
this.npmReady = new Promise(resolve => {
const npm = require('npm')
npm.load(err => {
if (err) {
console.error(err)
return
}
npm.config.set('global', false)
this.npm = npm
resolve()
})
})
}
return this.npmReady
}
async install (path: string, name: string, version: string): Promise<void> {
await this.ensureLoaded()
this.npm.prefix = path
return promisify(this.npm.commands.install)([`${name}@${version}`])
}
async uninstall (path: string, name: string): Promise<void> {
await this.ensureLoaded()
this.npm.prefix = path
return promisify(this.npm.commands.remove)([name])
}
}
export const pluginManager = new PluginManager()

View File

@@ -1,24 +1,14 @@
import * as path from 'path' import * as path from 'path'
import * as fs from 'fs' import * as fs from 'fs'
import * as electron from 'electron'
let appPath: string | null = null const appPath = path.dirname(electron.app.getPath('exe'))
try {
appPath = path.dirname(require('electron').app.getPath('exe'))
} catch {
appPath = path.dirname(require('electron').remote.app.getPath('exe'))
}
if (null != appPath) { if (fs.existsSync(path.join(appPath, 'terminus-data'))) {
if(fs.existsSync(path.join(appPath, 'terminus-data'))) { fs.renameSync(path.join(appPath, 'terminus-data'), path.join(appPath, 'data'))
fs.renameSync(path.join(appPath, 'terminus-data'), path.join(appPath, 'data')) }
} const portableData = path.join(appPath, 'data')
const portableData = path.join(appPath, 'data') if (fs.existsSync(portableData)) {
if (fs.existsSync(portableData)) { console.log('reset user data to ' + portableData)
console.log('reset user data to ' + portableData) electron.app.setPath('userData', portableData)
try {
require('electron').app.setPath('userData', portableData)
} catch {
require('electron').remote.app.setPath('userData', portableData)
}
}
} }

154
app/lib/pty.ts Normal file
View File

@@ -0,0 +1,154 @@
import * as nodePTY from '@terminus-term/node-pty'
import { v4 as uuidv4 } from 'uuid'
import { ipcMain } from 'electron'
import { Application } from './app'
class PTYDataQueue {
private buffers: Buffer[] = []
private delta = 0
private maxChunk = 1024
private maxDelta = 1024 * 50
private flowPaused = false
constructor (private pty: nodePTY.IPty, private onData: (data: Buffer) => void) { }
push (data: Buffer) {
this.buffers.push(data)
this.maybeEmit()
}
ack (length: number) {
this.delta -= length
this.maybeEmit()
}
private maybeEmit () {
if (this.delta <= this.maxDelta && this.flowPaused) {
this.resume()
return
}
if (this.buffers.length > 0) {
if (this.delta > this.maxDelta && !this.flowPaused) {
this.pause()
return
}
const buffersToSend = []
let totalLength = 0
while (totalLength < this.maxChunk && this.buffers.length) {
totalLength += this.buffers[0].length
buffersToSend.push(this.buffers.shift())
}
if (buffersToSend.length === 0) {
return
}
let toSend = Buffer.concat(buffersToSend)
if (toSend.length > this.maxChunk) {
this.buffers.unshift(toSend.slice(this.maxChunk))
toSend = toSend.slice(0, this.maxChunk)
}
this.onData(toSend)
this.delta += toSend.length
if (this.buffers.length) {
setImmediate(() => this.maybeEmit())
}
}
}
private pause () {
this.pty.pause()
this.flowPaused = true
}
private resume () {
this.pty.resume()
this.flowPaused = false
this.maybeEmit()
}
}
export class PTY {
private pty: nodePTY.IPty
private outputQueue: PTYDataQueue
constructor (private id: string, private app: Application, ...args: any[]) {
this.pty = (nodePTY as any).spawn(...args)
for (const key of ['close', 'exit']) {
(this.pty as any).on(key, (...eventArgs) => this.emit(key, ...eventArgs))
}
this.outputQueue = new PTYDataQueue(this.pty, data => {
setImmediate(() => this.emit('data-buffered', data))
})
this.pty.on('data', data => this.outputQueue.push(Buffer.from(data)))
}
getPID (): number {
return this.pty.pid
}
resize (columns: number, rows: number): void {
if ((this.pty as any)._writable) {
this.pty.resize(columns, rows)
}
}
write (buffer: Buffer): void {
if ((this.pty as any)._writable) {
this.pty.write(buffer.toString())
}
}
ackData (length: number): void {
this.outputQueue.ack(length)
}
kill (signal?: string): void {
this.pty.kill(signal)
}
private emit (event: string, ...args: any[]) {
this.app.broadcast(`pty:${this.id}:${event}`, ...args)
}
}
export class PTYManager {
private ptys: Record<string, PTY|undefined> = {}
init (app: Application): void {
//require('./bufferizedPTY')(nodePTY) // eslint-disable-line @typescript-eslint/no-var-requires
ipcMain.on('pty:spawn', (event, ...options) => {
const id = uuidv4().toString()
event.returnValue = id
this.ptys[id] = new PTY(id, app, ...options)
})
ipcMain.on('pty:exists', (event, id) => {
event.returnValue = !!this.ptys[id]
})
ipcMain.on('pty:get-pid', (event, id) => {
event.returnValue = this.ptys[id]?.getPID()
})
ipcMain.on('pty:resize', (_event, id, columns, rows) => {
this.ptys[id]?.resize(columns, rows)
})
ipcMain.on('pty:write', (_event, id, data) => {
this.ptys[id]?.write(Buffer.from(data))
})
ipcMain.on('pty:kill', (_event, id, signal) => {
this.ptys[id]?.kill(signal)
})
ipcMain.on('pty:ack-data', (_event, id, length) => {
this.ptys[id]?.ackData(length)
})
}
}

View File

@@ -1,16 +1,14 @@
const { init } = process.type === 'main' ? require('@sentry/electron/dist/main') : require('@sentry/electron/dist/renderer') const { init } = String(process.type) === 'main' ? require('@sentry/electron/dist/main') : require('@sentry/electron/dist/renderer')
import * as isDev from 'electron-is-dev'
const SENTRY_DSN = 'https://4717a0a7ee0b4429bd3a0f06c3d7eec3@sentry.io/181876' const SENTRY_DSN = 'https://4717a0a7ee0b4429bd3a0f06c3d7eec3@sentry.io/181876'
let release let release = null
try { try {
release = require('electron').app.getVersion() release = require('electron').app.getVersion()
} catch { } catch {
release = require('electron').remote.app.getVersion() release = require('@electron/remote').app.getVersion()
} }
if (!isDev) { if (!process.env.TERMINUS_DEV) {
init({ init({
dsn: SENTRY_DSN, dsn: SENTRY_DSN,
release, release,

View File

@@ -1,19 +1,19 @@
import * as glasstron from 'glasstron'
import { Subject, Observable } from 'rxjs' import { Subject, Observable } from 'rxjs'
import { debounceTime } from 'rxjs/operators' import { debounceTime } from 'rxjs/operators'
import { BrowserWindow, app, ipcMain, Rectangle, Menu, screen } from 'electron' import { BrowserWindow, app, ipcMain, Rectangle, Menu, screen, BrowserWindowConstructorOptions } from 'electron'
import ElectronConfig = require('electron-config') import ElectronConfig = require('electron-config')
import * as os from 'os' import * as os from 'os'
import * as path from 'path' import * as path from 'path'
import macOSRelease from 'macos-release'
import * as compareVersions from 'compare-versions'
import { parseArgs } from './cli' import { parseArgs } from './cli'
import { loadConfig } from './config' import { loadConfig } from './config'
let SetWindowCompositionAttribute: any let DwmEnableBlurBehindWindow: any = null
let AccentState: any
let DwmEnableBlurBehindWindow: any
if (process.platform === 'win32') { if (process.platform === 'win32') {
SetWindowCompositionAttribute = require('windows-swca').SetWindowCompositionAttribute
AccentState = require('windows-swca').ACCENT_STATE
DwmEnableBlurBehindWindow = require('windows-blurbehind').DwmEnableBlurBehindWindow DwmEnableBlurBehindWindow = require('windows-blurbehind').DwmEnableBlurBehindWindow
} }
@@ -21,15 +21,22 @@ export interface WindowOptions {
hidden?: boolean hidden?: boolean
} }
abstract class GlasstronWindow extends BrowserWindow {
blurType: string
abstract setBlur (_: boolean)
}
const macOSVibrancyType = process.platform === 'darwin' ? compareVersions.compare(macOSRelease().version, '10.14', '>=') ? 'fullscreen-ui' : 'dark' : null
export class Window { export class Window {
ready: Promise<void> ready: Promise<void>
private visible = new Subject<boolean>() private visible = new Subject<boolean>()
private closed = new Subject<void>() private closed = new Subject<void>()
private window: BrowserWindow private window?: GlasstronWindow
private windowConfig: ElectronConfig private windowConfig: ElectronConfig
private windowBounds: Rectangle private windowBounds?: Rectangle
private closing = false private closing = false
private lastVibrancy: {enabled: boolean, type?: string} | null = null private lastVibrancy: { enabled: boolean, type?: string } | null = null
private disableVibrancyWhileDragging = false private disableVibrancyWhileDragging = false
private configStore: any private configStore: any
@@ -39,13 +46,13 @@ export class Window {
constructor (options?: WindowOptions) { constructor (options?: WindowOptions) {
this.configStore = loadConfig() this.configStore = loadConfig()
options = options || {} options = options ?? {}
this.windowConfig = new ElectronConfig({ name: 'window' }) this.windowConfig = new ElectronConfig({ name: 'window' })
this.windowBounds = this.windowConfig.get('windowBoundaries') this.windowBounds = this.windowConfig.get('windowBoundaries')
let maximized = this.windowConfig.get('maximized') const maximized = this.windowConfig.get('maximized')
let bwOptions: Electron.BrowserWindowConstructorOptions = { const bwOptions: BrowserWindowConstructorOptions = {
width: 800, width: 800,
height: 600, height: 600,
title: 'Terminus', title: 'Terminus',
@@ -55,7 +62,10 @@ export class Window {
nodeIntegration: true, nodeIntegration: true,
preload: path.join(__dirname, 'sentry.js'), preload: path.join(__dirname, 'sentry.js'),
backgroundThrottling: false, backgroundThrottling: false,
enableRemoteModule: true,
contextIsolation: false,
}, },
maximizable: true,
frame: false, frame: false,
show: false, show: false,
backgroundColor: '#00000000', backgroundColor: '#00000000',
@@ -78,18 +88,19 @@ export class Window {
bwOptions.frame = true bwOptions.frame = true
} else { } else {
if (process.platform === 'darwin') { if (process.platform === 'darwin') {
bwOptions.titleBarStyle = 'hiddenInset' bwOptions.titleBarStyle = 'hidden'
} }
} }
if (process.platform === 'linux') { if (process.platform === 'darwin') {
bwOptions.backgroundColor = '#131d27' this.window = new BrowserWindow(bwOptions) as GlasstronWindow
} else {
this.window = new glasstron.BrowserWindow(bwOptions)
} }
this.window = new BrowserWindow(bwOptions)
this.window.once('ready-to-show', () => { this.window.once('ready-to-show', () => {
if (process.platform === 'darwin') { if (process.platform === 'darwin') {
this.window.setVibrancy('window') this.window.setVibrancy(macOSVibrancyType)
} else if (process.platform === 'win32' && (this.configStore.appearance || {}).vibrancy) { } else if (process.platform === 'win32' && (this.configStore.appearance || {}).vibrancy) {
this.setVibrancy(true) this.setVibrancy(true)
} }
@@ -101,17 +112,21 @@ export class Window {
this.window.show() this.window.show()
} }
this.window.focus() this.window.focus()
this.window.moveTop()
} }
}) })
this.window.on('blur', () => { this.window.on('blur', () => {
if (this.configStore.appearance?.dockHideOnBlur) { if (this.configStore.appearance.dock !== 'off' && this.configStore.appearance?.dockHideOnBlur) {
this.hide() this.hide()
} }
}) })
this.window.loadURL(`file://${app.getAppPath()}/dist/index.html?${this.window.id}`, { extraHeaders: 'pragma: no-cache\n' }) this.window.loadURL(`file://${app.getAppPath()}/dist/index.html?${this.window.id}`, { extraHeaders: 'pragma: no-cache\n' })
this.window.webContents.setVisualZoomLevelLimits(1, 1)
this.window.webContents.setZoomFactor(1)
if (process.platform !== 'darwin') { if (process.platform !== 'darwin') {
this.window.setMenu(null) this.window.setMenu(null)
} }
@@ -129,36 +144,39 @@ export class Window {
}) })
} }
setVibrancy (enabled: boolean, type?: string): void { setVibrancy (enabled: boolean, type?: string, userRequested?: boolean): void {
this.lastVibrancy = { enabled, type } if (userRequested ?? true) {
this.lastVibrancy = { enabled, type }
}
if (process.platform === 'win32') { if (process.platform === 'win32') {
if (parseFloat(os.release()) >= 10) { if (parseFloat(os.release()) >= 10) {
let attribValue = AccentState.ACCENT_DISABLED this.window.blurType = enabled ? type === 'fluent' ? 'acrylic' : 'blurbehind' : null
if (enabled) { try {
if (type === 'fluent') { this.window.setBlur(enabled)
attribValue = AccentState.ACCENT_ENABLE_ACRYLICBLURBEHIND } catch (error) {
} else { console.error('Failed to set window blur', error)
attribValue = AccentState.ACCENT_ENABLE_BLURBEHIND
}
} }
SetWindowCompositionAttribute(this.window.getNativeWindowHandle(), attribValue, 0x00000000)
} else { } else {
DwmEnableBlurBehindWindow(this.window, enabled) DwmEnableBlurBehindWindow(this.window, enabled)
} }
} else if (process.platform === 'linux') {
this.window.setBackgroundColor(enabled ? '#00000000' : '#131d27')
this.window.setBlur(enabled)
} else { } else {
this.window.setVibrancy(enabled ? 'dark' : null as any) // electron issue 20269 this.window.setVibrancy(enabled ? macOSVibrancyType : null)
} }
} }
show (): void { show (): void {
this.window.show() this.window.show()
this.window.moveTop()
} }
focus (): void { focus (): void {
this.window.focus() this.window.focus()
} }
send (event: string, ...args): void { send (event: string, ...args: any[]): void {
if (!this.window) { if (!this.window) {
return return
} }
@@ -176,6 +194,10 @@ export class Window {
return this.window.isFocused() return this.window.isFocused()
} }
isVisible (): boolean {
return this.window.isVisible()
}
hide (): void { hide (): void {
if (process.platform === 'darwin') { if (process.platform === 'darwin') {
// Lose focus // Lose focus
@@ -211,10 +233,8 @@ export class Window {
} }
} }
handleSecondInstance (argv: string[], cwd: string): void { passCliArguments (argv: string[], cwd: string, secondInstance: boolean): void {
if (!this.configStore.appearance?.dock) { this.send('cli', parseArgs(argv, cwd), cwd, secondInstance)
this.send('host:second-instance', parseArgs(argv, cwd), cwd)
}
} }
private setupWindowManagement () { private setupWindowManagement () {
@@ -227,7 +247,7 @@ export class Window {
this.visible.next(false) this.visible.next(false)
}) })
let moveSubscription = new Observable<void>(observer => { const moveSubscription = new Observable<void>(observer => {
this.window.on('move', () => observer.next()) this.window.on('move', () => observer.next())
}).pipe(debounceTime(250)).subscribe(() => { }).pipe(debounceTime(250)).subscribe(() => {
this.send('host:window-moved') this.send('host:window-moved')
@@ -362,24 +382,21 @@ export class Window {
this.disableVibrancyWhileDragging = value this.disableVibrancyWhileDragging = value
}) })
this.window.on('will-move', () => { let moveEndedTimeout: number|null = null
const onBoundsChange = () => {
if (!this.lastVibrancy?.enabled || !this.disableVibrancyWhileDragging) { if (!this.lastVibrancy?.enabled || !this.disableVibrancyWhileDragging) {
return return
} }
let timeout: number|null = null this.setVibrancy(false, undefined, false)
const oldVibrancy = this.lastVibrancy if (moveEndedTimeout) {
this.setVibrancy(false) clearTimeout(moveEndedTimeout)
const onMove = () => {
if (timeout) {
clearTimeout(timeout)
}
timeout = setTimeout(() => {
this.window.off('move', onMove)
this.setVibrancy(oldVibrancy.enabled, oldVibrancy.type)
}, 500)
} }
this.window.on('move', onMove) moveEndedTimeout = setTimeout(() => {
}) this.setVibrancy(this.lastVibrancy.enabled, this.lastVibrancy.type)
}, 50)
}
this.window.on('move', onBoundsChange)
this.window.on('resize', onBoundsChange)
} }
private destroy () { private destroy () {

View File

@@ -1,6 +1,7 @@
{ {
"name": "terminus", "name": "terminus",
"description": "A terminal for a modern age", "description": "A terminal for a modern age",
"private": true,
"repository": "https://github.com/eugeny/terminus", "repository": "https://github.com/eugeny/terminus",
"author": { "author": {
"name": "Eugene Pankov", "name": "Eugene Pankov",
@@ -13,43 +14,56 @@
"watch": "webpack --progress --color --watch" "watch": "webpack --progress --color --watch"
}, },
"dependencies": { "dependencies": {
"@angular/animations": "9.1.4", "@angular/animations": "^11.1.1",
"@angular/common": "9.1.4", "@angular/common": "^11.1.1",
"@angular/compiler": "9.1.4", "@angular/compiler": "^11.1.1",
"@angular/core": "9.1.4", "@angular/core": "^11.1.1",
"@angular/forms": "9.1.4", "@angular/forms": "^11.1.1",
"@angular/platform-browser": "9.1.4", "@angular/platform-browser": "^11.1.1",
"@angular/platform-browser-dynamic": "9.1.4", "@angular/platform-browser-dynamic": "^11.1.1",
"@ng-bootstrap/ng-bootstrap": "^6.1.0", "@electron/remote": "1.0.4",
"devtron": "1.4.0", "@ng-bootstrap/ng-bootstrap": "^7.0.0",
"@terminus-term/node-pty": "0.10.0-terminus.3",
"any-promise": "^1.3.0",
"electron-config": "2.0.0", "electron-config": "2.0.0",
"electron-debug": "^3.0.1", "electron-debug": "^3.2.0",
"electron-is-dev": "1.1.0", "electron-promise-ipc": "^2.2.4",
"electron-updater": "^4.3.1", "fontmanager-redux": "1.0.0",
"fontmanager-redux": "0.4.0", "glasstron": "0.0.7",
"js-yaml": "3.13.1", "js-yaml": "4.1.0",
"keytar": "^5.6.0", "keytar": "^7.6.0",
"mz": "^2.7.0", "mz": "^2.7.0",
"ngx-toastr": "^12.0.1", "native-process-working-directory": "^1.0.2",
"node-pty": "^0.10.0-beta8", "ngx-toastr": "^13.2.1",
"npm": "6.9.0", "npm": "6",
"path": "0.12.7", "path": "0.12.7",
"rxjs": "^6.5.5", "rxjs": "^6.6.7",
"rxjs-compat": "^6.5.5", "yargs": "^16.2.0",
"yargs": "^15.3.1", "zone.js": "^0.11.4"
"zone.js": "^0.10.3"
}, },
"optionalDependencies": { "optionalDependencies": {
"macos-native-processlist": "^1.0.2", "macos-native-processlist": "^2.0.0",
"serialport": "^8.0.7", "serialport": "^9.0.7",
"windows-blurbehind": "^1.0.1", "windows-blurbehind": "^1.0.1",
"windows-native-registry": "^1.0.17", "windows-native-registry": "^3.0.0",
"windows-process-tree": "^0.2.4", "windows-process-tree": "^0.3.0"
"windows-swca": "^2.0.2"
}, },
"devDependencies": { "devDependencies": {
"@types/mz": "0.0.32", "@types/mz": "2.7.3",
"@types/node": "12.7.12", "@types/node": "14.14.35",
"node-abi": "^2.16.0" "node-abi": "^2.26.0",
"source-map-support": "^0.5.19"
},
"peerDependencies": {
"terminus-community-color-schemes": "*",
"terminus-core": "*",
"terminus-plugin-manager": "*",
"terminus-serial": "*",
"terminus-settings": "*",
"terminus-ssh": "*",
"terminus-terminal": "*"
},
"resolutions": {
"*/node-abi": "^2.20.0"
} }
} }

View File

@@ -13,7 +13,7 @@ export function getRootModule (plugins: any[]) {
positionClass: 'toast-bottom-center', positionClass: 'toast-bottom-center',
toastClass: 'toast', toastClass: 'toast',
preventDuplicates: true, preventDuplicates: true,
extendedTimeOut: 5000, extendedTimeOut: 1000,
}), }),
] ]
const bootstrap = [ const bootstrap = [

View File

@@ -3,6 +3,7 @@ import 'source-sans-pro/source-sans-pro.css'
import 'source-code-pro/source-code-pro.css' import 'source-code-pro/source-code-pro.css'
import '@fortawesome/fontawesome-free/css/solid.css' import '@fortawesome/fontawesome-free/css/solid.css'
import '@fortawesome/fontawesome-free/css/brands.css' import '@fortawesome/fontawesome-free/css/brands.css'
import '@fortawesome/fontawesome-free/css/regular.css'
import '@fortawesome/fontawesome-free/css/fontawesome.css' import '@fortawesome/fontawesome-free/css/fontawesome.css'
import 'ngx-toastr/toastr.css' import 'ngx-toastr/toastr.css'
import './preload.scss' import './preload.scss'

View File

@@ -2,8 +2,6 @@ import 'zone.js'
import 'core-js/proposals/reflect-metadata' import 'core-js/proposals/reflect-metadata'
import 'rxjs' import 'rxjs'
import * as isDev from 'electron-is-dev'
import './global.scss' import './global.scss'
import './toastr.scss' import './toastr.scss'
@@ -23,7 +21,7 @@ if (process.platform === 'win32' && !('HOME' in process.env)) {
process.env.HOME = `${process.env.HOMEDRIVE}${process.env.HOMEPATH}` process.env.HOME = `${process.env.HOMEDRIVE}${process.env.HOMEPATH}`
} }
if (isDev) { if (process.env.TERMINUS_DEV && !process.env.TERMINUS_FORCE_ANGULAR_PROD) {
console.warn('Running in debug mode') console.warn('Running in debug mode')
} else { } else {
enableProdMode() enableProdMode()
@@ -39,7 +37,7 @@ async function bootstrap (plugins: PluginInfo[], safeMode = false): Promise<NgMo
const module = getRootModule(pluginsModules) const module = getRootModule(pluginsModules)
window['rootModule'] = module window['rootModule'] = module
return platformBrowserDynamic().bootstrapModule(module).then(moduleRef => { return platformBrowserDynamic().bootstrapModule(module).then(moduleRef => {
if (isDev) { if (process.env.TERMINUS_DEV) {
const applicationRef = moduleRef.injector.get(ApplicationRef) const applicationRef = moduleRef.injector.get(ApplicationRef)
const componentRef = applicationRef.components[0] const componentRef = applicationRef.components[0]
enableDebugTools(componentRef) enableDebugTools(componentRef)
@@ -58,8 +56,8 @@ findPlugins().then(async plugins => {
window['safeModeReason'] = error window['safeModeReason'] = error
try { try {
await bootstrap(plugins, true) await bootstrap(plugins, true)
} catch (error) { } catch (error2) {
console.error('Bootstrap failed:', error) console.error('Bootstrap failed:', error2)
} }
} }
}) })

View File

@@ -17,6 +17,10 @@ body {
} }
.btn { .btn {
display: inline-flex;
align-items: center;
flex-wrap: nowrap;
& > svg { & > svg {
pointer-events: none; pointer-events: none;
} }
@@ -95,3 +99,42 @@ input[type=range] {
&::-moz-range-track { @include track(); } &::-moz-range-track { @include track(); }
&::-ms-track { @include track(); } &::-ms-track { @include track(); }
} }
a[ngbdropdownitem] {
cursor: pointer;
}
ngb-typeahead-window {
max-height: 60vh;
overflow: auto;
}
.hover-reveal {
opacity: 0;
.hover-reveal-parent:hover &,
*:hover > &,
&:hover {
opacity: 1;
}
}
@keyframes terminalShakeFrames {
0% {
transform: translateX(0);
}
25% {
transform: translateX(5px);
}
50% {
transform: translateX(-5px);
}
75% {
transform: translateX(5px);
}
100% {
transform: translateX(0);
}
}

View File

@@ -1,27 +1,28 @@
import * as fs from 'mz/fs' import * as fs from 'mz/fs'
import * as path from 'path' import * as path from 'path'
import * as remote from '@electron/remote'
const nodeModule = require('module') // eslint-disable-line @typescript-eslint/no-var-requires const nodeModule = require('module') // eslint-disable-line @typescript-eslint/no-var-requires
const nodeRequire = (global as any).require const nodeRequire = (global as any).require
function normalizePath (path: string): string { function normalizePath (p: string): string {
const cygwinPrefix = '/cygdrive/' const cygwinPrefix = '/cygdrive/'
if (path.startsWith(cygwinPrefix)) { if (p.startsWith(cygwinPrefix)) {
path = path.substring(cygwinPrefix.length).replace('/', '\\') p = p.substring(cygwinPrefix.length).replace('/', '\\')
path = path[0] + ':' + path.substring(1) p = p[0] + ':' + p.substring(1)
} }
return path return p
} }
global['module'].paths.map((x: string) => nodeModule.globalPaths.push(normalizePath(x))) global['module'].paths.map((x: string) => nodeModule.globalPaths.push(normalizePath(x)))
if (process.env.TERMINUS_DEV) { if (process.env.TERMINUS_DEV) {
nodeModule.globalPaths.unshift(path.dirname(require('electron').remote.app.getAppPath())) nodeModule.globalPaths.unshift(path.dirname(remote.app.getAppPath()))
} }
const builtinPluginsPath = process.env.TERMINUS_DEV ? path.dirname(require('electron').remote.app.getAppPath()) : path.join((process as any).resourcesPath, 'builtin-plugins') const builtinPluginsPath = process.env.TERMINUS_DEV ? path.dirname(remote.app.getAppPath()) : path.join((process as any).resourcesPath, 'builtin-plugins')
const userPluginsPath = path.join( const userPluginsPath = path.join(
require('electron').remote.app.getPath('userData'), remote.app.getPath('userData'),
'plugins', 'plugins',
) )
@@ -63,7 +64,6 @@ const builtinModules = [
'ngx-toastr', 'ngx-toastr',
'rxjs', 'rxjs',
'rxjs/operators', 'rxjs/operators',
'rxjs-compat/Subject',
'terminus-core', 'terminus-core',
'terminus-settings', 'terminus-settings',
'terminus-terminal', 'terminus-terminal',
@@ -83,7 +83,7 @@ const originalRequire = (global as any).require
if (cachedBuiltinModules[query]) { if (cachedBuiltinModules[query]) {
return cachedBuiltinModules[query] return cachedBuiltinModules[query]
} }
return originalRequire.apply(this, arguments) return originalRequire.apply(this, [query])
} }
const originalModuleRequire = nodeModule.prototype.require const originalModuleRequire = nodeModule.prototype.require
@@ -173,8 +173,8 @@ export async function loadPlugins (foundPlugins: PluginInfo[], progress: Progres
console.time(label) console.time(label)
const packageModule = nodeRequire(foundPlugin.path) const packageModule = nodeRequire(foundPlugin.path)
const pluginModule = packageModule.default.forRoot ? packageModule.default.forRoot() : packageModule.default const pluginModule = packageModule.default.forRoot ? packageModule.default.forRoot() : packageModule.default
pluginModule['pluginName'] = foundPlugin.name pluginModule.pluginName = foundPlugin.name
pluginModule['bootstrap'] = packageModule.bootstrap pluginModule.bootstrap = packageModule.bootstrap
plugins.push(pluginModule) plugins.push(pluginModule)
console.timeEnd(label) console.timeEnd(label)
await new Promise(x => setTimeout(x, 50)) await new Promise(x => setTimeout(x, 50))

View File

@@ -7,6 +7,7 @@
height: 100vh; height: 100vh;
display: flex; display: flex;
animation: 0.5s ease-out fadeIn; animation: 0.5s ease-out fadeIn;
background: radial-gradient(#3a66820a 0%, #000e17 30%, black 100%);
&>div { &>div {
width: 200px; width: 200px;
@@ -23,6 +24,7 @@
transition: 1s ease-out width; transition: 1s ease-out width;
background: #a1c5e4; background: #a1c5e4;
height: 3px; height: 3px;
box-shadow: 0 0 2px #ffffff1f;
} }
} }
} }
@@ -37,8 +39,8 @@
.terminus-logo { .terminus-logo {
width: 160px; width: 120px;
height: 160px; height: 120px;
background: url('../assets/logo.svg'); background: url('../assets/logo.svg');
background-repeat: none; background-repeat: none;
background-size: contain; background-size: contain;
@@ -51,7 +53,7 @@
font-family: 'Source Sans Pro'; font-family: 'Source Sans Pro';
text-align: center; text-align: center;
font-weight: normal; font-weight: normal;
font-size: 42px; font-size: 32px;
margin: 0; margin: 0;
sup { sup {

View File

@@ -2,13 +2,16 @@
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
padding: 20px; padding: 20px 0 50px;
.toast { .toast {
box-shadow: 0 1px 0 rgba(0,0,0,.25); box-shadow: 0 1px 0 rgba(0,0,0,.25);
padding: 10px; padding: 7px 12px;
background-image: none; background-image: none;
width: auto; width: auto;
flex-basis: auto;
border-radius: 0.5rem;
font-size: 0.75rem;
&.toast-error { &.toast-error {
background-color: #BD362F; background-color: #BD362F;

View File

@@ -12,7 +12,6 @@
"noUnusedParameters": true, "noUnusedParameters": true,
"noImplicitReturns": true, "noImplicitReturns": true,
"noFallthroughCasesInSwitch": true, "noFallthroughCasesInSwitch": true,
"noUnusedParameters": true,
"noUnusedLocals": true, "noUnusedLocals": true,
"lib": [ "lib": [
"dom", "dom",

View File

@@ -68,7 +68,6 @@ module.exports = {
'@ng-bootstrap/ng-bootstrap': 'commonjs @ng-bootstrap/ng-bootstrap', '@ng-bootstrap/ng-bootstrap': 'commonjs @ng-bootstrap/ng-bootstrap',
child_process: 'commonjs child_process', child_process: 'commonjs child_process',
electron: 'commonjs electron', electron: 'commonjs electron',
'electron-is-dev': 'commonjs electron-is-dev',
fs: 'commonjs fs', fs: 'commonjs fs',
'ngx-toastr': 'commonjs ngx-toastr', 'ngx-toastr': 'commonjs ngx-toastr',
module: 'commonjs module', module: 'commonjs module',

View File

@@ -1,9 +1,10 @@
const path = require('path') const path = require('path')
const webpack = require('webpack') const webpack = require('webpack')
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
module.exports = { module.exports = {
name: 'terminus-main', name: 'terminus-main',
target: 'node', target: 'electron-main',
entry: { entry: {
main: path.resolve(__dirname, 'lib/index.ts'), main: path.resolve(__dirname, 'lib/index.ts'),
}, },
@@ -33,15 +34,25 @@ module.exports = {
], ],
}, },
externals: { externals: {
'any-promise': 'commonjs any-promise',
electron: 'commonjs electron', electron: 'commonjs electron',
'electron-config': 'commonjs electron-config', 'electron-config': 'commonjs electron-config',
'electron-debug': 'commonjs electron-debug',
'electron-promise-ipc': 'commonjs electron-promise-ipc',
'electron-vibrancy': 'commonjs electron-vibrancy', 'electron-vibrancy': 'commonjs electron-vibrancy',
fs: 'commonjs fs', fs: 'commonjs fs',
glasstron: 'commonjs glasstron',
mz: 'commonjs mz', mz: 'commonjs mz',
npm: 'commonjs npm',
'@terminus-term/node-pty': 'commonjs @terminus-term/node-pty',
path: 'commonjs path', path: 'commonjs path',
yargs: 'commonjs yargs', rxjs: 'commonjs rxjs',
'rxjs/operators': 'commonjs rxjs/operators',
util: 'commonjs util',
'source-map-support': 'commonjs source-map-support',
'windows-swca': 'commonjs windows-swca', 'windows-swca': 'commonjs windows-swca',
'windows-blurbehind': 'commonjs windows-blurbehind', 'windows-blurbehind': 'commonjs windows-blurbehind',
'yargs/yargs': 'commonjs yargs/yargs',
}, },
plugins: [ plugins: [
new webpack.optimize.ModuleConcatenationPlugin(), new webpack.optimize.ModuleConcatenationPlugin(),
@@ -50,3 +61,7 @@ module.exports = {
}), }),
], ],
} }
if (process.env.BUNDLE_ANALYZER) {
module.exports.plugins.push(new BundleAnalyzerPlugin())
}

File diff suppressed because it is too large Load Diff

View File

@@ -4,7 +4,7 @@ platform:
- x64 - x64
environment: environment:
nodejs_version: "10" nodejs_version: "15"
version: "{build}" version: "{build}"

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

View File

@@ -1,57 +1 @@
<?xml version="1.0" encoding="utf-8"?> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="Layer_1" x="0" y="0" version="1.1" viewBox="0 0 1024 1024" xml:space="preserve" style="enable-background:new 0 0 1024 1024"><style type="text/css">.st0{opacity:.8;fill:#00232e}.st1{fill:url(#SVGID_1_)}.st2{opacity:.16;fill:url(#SVGID_2_)}.st3{fill:url(#SVGID_3_)}.st4{opacity:.16;fill:url(#SVGID_4_)}.st5{fill:url(#SVGID_5_)}.st6{opacity:.15;fill:url(#SVGID_6_)}.st7{fill:url(#SVGID_7_)}</style><polygon points="449.5 645.47 407.51 621.23 533.47 548.5 407.51 475.77 449.5 451.53 617.45 548.5" class="st0"/><g><linearGradient id="SVGID_1_" x1="439.007" x2="627.946" y1="603.039" y2="493.955" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#669abd"/><stop offset="1" style="stop-color:#77dbdb"/></linearGradient><polygon points="449.5 621.22 617.45 524.25 617.45 475.77 449.5 572.75" class="st1"/><linearGradient id="SVGID_2_" x1="522.979" x2="543.974" y1="530.315" y2="566.679" gradientUnits="userSpaceOnUse"><stop offset=".559" style="stop-color:#000;stop-opacity:0"/><stop offset="1" style="stop-color:#000"/></linearGradient><polygon points="449.5 621.22 617.45 524.25 617.45 475.77 449.5 572.75" class="st2"/></g><g><linearGradient id="SVGID_3_" x1="397.01" x2="459.996" y1="566.684" y2="603.049" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#6a8fad"/><stop offset="1" style="stop-color:#669abd"/></linearGradient><polygon points="407.51 548.5 407.5 596.99 449.5 621.22 449.5 572.75" class="st3"/><linearGradient id="SVGID_4_" x1="439.001" x2="418.006" y1="566.684" y2="603.049" gradientUnits="userSpaceOnUse"><stop offset=".559" style="stop-color:#000;stop-opacity:0"/><stop offset="1" style="stop-color:#000"/></linearGradient><polygon points="407.51 548.5 407.5 596.99 449.5 621.22 449.5 572.75" class="st4"/></g><g><linearGradient id="SVGID_5_" x1="397.01" x2="522.978" y1="421.226" y2="493.954" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#6a8fad"/><stop offset="1" style="stop-color:#669abd"/></linearGradient><polygon points="407.51 403.04 407.5 451.53 491.49 500.01 533.48 475.77" class="st5"/><linearGradient id="SVGID_6_" x1="470.492" x2="449.496" y1="439.407" y2="475.774" gradientUnits="userSpaceOnUse"><stop offset=".559" style="stop-color:#000;stop-opacity:0"/><stop offset="1" style="stop-color:#000"/></linearGradient><polygon points="407.51 403.04 407.5 451.53 491.49 500.01 533.48 475.77" class="st6"/></g><linearGradient id="SVGID_7_" x1="386.512" x2="575.461" y1="512.136" y2="403.047" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#ccecff"/><stop offset="1" style="stop-color:#9feced"/></linearGradient><polygon points="449.5 572.74 407.51 548.5 533.48 475.77 407.51 403.04 449.49 378.8 617.45 475.77" class="st7"/></svg>
<!-- Generator: Adobe Illustrator 23.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{opacity:0.8;fill:#00232E;}
.st1{fill:url(#SVGID_1_);}
.st2{opacity:0.16;fill:url(#SVGID_2_);}
.st3{fill:url(#SVGID_3_);}
.st4{opacity:0.16;fill:url(#SVGID_4_);}
.st5{fill:url(#SVGID_5_);}
.st6{opacity:0.15;fill:url(#SVGID_6_);}
.st7{fill:url(#SVGID_7_);}
</style>
<polygon class="st0" points="449.5,645.47 407.51,621.23 533.47,548.5 407.51,475.77 449.5,451.53 617.45,548.5 "/>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="439.0065" y1="603.0394" x2="627.9464" y2="493.9549">
<stop offset="0" style="stop-color:#669ABD"/>
<stop offset="1" style="stop-color:#77DBDB"/>
</linearGradient>
<polygon class="st1" points="449.5,621.22 617.45,524.25 617.45,475.77 449.5,572.75 "/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="522.9788" y1="530.3148" x2="543.9741" y2="566.6795">
<stop offset="0.5588" style="stop-color:#000000;stop-opacity:0"/>
<stop offset="1" style="stop-color:#000000"/>
</linearGradient>
<polygon class="st2" points="449.5,621.22 617.45,524.25 617.45,475.77 449.5,572.75 "/>
</g>
<g>
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="397.0101" y1="566.6837" x2="459.9963" y2="603.0487">
<stop offset="0" style="stop-color:#6A8FAD"/>
<stop offset="1" style="stop-color:#669ABD"/>
</linearGradient>
<polygon class="st3" points="407.51,548.5 407.5,596.99 449.5,621.22 449.5,572.75 "/>
<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="439.0009" y1="566.6838" x2="418.0056" y2="603.0486">
<stop offset="0.5588" style="stop-color:#000000;stop-opacity:0"/>
<stop offset="1" style="stop-color:#000000"/>
</linearGradient>
<polygon class="st4" points="407.51,548.5 407.5,596.99 449.5,621.22 449.5,572.75 "/>
</g>
<g>
<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="397.0101" y1="421.2265" x2="522.9781" y2="493.9542">
<stop offset="0" style="stop-color:#6A8FAD"/>
<stop offset="1" style="stop-color:#669ABD"/>
</linearGradient>
<polygon class="st5" points="407.51,403.04 407.5,451.53 491.49,500.01 533.48,475.77 "/>
<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="470.4924" y1="439.4067" x2="449.4958" y2="475.774">
<stop offset="0.5588" style="stop-color:#000000;stop-opacity:0"/>
<stop offset="1" style="stop-color:#000000"/>
</linearGradient>
<polygon class="st6" points="407.51,403.04 407.5,451.53 491.49,500.01 533.48,475.77 "/>
</g>
<linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="386.5123" y1="512.136" x2="575.4605" y2="403.0467">
<stop offset="0" style="stop-color:#CCECFF"/>
<stop offset="1" style="stop-color:#9FECED"/>
</linearGradient>
<polygon class="st7" points="449.5,572.74 407.51,548.5 533.48,475.77 407.51,403.04 449.49,378.8 617.45,475.77 "/>
</svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -0,0 +1,16 @@
const fs = require('fs')
const signHook = require('./afterSignHook')
module.exports = async function (params) {
// notarize the app on Mac OS only.
if (process.platform !== 'darwin' || !process.env.GITHUB_REF || !process.env.GITHUB_REF.startsWith('refs/tags/')) {
return
}
console.log('afterBuild hook triggered')
let pkgName = fs.readdirSync('dist').find(x => x.endsWith('.pkg'))
signHook({
appOutDir: 'dist',
_pathOverride: pkgName,
})
}

View File

@@ -13,7 +13,7 @@ module.exports = async function (params) {
let appId = 'org.terminus' let appId = 'org.terminus'
let appPath = path.join(params.appOutDir, `${params.packager.appInfo.productFilename}.app`) let appPath = path.join(params.appOutDir, params._pathOverride || `${params.packager.appInfo.productFilename}.app`)
if (!fs.existsSync(appPath)) { if (!fs.existsSync(appPath)) {
throw new Error(`Cannot find application at: ${appPath}`) throw new Error(`Cannot find application at: ${appPath}`)
} }

View File

@@ -10,5 +10,9 @@
<true/> <true/>
<key>com.apple.security.cs.disable-library-validation</key> <key>com.apple.security.cs.disable-library-validation</key>
<true/> <true/>
<key>com.apple.security.device.microphone</key>
<true/>
<key>com.apple.security.device.camera</key>
<true/>
</dict> </dict>
</plist> </plist>

Binary file not shown.

BIN
docs/readme-ssh.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 371 KiB

BIN
docs/readme-terminal.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 728 KiB

View File

@@ -2,13 +2,37 @@
appId: org.terminus appId: org.terminus
productName: Terminus productName: Terminus
compression: normal compression: normal
npmRebuild: false
afterSign: "./build/mac/afterSignHook.js" afterSign: "./build/mac/afterSignHook.js"
afterAllArtifactBuild: "./build/mac/afterBuildHook.js"
files: files:
- "**/*" - '**/*'
- dist - dist
- '!lib'
- '!src'
- '!**/node_modules/*/{CHANGELOG.md,README.md,README,readme.md,readme,node.lib}'
- '!**/node_modules/*/{test,__tests__,tests,powered-test,example,examples,docs}'
- '!**/node_modules/@angular/common/locales'
- '!**/node_modules/@angular/compiler/src'
- '!**/node_modules/node-gyp'
- '!**/node_modules/**/*.d.ts'
- '!**/node_modules/**/*.map'
- '!**/node_modules/**/include/node'
- '!**/node_modules/.bin'
- '!**/node_modules/*/*/{esm5,fesm5,esm2015,fesm2015,_esm2015,_fesm2015}'
- '!**/*.{woff,ttf,otf,eot}'
- '!**/*.{iml,o,hprof,orig,pyc,pyo,rbc,swp,csproj,sln,xproj}'
- '!.editorconfig'
- '!**/._*'
- '!**/{.DS_Store,.git,.hg,.svn,CVS,RCS,SCCS,.gitignore,.gitattributes}'
- '!**/{__pycache__,thumbs.db,.flowconfig,.idea,.vs,.nyc_output}'
- '!**/{appveyor.yml,.travis.yml,circle.yml}'
- '!**/{npm-debug.log,yarn.lock,.yarn-integrity,.yarn-metadata.json'
extraResources: extraResources:
- builtin-plugins - builtin-plugins
- extras - extras
asarUnpack:
- dist/*.map
publish: publish:
- provider: github - provider: github
@@ -20,25 +44,34 @@ nsis:
oneClick: false oneClick: false
artifactName: terminus-${version}-setup.${ext} artifactName: terminus-${version}-setup.${ext}
installerIcon: "./build/windows/icon.ico" installerIcon: "./build/windows/icon.ico"
allowToChangeInstallationDirectory: true
mac: mac:
category: public.app-category.video category: public.app-category.video
icon: "./build/mac/icon.icns" icon: "./build/mac/icon.icns"
artifactName: terminus-${version}-macos.${ext} artifactName: terminus-${version}-macos-${env.ARCH}.${ext}
hardenedRuntime: true hardenedRuntime: true
entitlements: "./build/mac/entitlements.plist" entitlements: "./build/mac/entitlements.plist"
entitlementsInherit: "./build/mac/entitlements.plist" entitlementsInherit: "./build/mac/entitlements.plist"
extendInfo: extendInfo:
NSRequiresAquaSystemAppearance: false NSRequiresAquaSystemAppearance: false
pkg: NSCameraUsageDescription: "A subprocess requests access to the device's camera."
artifactName: terminus-${version}-macos.pkg NSMicrophoneUsageDescription: "A subprocess requests access to the device's microphone."
NSLocationUsageDescription: "A subprocess requests access to the user's location information."
NSDesktopFolderUsageDescription: "A subprocess requests access to the user's Desktop folder."
NSDocumentsFolderUsageDescription: "A subprocess requests access to the user's Documents folder."
NSDownloadsFolderUsageDescription: "A subprocess requests access to the user's Downloads folder."
NSNetworkVolumesUsageDescription: 'A subprocess requests access to files on a network volume.'
NSRemovableVolumesUsageDescription: 'A subprocess requests access to files on a removable volume.'
linux: linux:
category: Utilities category: Utility
icon: "./build/icons" icon: "./build/icons"
artifactName: terminus-${version}-linux.${ext} artifactName: terminus-${version}-linux.${ext}
executableArgs: executableArgs:
- "--no-sandbox" - "--no-sandbox"
desktop:
StartupWMClass: terminus
snap: snap:
plugs: plugs:
- default - default
@@ -48,13 +81,20 @@ deb:
depends: depends:
- gconf2 - gconf2
- gconf-service - gconf-service
- gnome-keyring
- libnotify4 - libnotify4
- libsecret-1-0 - libsecret-1-0
- libappindicator1 - libappindicator1
- libxtst6 - libxtst6
- libnss3 - libnss3
afterInstall: build/linux/after-install.tpl afterInstall: build/linux/after-install.tpl
pacman:
depends:
- gnome-keyring
- libsecret
rpm: rpm:
depends: depends:
- screen - gnome-keyring
- gnome-python2-gnomekeyring fpm:
- '--rpm-rpmbuild-define'
- '_build_id_links none'

Binary file not shown.

View File

@@ -1,73 +1,80 @@
{ {
"devDependencies": { "devDependencies": {
"@fortawesome/fontawesome-free": "^5.13.0", "@fortawesome/fontawesome-free": "^5.15.3",
"@sentry/cli": "^1.52.3", "@sentry/cli": "^1.64.2",
"@sentry/electron": "^1.2.1", "@sentry/electron": "^2.4.0",
"@terminus-term/to-string-loader": "1.1.7-beta.1",
"@types/electron-config": "^3.2.2", "@types/electron-config": "^3.2.2",
"@types/electron-debug": "^2.1.0", "@types/electron-debug": "^2.1.0",
"@types/js-yaml": "^3.12.3", "@types/fs-extra": "^9.0.11",
"@types/node": "12.7.12", "@types/js-yaml": "^4.0.0",
"@types/webpack-env": "^1.15.2", "@types/node": "14.14.35",
"@typescript-eslint/eslint-plugin": "^2.26.0", "@types/webpack-env": "^1.16.0",
"@typescript-eslint/parser": "^2.31.0", "@typescript-eslint/eslint-plugin": "^4.14.1",
"@typescript-eslint/parser": "^4.23.0",
"apply-loader": "2.0.0", "apply-loader": "2.0.0",
"awesome-typescript-loader": "^5.0.0", "awesome-typescript-loader": "^5.2.1",
"core-js": "^3.6.5", "compare-versions": "^3.6.0",
"cross-env": "7.0.2", "core-js": "^3.12.1",
"css-loader": "3.4.2", "cross-env": "7.0.3",
"electron": "^8.2.5", "css-loader": "5.2.0",
"electron-builder": "22.5.1", "electron": "12.0.6",
"electron-builder": "22.10.5",
"electron-download": "^4.1.1", "electron-download": "^4.1.1",
"electron-installer-snap": "^5.0.0", "electron-installer-snap": "^5.1.0",
"electron-notarize": "^0.1.1", "electron-notarize": "^1.0.0",
"electron-rebuild": "^1.10.1", "electron-rebuild": "^2.3.5",
"eslint": "^6.8.0", "eslint": "^7.26.0",
"eslint-plugin-import": "^2.20.2", "eslint-plugin-import": "^2.21.1",
"file-loader": "^5.0.2", "file-loader": "^6.2.0",
"graceful-fs": "^4.2.4", "graceful-fs": "^4.2.6",
"html-loader": "0.5.5", "html-loader": "2.1.2",
"json-loader": "0.5.7", "json-loader": "0.5.7",
"node-abi": "^2.16.0", "lru-cache": "^6.0.0",
"node-gyp": "^6.1.0", "macos-release": "^2.4.1",
"node-sass": "^4.14.1", "node-abi": "^2.21.0",
"node-gyp": "^8.0.0",
"node-sass": "^5.0.0",
"npmlog": "4.1.2", "npmlog": "4.1.2",
"npx": "^10.2.0", "npx": "^10.2.2",
"pug": "^2.0.4", "patch-package": "^6.4.7",
"pug": "^3.0.2",
"pug-html-loader": "1.1.5", "pug-html-loader": "1.1.5",
"pug-lint": "^2.6.0", "pug-lint": "^2.6.0",
"pug-loader": "^2.4.0", "pug-loader": "^2.4.0",
"pug-static-loader": "2.0.0", "pug-static-loader": "2.0.0",
"raw-loader": "4.0.1", "raw-loader": "4.0.2",
"sass-loader": "^8.0.0", "sass-loader": "^11.0.1",
"shelljs": "0.8.4", "shelljs": "0.8.4",
"source-code-pro": "^2.30.2", "source-code-pro": "^2.30.2",
"source-sans-pro": "3.6.0", "source-sans-pro": "3.6.0",
"style-loader": "^1.1.4", "ssh2-streams": "^0.4.10",
"svg-inline-loader": "^0.8.0", "style-loader": "^2.0.0",
"to-string-loader": "1.1.6", "svg-inline-loader": "^0.8.2",
"tslib": "^1.11.1", "tslib": "^2.1.0",
"typedoc": "^0.17.6", "typedoc": "^0.20.36",
"typescript": "^3.8.3", "typescript": "^3.9.9",
"url-loader": "^3.0.0", "url-loader": "^4.1.1",
"val-loader": "2.1.1", "val-loader": "3.1.0",
"webpack": "^5.0.0-beta.16", "webpack": "^5.31.0",
"webpack-cli": "^3.3.10", "webpack-bundle-analyzer": "^4.4.0",
"webpack-cli": "^4.6.0",
"yaml-loader": "0.6.0" "yaml-loader": "0.6.0"
}, },
"resolutions": { "resolutions": {
"*/node-abi": "^2.14.0" "*/node-abi": "^2.20.0",
"**/graceful-fs": "^4.2.4"
}, },
"scripts": { "scripts": {
"build": "npm run build:typings && webpack --color --config app/webpack.main.config.js && webpack --color --config app/webpack.config.js && webpack --color --config terminus-core/webpack.config.js && webpack --color --config terminus-settings/webpack.config.js && webpack --color --config terminus-terminal/webpack.config.js && webpack --color --config terminus-plugin-manager/webpack.config.js && webpack --color --config terminus-community-color-schemes/webpack.config.js && webpack --color --config terminus-ssh/webpack.config.js && webpack --color --config terminus-serial/webpack.config.js", "build": "npm run build:typings && webpack --color --config app/webpack.main.config.js && webpack --color --config app/webpack.config.js && webpack --color --config terminus-core/webpack.config.js && webpack --color --config terminus-settings/webpack.config.js && webpack --color --config terminus-terminal/webpack.config.js && webpack --color --config terminus-plugin-manager/webpack.config.js && webpack --color --config terminus-community-color-schemes/webpack.config.js && webpack --color --config terminus-ssh/webpack.config.js && webpack --color --config terminus-serial/webpack.config.js",
"build:typings": "node scripts/build-typings.js", "build:typings": "node scripts/build-typings.js",
"watch": "cross-env TERMINUS_DEV=1 webpack --progress --color --watch", "watch": "cross-env TERMINUS_DEV=1 webpack --progress --color --watch",
"start": "cross-env TERMINUS_DEV=1 electron app --debug", "start": "cross-env TERMINUS_DEV=1 electron app --debug --inspect",
"start:prod": "electron app --debug",
"prod": "cross-env TERMINUS_DEV=1 electron app", "prod": "cross-env TERMINUS_DEV=1 electron app",
"docs": "typedoc --out docs/api terminus-core/src && typedoc --out docs/api/terminal --tsconfig terminus-terminal/tsconfig.typings.json terminus-terminal/src && typedoc --out docs/api/settings --tsconfig terminus-settings/tsconfig.typings.json terminus-settings/src", "docs": "typedoc --out docs/api --tsconfig terminus-core/src/tsconfig.typings.json terminus-core/src/index.ts && typedoc --out docs/api/terminal --tsconfig terminus-terminal/tsconfig.typings.json terminus-terminal/src/index.ts && typedoc --out docs/api/settings --tsconfig terminus-settings/tsconfig.typings.json terminus-settings/src/index.ts",
"lint": "eslint --ext ts */src */lib", "lint": "eslint --ext ts */src */lib",
"postinstall": "node ./scripts/install-deps.js" "postinstall": "node ./scripts/install-deps.js"
}, },
"repository": "eugeny/terminus", "private": true
"author": "Eugene Pankov",
"license": "MIT"
} }

View File

@@ -7,7 +7,7 @@ const isCI = !!process.env.GITHUB_REF
builder({ builder({
dir: true, dir: true,
linux: ['deb', 'tar.gz', 'rpm'], linux: ['deb', 'tar.gz', 'rpm', 'pacman'],
config: { config: {
extraMetadata: { extraMetadata: {
version: vars.version, version: vars.version,

View File

@@ -1,17 +0,0 @@
#!/usr/bin/env node
const builder = require('electron-builder').build
const vars = require('./vars')
const isTag = (process.env.GITHUB_REF || '').startsWith('refs/tags/')
const isCI = !!process.env.GITHUB_REF
builder({
dir: true,
mac: ['zip'],
config: {
extraMetadata: {
version: vars.version,
},
},
publish: isTag ? 'always' : 'onTag',
}).catch(() => process.exit(1))

View File

@@ -3,15 +3,21 @@ const builder = require('electron-builder').build
const vars = require('./vars') const vars = require('./vars')
const isTag = (process.env.GITHUB_REF || '').startsWith('refs/tags/') const isTag = (process.env.GITHUB_REF || '').startsWith('refs/tags/')
const isCI = !!process.env.GITHUB_REF
process.env.ARCH = process.env.ARCH || process.arch
builder({ builder({
dir: true, dir: true,
mac: ['pkg'], mac: ['pkg', 'zip'],
arm64: process.env.ARCH === 'arm64',
config: { config: {
extraMetadata: { extraMetadata: {
version: vars.version, version: vars.version,
}, },
npmRebuild: process.env.ARCH !== 'arm64',
}, },
publish: isTag ? 'always' : 'onTag', publish: isTag ? 'always' : 'onTag',
}).catch(() => process.exit(1)) }).catch(e => {
console.error(e)
process.exit(1)
})

View File

@@ -8,6 +8,7 @@ for (let dir of ['app', 'terminus-core', 'terminus-ssh', 'terminus-terminal']) {
const build = rebuild({ const build = rebuild({
buildPath: path.resolve(__dirname, '../' + dir), buildPath: path.resolve(__dirname, '../' + dir),
electronVersion: vars.electronVersion, electronVersion: vars.electronVersion,
arch: process.env.ARCH ?? process.arch,
force: true, force: true,
}) })
build.catch(e => { build.catch(e => {

View File

@@ -10,13 +10,13 @@ const npx = `${localBinPath}/npx`;
log.info('deps', 'app') log.info('deps', 'app')
sh.cd('app') sh.cd('app')
sh.exec(`${npx} yarn install`) sh.exec(`${npx} yarn install --force`)
sh.cd('..') sh.cd('..')
vars.builtinPlugins.forEach(plugin => { vars.builtinPlugins.forEach(plugin => {
log.info('deps', plugin) log.info('deps', plugin)
sh.cd(plugin) sh.cd(plugin)
sh.exec(`${npx} yarn install`) sh.exec(`${npx} yarn install --force`)
sh.cd('..') sh.cd('..')
}) })

View File

@@ -15,10 +15,17 @@ vars.builtinPlugins.forEach(plugin => {
sh.cp('-r', path.join('..', plugin), '.') sh.cp('-r', path.join('..', plugin), '.')
sh.rm('-rf', path.join(plugin, 'node_modules')) sh.rm('-rf', path.join(plugin, 'node_modules'))
sh.cd(plugin) sh.cd(plugin)
sh.exec(`npm install --only=prod`) sh.exec(`yarn install --force --production`)
log.info('rebuild', 'native') log.info('rebuild', 'native')
if (fs.existsSync('node_modules')) { if (fs.existsSync('node_modules')) {
rebuild(path.resolve('.'), vars.electronVersion, process.arch, [], true) rebuild({
buildPath: path.resolve('.'),
electronVersion: vars.electronVersion,
arch: process.env.ARCH ?? process.arch,
force: true,
})
} }
sh.cd('..') sh.cd('..')
}) })

24
scripts/sentry-upload.js Executable file
View File

@@ -0,0 +1,24 @@
#!/usr/bin/env node
const sh = require('shelljs')
const vars = require('./vars')
const sentryCli = process.platform === 'win32' ? 'node_modules\\.bin\\sentry-cli.cmd' : 'sentry-cli'
sh.exec(`${sentryCli} releases new ${vars.version}`)
if (process.platform === 'darwin') {
for (const path of [
'app/node_modules/@serialport/bindings/build/Release/bindings.node',
'app/node_modules/@terminus-term/node-pty/build/Release/pty.node',
'app/node_modules/fontmanager-redux/build/Release/fontmanager.node',
'app/node_modules/macos-native-processlist/build/Release/native.node',
]) {
sh.exec('dsymutil ' + path)
}
}
sh.exec(`${sentryCli} upload-dif app/node_modules`)
sh.exec(`${sentryCli} releases set-commits --auto ${vars.version}`)
for (const p of vars.builtinPlugins) {
sh.exec(`${sentryCli} releases files ${vars.version} upload-sourcemaps ${p}/dist -u ${p}/dist/ -d ${process.platform}-${p}`)
}

View File

@@ -1,6 +1,6 @@
{ {
"name": "terminus-community-color-schemes", "name": "terminus-community-color-schemes",
"version": "1.0.104-nightly.0", "version": "1.0.135-nightly.0",
"description": "Community color schemes for Terminus", "description": "Community color schemes for Terminus",
"keywords": [ "keywords": [
"terminus-builtin-plugin" "terminus-builtin-plugin"
@@ -17,7 +17,7 @@
"author": "Eugene Pankov", "author": "Eugene Pankov",
"license": "MIT", "license": "MIT",
"peerDependencies": { "peerDependencies": {
"@angular/core": "^7", "@angular/core": "^9.1.9",
"terminus-core": "*", "terminus-core": "*",
"terminus-terminal": "*" "terminus-terminal": "*"
} }

View File

@@ -0,0 +1,42 @@
!
!
*.foreground: #d8dee9
*.background: #2e3440
*.cursorColor: #d8dee9
!
! Black
*.color0: #3b4252
*.color8: #373e4d
!
! Red
*.color1: #bf616a
*.color9: #94545d
!
! Green
*.color2: #a3be8c
*.color10: #809575
!
! Yellow
*.color3: #ebcb8b
*.color11: #b29e75
!
! Blue
*.color4: #81a1c1
*.color12: #68809a
!
! Magenta
*.color5: #b48ead
*.color13: #8c738c
!
! Cyan
*.color6: #88c0d0
*.color14: #6d96a5
!
! White
*.color7: #e5e9f0
*.color15: #aeb3bb
!
! Bold, Italic, Underline
*.colorBD: #a5abb6
!*.colorIT:
!*.colorUL:

View File

@@ -1,14 +1,14 @@
import { Injectable } from '@angular/core' import { Injectable } from '@angular/core'
import { TerminalColorSchemeProvider, TerminalColorScheme } from 'terminus-terminal' import { TerminalColorSchemeProvider, TerminalColorScheme } from 'terminus-terminal'
const schemeContents = require.context('../schemes/', true, /.*/) const schemeContents = require.context('../schemes/', false, /.*/)
@Injectable() @Injectable()
export class ColorSchemes extends TerminalColorSchemeProvider { export class ColorSchemes extends TerminalColorSchemeProvider {
async getSchemes (): Promise<TerminalColorScheme[]> { async getSchemes (): Promise<TerminalColorScheme[]> {
const schemes: TerminalColorScheme[] = [] const schemes: TerminalColorScheme[] = []
schemeContents.keys().forEach(schemeFile => { schemeContents.keys().filter(x => !x.startsWith('./')).forEach(schemeFile => {
const lines = (schemeContents(schemeFile).default as string).split('\n') const lines = (schemeContents(schemeFile).default as string).split('\n')
// process #define variables // process #define variables

View File

@@ -1,51 +1,6 @@
const path = require('path') const config = require('../webpack.plugin.config')
module.exports = config({
module.exports = { name: 'community-color-schemes',
target: 'node', dirname: __dirname,
entry: 'src/index.ts', })
context: __dirname, module.exports.module.rules.push({ test: /[\\\/]schemes[\\\/]/, use: 'raw-loader' })
devtool: 'eval-cheap-module-source-map',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'index.js',
pathinfo: true,
libraryTarget: 'umd',
devtoolModuleFilenameTemplate: 'webpack-terminus-community-color-schemes:///[resource-path]',
},
mode: process.env.TERMINUS_DEV ? 'development' : 'production',
optimization:{
minimize: false,
},
resolve: {
modules: ['.', 'src', 'node_modules', '../app/node_modules'].map(x => path.join(__dirname, x)),
extensions: ['.ts', '.js'],
},
module: {
rules: [
{
test: /\.ts$/,
use: {
loader: 'awesome-typescript-loader',
options: {
configFileName: path.resolve(__dirname, 'tsconfig.json'),
typeRoots: [
path.resolve(__dirname, 'node_modules/@types'),
path.resolve(__dirname, '../node_modules/@types'),
],
paths: {
"terminus-*": [path.resolve(__dirname, '../terminus-*')],
"*": [path.resolve(__dirname, '../app/node_modules/*')],
},
},
},
},
{ test: /[\\\/]schemes[\\\/]/, use: "raw-loader" },
],
},
externals: [
/^rxjs/,
/^@angular/,
/^@ng-bootstrap/,
/^terminus-/,
],
}

View File

@@ -1,2 +1 @@
dist dist
node_modules

View File

@@ -1,6 +1,6 @@
{ {
"name": "terminus-core", "name": "terminus-core",
"version": "1.0.104-nightly.0", "version": "1.0.135-nightly.0",
"description": "Terminus core", "description": "Terminus core",
"keywords": [ "keywords": [
"terminus-builtin-plugin" "terminus-builtin-plugin"
@@ -17,29 +17,32 @@
"author": "Eugene Pankov", "author": "Eugene Pankov",
"license": "MIT", "license": "MIT",
"devDependencies": { "devDependencies": {
"@types/js-yaml": "^3.9.0", "@electron/remote": "1.0.4",
"@types/js-yaml": "^4.0.0",
"@types/shell-escape": "^0.2.0", "@types/shell-escape": "^0.2.0",
"@types/winston": "^2.3.6", "@types/winston": "^2.3.6",
"axios": "^0.19.0", "axios": "^0.21.1",
"bootstrap": "^4.1.3", "bootstrap": "^4.1.3",
"clone-deep": "^4.0.1",
"core-js": "^3.1.2", "core-js": "^3.1.2",
"deepmerge": "^4.1.1", "deepmerge": "^4.1.1",
"electron-updater": "^4.0.6", "electron-updater": "^4.0.6",
"js-yaml": "^3.9.0", "js-yaml": "^4.0.0",
"mixpanel": "^0.10.2", "mixpanel": "^0.10.2",
"ng2-dnd": "^5.0.2", "ng2-dnd": "^5.0.2",
"ngx-perfect-scrollbar": "^8.0.0", "ngx-perfect-scrollbar": "^10.1.0",
"readable-stream": "3.6.0",
"shell-escape": "^0.2.0", "shell-escape": "^0.2.0",
"uuid": "^8.0.0", "uuid": "^8.0.0",
"winston": "^3.2.1" "winston": "^3.3.3"
}, },
"peerDependencies": { "peerDependencies": {
"@angular/animations": "^7", "@angular/animations": "^9.1.9",
"@angular/common": "^7", "@angular/common": "^9.1.11",
"@angular/core": "^7", "@angular/core": "^9.1.9",
"@angular/forms": "^7", "@angular/forms": "^9.1.11",
"@angular/platform-browser": "^7", "@angular/platform-browser": "^9.1.11",
"@angular/platform-browser-dynamic": "^7", "@angular/platform-browser-dynamic": "^9.1.11",
"rxjs": "^5" "rxjs": "^6.6.3"
} }
} }

View File

@@ -33,5 +33,5 @@ export abstract class ConfigProvider {
* } * }
* ``` * ```
*/ */
platformDefaults: {[platform: string]: any} = {} platformDefaults: Record<string, any> = {}
} }

View File

@@ -8,7 +8,5 @@ export interface HotkeyDescription {
* must also provide the `hotkeys.foo` config options with the default values * must also provide the `hotkeys.foo` config options with the default values
*/ */
export abstract class HotkeyProvider { export abstract class HotkeyProvider {
hotkeys: HotkeyDescription[] = []
abstract provide (): Promise<HotkeyDescription[]> abstract provide (): Promise<HotkeyDescription[]>
} }

View File

@@ -1,3 +1,4 @@
export { BaseComponent, SubscriptionContainer } from '../components/base.component'
export { BaseTabComponent, BaseTabProcess } from '../components/baseTab.component' export { BaseTabComponent, BaseTabProcess } from '../components/baseTab.component'
export { TabHeaderComponent } from '../components/tabHeader.component' export { TabHeaderComponent } from '../components/tabHeader.component'
export { SplitTabComponent, SplitContainer } from '../components/splitTab.component' export { SplitTabComponent, SplitContainer } from '../components/splitTab.component'
@@ -17,7 +18,9 @@ export { Logger, LogService } from '../services/log.service'
export { HomeBaseService } from '../services/homeBase.service' export { HomeBaseService } from '../services/homeBase.service'
export { HotkeysService } from '../services/hotkeys.service' export { HotkeysService } from '../services/hotkeys.service'
export { HostAppService, Platform } from '../services/hostApp.service' export { HostAppService, Platform } from '../services/hostApp.service'
export { NotificationsService } from '../services/notifications.service'
export { ShellIntegrationService } from '../services/shellIntegration.service' export { ShellIntegrationService } from '../services/shellIntegration.service'
export { ThemesService } from '../services/themes.service' export { ThemesService } from '../services/themes.service'
export { TabsService } from '../services/tabs.service' export { TabsService } from '../services/tabs.service'
export { UpdaterService } from '../services/updater.service'
export * from '../utils' export * from '../utils'

View File

@@ -1,3 +1,4 @@
import type { MenuItemConstructorOptions } from 'electron'
import { BaseTabComponent } from '../components/baseTab.component' import { BaseTabComponent } from '../components/baseTab.component'
import { TabHeaderComponent } from '../components/tabHeader.component' import { TabHeaderComponent } from '../components/tabHeader.component'
@@ -7,5 +8,5 @@ import { TabHeaderComponent } from '../components/tabHeader.component'
export abstract class TabContextMenuItemProvider { export abstract class TabContextMenuItemProvider {
weight = 0 weight = 0
abstract async getItems (tab: BaseTabComponent, tabHeader?: TabHeaderComponent): Promise<Electron.MenuItemConstructorOptions[]> abstract async getItems (tab: BaseTabComponent, tabHeader?: TabHeaderComponent): Promise<MenuItemConstructorOptions[]>
} }

View File

@@ -1,3 +1,4 @@
import deepClone from 'clone-deep'
import { TabComponentType } from '../services/tabs.service' import { TabComponentType } from '../services/tabs.service'
export interface RecoveredTab { export interface RecoveredTab {
@@ -35,10 +36,26 @@ export interface RecoveryToken {
* ``` * ```
*/ */
export abstract class TabRecoveryProvider { export abstract class TabRecoveryProvider {
/**
* @param recoveryToken a recovery token found in the saved tabs list
* @returns [[boolean]] whether this [[TabRecoveryProvider]] can recover a tab from this token
*/
abstract async applicableTo (recoveryToken: RecoveryToken): Promise<boolean>
/** /**
* @param recoveryToken a recovery token found in the saved tabs list * @param recoveryToken a recovery token found in the saved tabs list
* @returns [[RecoveredTab]] descriptor containing tab type and component inputs * @returns [[RecoveredTab]] descriptor containing tab type and component inputs
* or `null` if this token is from a different tab type or is not supported * or `null` if this token is from a different tab type or is not supported
*/ */
abstract async recover (recoveryToken: RecoveryToken): Promise<RecoveredTab|null> abstract async recover (recoveryToken: RecoveryToken): Promise<RecoveredTab>
/**
* @param recoveryToken a recovery token found in the saved tabs list
* @returns [[RecoveryToken]] a new recovery token to create the duplicate tab from
*
* The default implementation just returns a deep copy of the original token
*/
duplicate (recoveryToken: RecoveryToken): RecoveryToken {
return deepClone(recoveryToken)
}
} }

View File

@@ -10,4 +10,7 @@ export abstract class Theme {
css: string css: string
terminalBackground: string terminalBackground: string
macOSWindowButtonsInsetX?: number
macOSWindowButtonsInsetY?: number
} }

View File

@@ -1,13 +1,17 @@
title-bar( title-bar(
*ngIf='!hostApp.isFullScreen && config.store.appearance.frame == "full" && config.store.appearance.dock == "off"', *ngIf='!hostApp.isFullScreen && config.store.appearance.frame == "full" && config.store.appearance.dock == "off"',
[class.inset]='hostApp.platform == Platform.macOS' [class.inset]='hostApp.platform == Platform.macOS && !hostApp.isFullScreen'
) )
.content( .content(
[class.tabs-on-top]='config.store.appearance.tabsLocation == "top"' [class.tabs-on-top]='config.store.appearance.tabsLocation == "top" || config.store.appearance.tabsLocation == "left"',
[class.tabs-on-side]='hasVerticalTabs()',
) )
.tab-bar .tab-bar
.inset.background(*ngIf='hostApp.platform == Platform.macOS && config.store.appearance.frame == "thin" && config.store.appearance.tabsLocation == "top"') .inset.background(*ngIf='hostApp.platform == Platform.macOS \
&& !hostApp.isFullScreen \
&& config.store.appearance.frame == "thin" \
&& (config.store.appearance.tabsLocation == "top" || config.store.appearance.tabsLocation == "left")')
.tabs( .tabs(
dnd-sortable-container, dnd-sortable-container,
[sortableData]='app.tabs', [sortableData]='app.tabs',
@@ -18,12 +22,11 @@ title-bar(
[sortableIndex]='idx', [sortableIndex]='idx',
(onDragStart)='onTabDragStart()', (onDragStart)='onTabDragStart()',
(onDragEnd)='onTabDragEnd()', (onDragEnd)='onTabDragEnd()',
[index]='idx', [index]='idx',
[tab]='tab', [tab]='tab',
[active]='tab == app.activeTab', [active]='tab == app.activeTab',
[hasActivity]='tab.activity$|async',
@animateTab, @animateTab,
[@.disabled]='hasVerticalTabs()',
(click)='app.selectTab(tab)', (click)='app.selectTab(tab)',
[class.fully-draggable]='hostApp.platform != Platform.macOS', [class.fully-draggable]='hostApp.platform != Platform.macOS',
[class.drag-region]='hostApp.platform == Platform.macOS && !tabsDragging', [class.drag-region]='hostApp.platform == Platform.macOS && !tabsDragging',
@@ -82,20 +85,23 @@ title-bar(
button.btn.btn-secondary.btn-tab-bar.btn-update( button.btn.btn-secondary.btn-tab-bar.btn-update(
*ngIf='updatesAvailable', *ngIf='updatesAvailable',
title='Update available - Click to install', title='Update available - Click to install',
(click)='updateApp()', (click)='updater.update()',
[fastHtmlBind]='updateIcon' [fastHtmlBind]='updateIcon'
) )
window-controls.background( window-controls.background(
*ngIf='config.store.appearance.frame == "thin" && (hostApp.platform == Platform.Windows || hostApp.platform == Platform.Linux)', *ngIf='config.store.appearance.frame == "thin" \
&& (hostApp.platform == Platform.Windows || hostApp.platform == Platform.Linux)',
) )
start-page(*ngIf='ready && app.tabs.length == 0') .content
start-page.content-tab.content-tab-active(*ngIf='ready && app.tabs.length == 0')
tab-body( tab-body.content-tab(
*ngFor='let tab of unsortedTabs', *ngFor='let tab of unsortedTabs',
[active]='tab == app.activeTab', [class.content-tab-active]='tab == app.activeTab',
[tab]='tab', [active]='tab == app.activeTab',
) [tab]='tab',
)
ng-template(ngbModalContainer) ng-template(ngbModalContainer)

View File

@@ -15,29 +15,77 @@
$tabs-height: 38px; $tabs-height: 38px;
$tab-border-radius: 4px; $tab-border-radius: 4px;
$side-tab-width: 200px;
.wrap {
display: flex;
width: 100vw;
height: 100vh;
flex-direction: row;
}
.content { .content {
height: 100%; width: 100vw;
flex: auto; flex: 1 1 0;
min-height: 0;
display: flex; display: flex;
flex-direction: column-reverse; flex-direction: column-reverse;
&.tabs-on-top { &.tabs-on-top {
flex-direction: column; flex-direction: column;
} }
&.tabs-on-side {
flex-direction: row-reverse;
&.tabs-on-top {
flex-direction: row;
}
}
} }
.content.tabs-on-side > .tab-bar {
height: 100%;
width: $side-tab-width;
overflow-y: auto;
overflow-x: hidden;
flex-direction: column;
background: rgba(0, 0, 0, 0.25);
.tabs {
width: $side-tab-width;
flex: none;
flex-direction: column;
tab-header {
flex: 0 0 $tabs-height;
}
}
.drag-space {
flex: auto;
}
&>.inset {
opacity: 0;
}
}
.tab-bar { .tab-bar {
flex: none; flex: none;
height: $tabs-height; height: $tabs-height;
display: flex; display: flex;
width: 100%;
.btn-tab-bar { .btn-tab-bar {
line-height: $tabs-height + 2px; line-height: $tabs-height + 2px;
height: $tabs-height;
cursor: pointer; cursor: pointer;
display: flex; display: flex;
align-items: center;
padding: 0 15px; padding: 0 15px;
flex: 0 0 auto; flex: 0 0 auto;
border-bottom: 2px solid transparent; border-bottom: 2px solid transparent;
@@ -50,6 +98,8 @@ $tab-border-radius: 4px;
border: none; border: none;
border-radius: 0; border-radius: 0;
align-items: center;
&.dropdown-toggle::after { &.dropdown-toggle::after {
display: none; display: none;
} }
@@ -74,7 +124,9 @@ $tab-border-radius: 4px;
& > .inset { & > .inset {
width: 85px; width: 85px;
height: $tabs-height;
flex: none; flex: none;
-webkit-app-region: drag;
} }
window-controls { window-controls {
@@ -82,9 +134,24 @@ $tab-border-radius: 4px;
} }
} }
.tabs-content { .content {
flex: auto; flex: 1 1 0;
display: flex; position: relative;
min-height: 0;
min-width: 0;
> .content-tab {
position: absolute;
top: 0;
width: 100%;
height: 100%;
left: -1000%;
&.content-tab-active {
left: 0;
}
}
} }
hotkey-hint { hotkey-hint {

View File

@@ -68,7 +68,6 @@ export class AppRootComponent {
private constructor ( private constructor (
private docking: DockingService, private docking: DockingService,
private electron: ElectronService,
private hotkeys: HotkeysService, private hotkeys: HotkeysService,
private updater: UpdaterService, private updater: UpdaterService,
private touchbar: TouchbarService, private touchbar: TouchbarService,
@@ -76,6 +75,7 @@ export class AppRootComponent {
public config: ConfigService, public config: ConfigService,
public app: AppService, public app: AppService,
@Inject(ToolbarButtonProvider) private toolbarButtonProviders: ToolbarButtonProvider[], @Inject(ToolbarButtonProvider) private toolbarButtonProviders: ToolbarButtonProvider[],
electron: ElectronService,
log: LogService, log: LogService,
ngbModal: NgbModal, ngbModal: NgbModal,
_themes: ThemesService, _themes: ThemesService,
@@ -136,12 +136,18 @@ export class AppRootComponent {
ngbModal.open(SafeModeModalComponent) ngbModal.open(SafeModeModalComponent)
} }
this.updater.check().then(available => { setInterval(() => {
this.updatesAvailable = available if (this.config.store.enableAutomaticUpdates) {
}) this.updater.check().then(available => {
this.updatesAvailable = available
})
}
}, 3600 * 12)
this.touchbar.update() this.touchbar.update()
this.hostApp.useBuiltinGraphics()
config.changed$.subscribe(() => this.updateVibrancy()) config.changed$.subscribe(() => this.updateVibrancy())
this.updateVibrancy() this.updateVibrancy()
@@ -184,18 +190,8 @@ export class AppRootComponent {
return false return false
} }
async updateApp () { hasVerticalTabs () {
if ((await this.electron.showMessageBox( return this.config.store.appearance.tabsLocation === 'left' || this.config.store.appearance.tabsLocation === 'right'
this.hostApp.getWindow(),
{
type: 'warning',
message: 'Installing the update will close all tabs and restart Terminus.',
buttons: ['Cancel', 'Update'],
defaultId: 1,
}
)).response === 1) {
this.updater.update()
}
} }
onTabDragStart () { onTabDragStart () {
@@ -225,8 +221,8 @@ export class AppRootComponent {
buttons = buttons.concat(provider.provide()) buttons = buttons.concat(provider.provide())
}) })
return buttons return buttons
.filter(button => (button.weight || 0) > 0 === aboveZero) .filter(button => (button.weight ?? 0) > 0 === aboveZero)
.sort((a: ToolbarButton, b: ToolbarButton) => (a.weight || 0) - (b.weight || 0)) .sort((a: ToolbarButton, b: ToolbarButton) => (a.weight ?? 0) - (b.weight ?? 0))
} }
private updateVibrancy () { private updateVibrancy () {

View File

@@ -0,0 +1,54 @@
import { Observable, Subscription } from 'rxjs'
interface CancellableEvent {
element: HTMLElement
event: string
handler: EventListenerOrEventListenerObject
options?: boolean|AddEventListenerOptions
}
export class SubscriptionContainer {
private subscriptions: Subscription[] = []
private events: CancellableEvent[] = []
addEventListener (element: HTMLElement, event: string, handler: EventListenerOrEventListenerObject, options?: boolean|AddEventListenerOptions): void {
element.addEventListener(event, handler, options)
this.events.push({
element,
event,
handler,
options,
})
}
subscribe <T> (observable: Observable<T>, handler: (v: T) => void): void {
this.subscriptions.push(observable.subscribe(handler))
}
cancelAll (): void {
for (const s of this.subscriptions) {
s.unsubscribe()
}
for (const e of this.events) {
e.element.removeEventListener(e.event, e.handler, e.options)
}
this.subscriptions = []
this.events = []
}
}
export class BaseComponent {
private subscriptionContainer = new SubscriptionContainer()
addEventListenerUntilDestroyed (element: HTMLElement, event: string, handler: EventListenerOrEventListenerObject, options?: boolean|AddEventListenerOptions): void {
this.subscriptionContainer.addEventListener(element, event, handler, options)
}
subscribeUntilDestroyed <T> (observable: Observable<T>, handler: (v: T) => void): void {
this.subscriptionContainer.subscribe(observable, handler)
}
ngOnDestroy (): void {
this.subscriptionContainer.cancelAll()
}
}

View File

@@ -1,6 +1,7 @@
import { Observable, Subject } from 'rxjs' import { Observable, Subject } from 'rxjs'
import { ViewRef } from '@angular/core' import { ViewRef } from '@angular/core'
import { RecoveryToken } from '../api/tabRecovery' import { RecoveryToken } from '../api/tabRecovery'
import { BaseComponent } from './base.component'
/** /**
* Represents an active "process" inside a tab, * Represents an active "process" inside a tab,
@@ -13,7 +14,7 @@ export interface BaseTabProcess {
/** /**
* Abstract base class for custom tab components * Abstract base class for custom tab components
*/ */
export abstract class BaseTabComponent { export abstract class BaseTabComponent extends BaseComponent {
/** /**
* Parent tab (usually a SplitTabComponent) * Parent tab (usually a SplitTabComponent)
*/ */
@@ -69,6 +70,7 @@ export abstract class BaseTabComponent {
get recoveryStateChangedHint$ (): Observable<void> { return this.recoveryStateChangedHint } get recoveryStateChangedHint$ (): Observable<void> { return this.recoveryStateChangedHint }
protected constructor () { protected constructor () {
super()
this.focused$.subscribe(() => { this.focused$.subscribe(() => {
this.hasFocus = true this.hasFocus = true
}) })
@@ -158,10 +160,17 @@ export abstract class BaseTabComponent {
this.blurred.complete() this.blurred.complete()
this.titleChange.complete() this.titleChange.complete()
this.progress.complete() this.progress.complete()
this.activity.complete()
this.recoveryStateChangedHint.complete() this.recoveryStateChangedHint.complete()
if (!skipDestroyedEvent) { if (!skipDestroyedEvent) {
this.destroyed.next() this.destroyed.next()
} }
this.destroyed.complete() this.destroyed.complete()
} }
/** @hidden */
ngOnDestroy (): void {
this.destroy()
super.ngOnDestroy()
}
} }

View File

@@ -17,7 +17,7 @@ import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'
}) })
export class CheckboxComponent implements ControlValueAccessor { export class CheckboxComponent implements ControlValueAccessor {
@HostBinding('class.active') @Input() model: boolean @HostBinding('class.active') @Input() model: boolean
@Input() disabled: boolean @HostBinding('class.disabled') @Input() disabled: boolean
@Input() text: string @Input() text: string
private changed = new Array<(val: boolean) => void>() private changed = new Array<(val: boolean) => void>()

View File

@@ -7,7 +7,7 @@
(ngModelChange)='onFilterChange()' (ngModelChange)='onFilterChange()'
) )
.list-group.mt-3(*ngIf='filteredOptions.length') .list-group(*ngIf='filteredOptions.length')
a.list-group-item.list-group-item-action.d-flex.align-items-center( a.list-group-item.list-group-item-action.d-flex.align-items-center(
#item, #item,
(click)='selectOption(option)', (click)='selectOption(option)',

View File

@@ -1,6 +1,12 @@
.modal-body {
padding: 0;
}
.list-group { .list-group {
max-height: 70vh; max-height: 70vh;
overflow: auto; overflow: auto;
border-top-left-radius: 0;
border-top-right-radius: 0;
} }
.icon { .icon {
@@ -11,3 +17,8 @@
.title { .title {
margin-left: 10px; margin-left: 10px;
} }
input {
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
}

View File

@@ -1,9 +1,10 @@
import { Component, Input, HostListener, ViewChildren, QueryList, ElementRef } from '@angular/core' import { Component, Input, HostListener, ViewChildren, QueryList, ElementRef } from '@angular/core' // eslint-disable-line @typescript-eslint/no-unused-vars
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
import { SelectorOption } from '../api/selector' import { SelectorOption } from '../api/selector'
/** @hidden */ /** @hidden */
@Component({ @Component({
selector: 'selector-modal',
template: require('./selectorModal.component.pug'), template: require('./selectorModal.component.pug'),
styles: [require('./selectorModal.component.scss')], styles: [require('./selectorModal.component.scss')],
}) })
@@ -50,7 +51,7 @@ export class SelectorModalComponent<T> {
this.filteredOptions = this.options.filter(x => !x.freeInputPattern) this.filteredOptions = this.options.filter(x => !x.freeInputPattern)
} else { } else {
// eslint-disable-next-line @typescript-eslint/restrict-plus-operands // eslint-disable-next-line @typescript-eslint/restrict-plus-operands
this.filteredOptions = this.options.filter(x => x.freeInputPattern || (x.name + (x.description || '')).toLowerCase().includes(f)) this.filteredOptions = this.options.filter(x => x.freeInputPattern ?? (x.name + (x.description ?? '')).toLowerCase().includes(f))
} }
this.selectedIndex = Math.max(0, this.selectedIndex) this.selectedIndex = Math.max(0, this.selectedIndex)
this.selectedIndex = Math.min(this.filteredOptions.length - 1, this.selectedIndex) this.selectedIndex = Math.min(this.filteredOptions.length - 1, this.selectedIndex)
@@ -72,7 +73,7 @@ export class SelectorModalComponent<T> {
this.modalInstance.dismiss() this.modalInstance.dismiss()
} }
iconIsSVG (icon: string): boolean { iconIsSVG (icon?: string): boolean {
return icon?.startsWith('<') return icon?.startsWith('<') ?? false
} }
} }

View File

@@ -1,4 +1,4 @@
import { Observable, Subject, Subscription } from 'rxjs' import { Observable, Subject } from 'rxjs'
import { Component, Injectable, ViewChild, ViewContainerRef, EmbeddedViewRef, AfterViewInit, OnDestroy } from '@angular/core' import { Component, Injectable, ViewChild, ViewContainerRef, EmbeddedViewRef, AfterViewInit, OnDestroy } from '@angular/core'
import { BaseTabComponent, BaseTabProcess } from './baseTab.component' import { BaseTabComponent, BaseTabProcess } from './baseTab.component'
import { TabRecoveryProvider, RecoveredTab, RecoveryToken } from '../api/tabRecovery' import { TabRecoveryProvider, RecoveredTab, RecoveryToken } from '../api/tabRecovery'
@@ -157,9 +157,12 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
/** @hidden */ /** @hidden */
_spanners: SplitSpannerInfo[] = [] _spanners: SplitSpannerInfo[] = []
private focusedTab: BaseTabComponent /** @hidden */
_allFocusMode = false
/** @hidden */
private focusedTab: BaseTabComponent|null = null
private maximizedTab: BaseTabComponent|null = null private maximizedTab: BaseTabComponent|null = null
private hotkeysSubscription: Subscription
private viewRefs: Map<BaseTabComponent, EmbeddedViewRef<any>> = new Map() private viewRefs: Map<BaseTabComponent, EmbeddedViewRef<any>> = new Map()
private tabAdded = new Subject<BaseTabComponent>() private tabAdded = new Subject<BaseTabComponent>()
@@ -206,8 +209,8 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
}) })
this.blurred$.subscribe(() => this.getAllTabs().forEach(x => x.emitBlurred())) this.blurred$.subscribe(() => this.getAllTabs().forEach(x => x.emitBlurred()))
this.hotkeysSubscription = this.hotkeys.matchedHotkey.subscribe(hotkey => { this.subscribeUntilDestroyed(this.hotkeys.matchedHotkey, hotkey => {
if (!this.hasFocus) { if (!this.hasFocus || !this.focusedTab) {
return return
} }
switch (hotkey) { switch (hotkey) {
@@ -252,14 +255,15 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
/** @hidden */ /** @hidden */
async ngAfterViewInit (): Promise<void> { async ngAfterViewInit (): Promise<void> {
if (this._recoveredState) { if (this._recoveredState) {
await this.recoverContainer(this.root, this._recoveredState) await this.recoverContainer(this.root, this._recoveredState, this._recoveredState.duplicate)
this.layout() this.layout()
setImmediate(() => { setTimeout(() => {
if (this.hasFocus) { if (this.hasFocus) {
this.getAllTabs().forEach(x => x.emitFocused()) for (const tab of this.getAllTabs()) {
this.focusAnyIn(this.root) this.focus(tab)
}
} }
}) }, 100)
} }
this.initialized.next() this.initialized.next()
this.initialized.complete() this.initialized.complete()
@@ -267,7 +271,9 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
/** @hidden */ /** @hidden */
ngOnDestroy (): void { ngOnDestroy (): void {
this.hotkeysSubscription.unsubscribe() this.tabAdded.complete()
this.tabRemoved.complete()
super.ngOnDestroy()
} }
/** @returns Flat list of all sub-tabs */ /** @returns Flat list of all sub-tabs */
@@ -275,7 +281,7 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
return this.root.getAllTabs() return this.root.getAllTabs()
} }
getFocusedTab (): BaseTabComponent { getFocusedTab (): BaseTabComponent|null {
return this.focusedTab return this.focusedTab
} }
@@ -290,10 +296,8 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
x.emitBlurred() x.emitBlurred()
} }
} }
if (tab) { tab.emitFocused()
tab.emitFocused() this.focusChanged.next(tab)
this.focusChanged.next(tab)
}
if (this.maximizedTab !== tab) { if (this.maximizedTab !== tab) {
this.maximizedTab = null this.maximizedTab = null
@@ -309,7 +313,7 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
/** /**
* Focuses the first available tab inside the given [[SplitContainer]] * Focuses the first available tab inside the given [[SplitContainer]]
*/ */
focusAnyIn (parent: BaseTabComponent | SplitContainer): void { focusAnyIn (parent?: BaseTabComponent | SplitContainer): void {
if (!parent) { if (!parent) {
return return
} }
@@ -326,7 +330,7 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
async addTab (tab: BaseTabComponent, relative: BaseTabComponent|null, side: SplitDirection): Promise<void> { async addTab (tab: BaseTabComponent, relative: BaseTabComponent|null, side: SplitDirection): Promise<void> {
tab.parent = this tab.parent = this
let target = (relative ? this.getParentOf(relative) : null) || this.root let target = (relative ? this.getParentOf(relative) : null) ?? this.root
let insertIndex = relative ? target.children.indexOf(relative) : -1 let insertIndex = relative ? target.children.indexOf(relative) : -1
if ( if (
@@ -393,6 +397,10 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
* Moves focus in the given direction * Moves focus in the given direction
*/ */
navigate (dir: SplitDirection): void { navigate (dir: SplitDirection): void {
if (!this.focusedTab) {
return
}
let rel: BaseTabComponent | SplitContainer = this.focusedTab let rel: BaseTabComponent | SplitContainer = this.focusedTab
let parent = this.getParentOf(rel) let parent = this.getParentOf(rel)
if (!parent) { if (!parent) {
@@ -437,7 +445,7 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
* @returns the immediate parent of `tab` * @returns the immediate parent of `tab`
*/ */
getParentOf (tab: BaseTabComponent | SplitContainer, root?: SplitContainer): SplitContainer|null { getParentOf (tab: BaseTabComponent | SplitContainer, root?: SplitContainer): SplitContainer|null {
root = root || this.root root = root ?? this.root
for (const child of root.children) { for (const child of root.children) {
if (child instanceof SplitContainer) { if (child instanceof SplitContainer) {
const r = this.getParentOf(tab, child) const r = this.getParentOf(tab, child)
@@ -464,7 +472,7 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
/** @hidden */ /** @hidden */
async getCurrentProcess (): Promise<BaseTabProcess|null> { async getCurrentProcess (): Promise<BaseTabProcess|null> {
return (await Promise.all(this.getAllTabs().map(x => x.getCurrentProcess()))).find(x => !!x) || null return (await Promise.all(this.getAllTabs().map(x => x.getCurrentProcess()))).find(x => !!x) ?? null
} }
/** @hidden */ /** @hidden */
@@ -480,19 +488,28 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
} }
} }
layout (): void {
this.root.normalize()
this._spanners = []
this.layoutInternal(this.root, 0, 0, 100, 100)
}
private attachTabView (tab: BaseTabComponent) { private attachTabView (tab: BaseTabComponent) {
const ref = this.viewContainer.insert(tab.hostView) as EmbeddedViewRef<any> // eslint-disable-line @typescript-eslint/no-unnecessary-type-assertion const ref = this.viewContainer.insert(tab.hostView) as EmbeddedViewRef<any> // eslint-disable-line @typescript-eslint/no-unnecessary-type-assertion
this.viewRefs.set(tab, ref) this.viewRefs.set(tab, ref)
ref.rootNodes[0].addEventListener('click', () => this.focus(tab)) tab.addEventListenerUntilDestroyed(ref.rootNodes[0], 'click', () => this.focus(tab))
tab.titleChange$.subscribe(t => this.setTitle(t)) tab.subscribeUntilDestroyed(tab.titleChange$, t => this.setTitle(t))
tab.activity$.subscribe(a => a ? this.displayActivity() : this.clearActivity()) tab.subscribeUntilDestroyed(tab.activity$, a => a ? this.displayActivity() : this.clearActivity())
tab.progress$.subscribe(p => this.setProgress(p)) tab.subscribeUntilDestroyed(tab.progress$, p => this.setProgress(p))
if (tab.title) { if (tab.title) {
this.setTitle(tab.title) this.setTitle(tab.title)
} }
tab.destroyed$.subscribe(() => { tab.subscribeUntilDestroyed(tab.recoveryStateChangedHint$, () => {
this.recoveryStateChangedHint.next()
})
tab.subscribeUntilDestroyed(tab.destroyed$, () => {
this.removeTab(tab) this.removeTab(tab)
}) })
} }
@@ -505,15 +522,9 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
} }
} }
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) { private layoutInternal (root: SplitContainer, x: number, y: number, w: number, h: number) {
const size = root.orientation === 'v' ? h : w const size = root.orientation === 'v' ? h : w
const sizes = root.ratios.map(x => x * size) const sizes = root.ratios.map(ratio => ratio * size)
root.x = x root.x = x
root.y = y root.y = y
@@ -535,7 +546,7 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
element.classList.toggle('child', true) element.classList.toggle('child', true)
element.classList.toggle('maximized', child === this.maximizedTab) element.classList.toggle('maximized', child === this.maximizedTab)
element.classList.toggle('minimized', this.maximizedTab && child !== this.maximizedTab) element.classList.toggle('minimized', this.maximizedTab && child !== this.maximizedTab)
element.classList.toggle('focused', child === this.focusedTab) element.classList.toggle('focused', this._allFocusMode || child === this.focusedTab)
element.style.left = `${childX}%` element.style.left = `${childX}%`
element.style.top = `${childY}%` element.style.top = `${childY}%`
element.style.width = `${childW}%` element.style.width = `${childW}%`
@@ -560,7 +571,7 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
}) })
} }
private async recoverContainer (root: SplitContainer, state: any) { private async recoverContainer (root: SplitContainer, state: any, duplicate = false) {
const children: (SplitContainer | BaseTabComponent)[] = [] const children: (SplitContainer | BaseTabComponent)[] = []
root.orientation = state.orientation root.orientation = state.orientation
root.ratios = state.ratios root.ratios = state.ratios
@@ -568,10 +579,10 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
for (const childState of state.children) { for (const childState of state.children) {
if (childState.type === 'app:split-tab') { if (childState.type === 'app:split-tab') {
const child = new SplitContainer() const child = new SplitContainer()
await this.recoverContainer(child, childState) await this.recoverContainer(child, childState, duplicate)
children.push(child) children.push(child)
} else { } else {
const recovered = await this.tabRecovery.recoverTab(childState) const recovered = await this.tabRecovery.recoverTab(childState, duplicate)
if (recovered) { if (recovered) {
const tab = this.tabsService.create(recovered.type, recovered.options) const tab = this.tabsService.create(recovered.type, recovered.options)
children.push(tab) children.push(tab)
@@ -592,13 +603,21 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
/** @hidden */ /** @hidden */
@Injectable() @Injectable()
export class SplitTabRecoveryProvider extends TabRecoveryProvider { export class SplitTabRecoveryProvider extends TabRecoveryProvider {
async recover (recoveryToken: RecoveryToken): Promise<RecoveredTab|null> { async applicableTo (recoveryToken: RecoveryToken): Promise<boolean> {
if (recoveryToken && recoveryToken.type === 'app:split-tab') { return recoveryToken.type === 'app:split-tab'
return { }
type: SplitTabComponent,
options: { _recoveredState: recoveryToken }, async recover (recoveryToken: RecoveryToken): Promise<RecoveredTab> {
} return {
type: SplitTabComponent,
options: { _recoveredState: recoveryToken },
}
}
duplicate (recoveryToken: RecoveryToken): RecoveryToken {
return {
...recoveryToken,
duplicate: true,
} }
return null
} }
} }

View File

@@ -34,8 +34,8 @@ export class SplitTabSpannerComponent {
let current = start let current = start
const oldPosition: number = this.isVertical ? this.element.nativeElement.offsetTop : this.element.nativeElement.offsetLeft const oldPosition: number = this.isVertical ? this.element.nativeElement.offsetTop : this.element.nativeElement.offsetLeft
const dragHandler = (e: MouseEvent) => { const dragHandler = (dragEvent: MouseEvent) => {
current = this.isVertical ? e.pageY : e.pageX current = this.isVertical ? dragEvent.pageY : dragEvent.pageX
const newPosition = oldPosition + (current - start) const newPosition = oldPosition + (current - start)
if (this.isVertical) { if (this.isVertical) {
this.element.nativeElement.style.top = `${newPosition - this.marginOffset}px` this.element.nativeElement.style.top = `${newPosition - this.marginOffset}px`

View File

@@ -26,10 +26,10 @@ export class StartPageComponent {
.map(provider => provider.provide()) .map(provider => provider.provide())
.reduce((a, b) => a.concat(b)) .reduce((a, b) => a.concat(b))
.filter(x => !!x.click) .filter(x => !!x.click)
.sort((a: ToolbarButton, b: ToolbarButton) => (a.weight || 0) - (b.weight || 0)) .sort((a: ToolbarButton, b: ToolbarButton) => (a.weight ?? 0) - (b.weight ?? 0))
} }
sanitizeIcon (icon: string): any { sanitizeIcon (icon?: string): any {
return this.domSanitizer.bypassSecurityTrustHtml(icon || '') return this.domSanitizer.bypassSecurityTrustHtml(icon ?? '')
} }
} }

View File

@@ -1,15 +1,11 @@
:host { :host {
display: none; display: flex;
flex: auto; flex: auto;
position: relative; position: relative;
overflow: hidden; overflow: hidden;
&.active { >* {
display: flex; flex: auto;
>* {
flex: auto;
}
} }
> perfect-scrollbar { > perfect-scrollbar {

View File

@@ -1,7 +1,10 @@
.colorbar([style.background-color]='tab.color', *ngIf='tab.color != null')
.progressbar([style.width]='progress + "%"', *ngIf='progress != null') .progressbar([style.width]='progress + "%"', *ngIf='progress != null')
.index( .activity-indicator(*ngIf='tab.activity$|async')
#handle,
[style.background-color]='tab.color', .index(*ngIf='!config.store.terminal.hideTabIndex', #handle) {{index + 1}}
) {{index + 1}} .name(
.name([title]='tab.customTitle || tab.title') {{tab.customTitle || tab.title}} [title]='tab.customTitle || tab.title',
button((click)='app.closeTab(tab, true)') &times; [class.no-hover]='config.store.terminal.hideCloseButton'
) {{tab.customTitle || tab.title}}
button(*ngIf='!config.store.terminal.hideCloseButton',(click)='app.closeTab(tab, true)') &times;

View File

@@ -4,8 +4,16 @@ $tabs-height: 38px;
position: relative; position: relative;
cursor: pointer; cursor: pointer;
> * { cursor: pointer; }
flex: 1000 1 200px; flex: 1000 1 200px;
width: 200px; width: 200px;
padding: 0 10px;
&.flex-width {
flex: 1000 1 auto;
width: auto;
}
display: flex; display: flex;
flex-direction: row; flex-direction: row;
@@ -13,13 +21,17 @@ $tabs-height: 38px;
overflow: hidden; overflow: hidden;
&.vertical {
flex: none;
height: $tabs-height;
}
.index { .index {
flex: none; flex: none;
font-weight: bold; font-weight: bold;
-webkit-app-region: no-drag; -webkit-app-region: no-drag;
cursor: -webkit-grab; cursor: -webkit-grab;
margin-left: 10px;
width: 22px; width: 22px;
border-radius: 10px; border-radius: 10px;
text-align: center; text-align: center;
@@ -29,7 +41,7 @@ $tabs-height: 38px;
.name { .name {
flex: auto; flex: auto;
margin: 0 1px 0 10px; margin-top: 1px;
overflow: hidden; overflow: hidden;
white-space: nowrap; white-space: nowrap;
text-overflow: ellipsis; text-overflow: ellipsis;
@@ -37,6 +49,10 @@ $tabs-height: 38px;
align-self: center; align-self: center;
} }
.index + .name {
margin-left: 10px;
}
button { button {
display: block; display: block;
flex: none; flex: none;
@@ -44,13 +60,15 @@ $tabs-height: 38px;
opacity: 0; opacity: 0;
-webkit-app-region: no-drag; -webkit-app-region: no-drag;
position: absolute;
right: 0;
$button-size: 26px; $button-size: 26px;
width: $button-size; width: $button-size;
height: $button-size; height: $button-size;
border-radius: $button-size / 2; border-radius: $button-size / 6;
line-height: $button-size; line-height: $button-size;
align-self: center; align-self: center;
margin-right: 10px;
text-align: center; text-align: center;
font-size: 20px; font-size: 20px;
@@ -60,6 +78,13 @@ $tabs-height: 38px;
} }
} }
&:hover .name:not(.no-hover) {
-webkit-mask-image: linear-gradient(black 0 0), linear-gradient(to left, transparent 0%, black 100%);
-webkit-mask-size: calc(100% - 60px) auto, 60px auto;
-webkit-mask-repeat: no-repeat;
-webkit-mask-position: left, right;
}
&:hover button { &:hover button {
transition: 0.25s opacity; transition: 0.25s opacity;
display: block; display: block;
@@ -78,8 +103,30 @@ $tabs-height: 38px;
position: absolute; position: absolute;
left: 0; left: 0;
top: 0; top: 0;
height: 5px; height: 3px;
z-index: -1; z-index: 1;
transition: 0.25s width; transition: 0.25s width;
} }
.colorbar {
position: absolute;
left: 0;
bottom: 0;
height: 3px;
width: 100%;
z-index: 1;
}
&.active .activity-indicator {
display: none;
}
.activity-indicator {
position: absolute;
left: 10px;
right: 10px;
bottom: 4px;
height: 2px;
z-index: -1;
}
} }

View File

@@ -1,5 +1,6 @@
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ /* eslint-disable @typescript-eslint/explicit-module-boundary-types */
import { Component, Input, Optional, Inject, HostBinding, HostListener, ViewChild, ElementRef } from '@angular/core' import type { MenuItemConstructorOptions } from 'electron'
import { Component, Input, Optional, Inject, HostBinding, HostListener, ViewChild, ElementRef, NgZone } from '@angular/core'
import { SortableComponent } from 'ng2-dnd' import { SortableComponent } from 'ng2-dnd'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap' import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { TabContextMenuItemProvider } from '../api/tabContextMenuProvider' import { TabContextMenuItemProvider } from '../api/tabContextMenuProvider'
@@ -9,10 +10,12 @@ import { HotkeysService } from '../services/hotkeys.service'
import { ElectronService } from '../services/electron.service' import { ElectronService } from '../services/electron.service'
import { AppService } from '../services/app.service' import { AppService } from '../services/app.service'
import { HostAppService, Platform } from '../services/hostApp.service' import { HostAppService, Platform } from '../services/hostApp.service'
import { ConfigService } from '../services/config.service'
import { BaseComponent } from './base.component'
/** @hidden */ /** @hidden */
export interface SortableComponentProxy { export interface SortableComponentProxy {
setDragHandle (_: HTMLElement) setDragHandle: (_: HTMLElement) => void
} }
/** @hidden */ /** @hidden */
@@ -21,24 +24,26 @@ export interface SortableComponentProxy {
template: require('./tabHeader.component.pug'), template: require('./tabHeader.component.pug'),
styles: [require('./tabHeader.component.scss')], styles: [require('./tabHeader.component.scss')],
}) })
export class TabHeaderComponent { export class TabHeaderComponent extends BaseComponent {
@Input() index: number @Input() index: number
@Input() @HostBinding('class.active') active: boolean @Input() @HostBinding('class.active') active: boolean
@Input() @HostBinding('class.has-activity') hasActivity: boolean
@Input() tab: BaseTabComponent @Input() tab: BaseTabComponent
@Input() progress: number|null @Input() progress: number|null
@ViewChild('handle') handle: ElementRef @ViewChild('handle') handle?: ElementRef
private constructor ( private constructor (
public app: AppService, public app: AppService,
public config: ConfigService,
private electron: ElectronService, private electron: ElectronService,
private hostApp: HostAppService, private hostApp: HostAppService,
private ngbModal: NgbModal, private ngbModal: NgbModal,
private hotkeys: HotkeysService, private hotkeys: HotkeysService,
private zone: NgZone,
@Inject(SortableComponent) private parentDraggable: SortableComponentProxy, @Inject(SortableComponent) private parentDraggable: SortableComponentProxy,
@Optional() @Inject(TabContextMenuItemProvider) protected contextMenuProviders: TabContextMenuItemProvider[], @Optional() @Inject(TabContextMenuItemProvider) protected contextMenuProviders: TabContextMenuItemProvider[],
) { ) {
this.hotkeys.matchedHotkey.subscribe((hotkey) => { super()
this.subscribeUntilDestroyed(this.hotkeys.matchedHotkey, (hotkey) => {
if (this.app.activeTab === this.tab) { if (this.app.activeTab === this.tab) {
if (hotkey === 'rename-tab') { if (hotkey === 'rename-tab') {
this.showRenameTabModal() this.showRenameTabModal()
@@ -49,13 +54,15 @@ export class TabHeaderComponent {
} }
ngOnInit () { ngOnInit () {
this.tab.progress$.subscribe(progress => { this.subscribeUntilDestroyed(this.tab.progress$, progress => {
this.progress = progress this.zone.run(() => {
this.progress = progress
})
}) })
} }
ngAfterViewInit () { ngAfterViewInit () {
if (this.hostApp.platform === Platform.macOS) { if (this.handle && this.hostApp.platform === Platform.macOS) {
this.parentDraggable.setDragHandle(this.handle.nativeElement) this.parentDraggable.setDragHandle(this.handle.nativeElement)
} }
} }
@@ -69,8 +76,8 @@ export class TabHeaderComponent {
}).catch(() => null) }).catch(() => null)
} }
async buildContextMenu (): Promise<Electron.MenuItemConstructorOptions[]> { async buildContextMenu (): Promise<MenuItemConstructorOptions[]> {
let items: Electron.MenuItemConstructorOptions[] = [] let items: MenuItemConstructorOptions[] = []
for (const section of await Promise.all(this.contextMenuProviders.map(x => x.getItems(this.tab, this)))) { for (const section of await Promise.all(this.contextMenuProviders.map(x => x.getItems(this.tab, this)))) {
items.push({ type: 'separator' }) items.push({ type: 'separator' })
items = items.concat(section) items = items.concat(section)
@@ -78,6 +85,10 @@ export class TabHeaderComponent {
return items.slice(1) return items.slice(1)
} }
@HostBinding('class.flex-width') get isFlexWidthEnabled (): boolean {
return this.config.store.appearance.flexTabs
}
@HostListener('dblclick') onDoubleClick (): void { @HostListener('dblclick') onDoubleClick (): void {
this.showRenameTabModal() this.showRenameTabModal()
} }
@@ -98,7 +109,7 @@ export class TabHeaderComponent {
if ($event.which === 3) { if ($event.which === 3) {
$event.preventDefault() $event.preventDefault()
const contextMenu = this.electron.remote.Menu.buildFromTemplate(await this.buildContextMenu()) const contextMenu = this.electron.Menu.buildFromTemplate(await this.buildContextMenu())
contextMenu.popup({ contextMenu.popup({
x: $event.pageX, x: $event.pageX,

View File

@@ -3,7 +3,6 @@
$toggle-size: 18px; $toggle-size: 18px;
$height: 30px; $height: 30px;
$padding: 2px; $padding: 2px;
cursor: pointer;
display: inline-flex; display: inline-flex;
overflow: visible; overflow: visible;
border-radius: 3px; border-radius: 3px;
@@ -16,8 +15,11 @@
padding-left: 10px; padding-left: 10px;
margin-left: -10px; margin-left: -10px;
&[disabled] { &.disabled {
opacity: 0.5; opacity: 0.5;
} }
* {
cursor: pointer;
}
} }

View File

@@ -9,18 +9,25 @@
.form-line .form-line
.header .header
.title Enable analytics .title Enable analytics
.description Help us track the number of Terminus installs across the world! .description Help track the number of Terminus installs across the world!
toggle([(ngModel)]='config.store.enableAnalytics') toggle([(ngModel)]='config.store.enableAnalytics')
.form-line .form-line
.header .header
.title Enable SSH plugin .title Enable global hotkey (#[strong Ctrl-Space])
.description Toggles the Terminus window visibility
toggle([(ngModel)]='enableGlobalHotkey')
.form-line
.header
.title Enable #[strong SSH] plugin
.description Adds an SSH connection manager UI to Terminus .description Adds an SSH connection manager UI to Terminus
toggle([(ngModel)]='enableSSH') toggle([(ngModel)]='enableSSH')
.form-line .form-line
.header .header
.title Enable Serial plugin .title Enable #[strong Serial] plugin
.description Allows attaching Terminus to serial ports .description Allows attaching Terminus to serial ports
toggle([(ngModel)]='enableSerial') toggle([(ngModel)]='enableSerial')

View File

@@ -13,6 +13,7 @@ import { HostAppService } from '../services/hostApp.service'
export class WelcomeTabComponent extends BaseTabComponent { export class WelcomeTabComponent extends BaseTabComponent {
enableSSH = false enableSSH = false
enableSerial = false enableSerial = false
enableGlobalHotkey = true
constructor ( constructor (
private hostApp: HostAppService, private hostApp: HostAppService,
@@ -33,6 +34,9 @@ export class WelcomeTabComponent extends BaseTabComponent {
if (!this.enableSerial) { if (!this.enableSerial) {
this.config.store.pluginBlacklist.push('serial') this.config.store.pluginBlacklist.push('serial')
} }
if (!this.enableGlobalHotkey) {
this.config.store.hotkeys['toggle-window'] = []
}
this.config.save() this.config.save()
this.hostApp.getWindow().reload() this.hostApp.getWindow().reload()
} }

View File

@@ -12,7 +12,8 @@ button {
padding: 0; padding: 0;
line-height: 0; line-height: 0;
text-align: center; text-align: center;
align-items: center;
&:not(:hover):not(:active) { &:not(:hover):not(:active) {
background: transparent; background: transparent;
} }

View File

@@ -42,6 +42,16 @@ hotkeys:
- 'Alt-9' - 'Alt-9'
tab-10: tab-10:
- 'Alt-0' - 'Alt-0'
tab-11: []
tab-12: []
tab-13: []
tab-14: []
tab-15: []
tab-16: []
tab-17: []
tab-18: []
tab-19: []
tab-20: []
split-right: split-right:
- 'Ctrl-Shift-E' - 'Ctrl-Shift-E'
split-bottom: split-bottom:

View File

@@ -40,6 +40,16 @@ hotkeys:
- '⌘-9' - '⌘-9'
tab-10: tab-10:
- '⌘-0' - '⌘-0'
tab-11: []
tab-12: []
tab-13: []
tab-14: []
tab-15: []
tab-16: []
tab-17: []
tab-18: []
tab-19: []
tab-20: []
split-right: split-right:
- '⌘-Shift-D' - '⌘-Shift-D'
split-bottom: split-bottom:

View File

@@ -43,6 +43,16 @@ hotkeys:
- 'Alt-9' - 'Alt-9'
tab-10: tab-10:
- 'Alt-0' - 'Alt-0'
tab-11: []
tab-12: []
tab-13: []
tab-14: []
tab-15: []
tab-16: []
tab-17: []
tab-18: []
tab-19: []
tab-20: []
split-right: split-right:
- 'Ctrl-Shift-E' - 'Ctrl-Shift-E'
split-bottom: split-bottom:

View File

@@ -2,8 +2,10 @@ appearance:
dock: off dock: off
dockScreen: current dockScreen: current
dockFill: 0.5 dockFill: 0.5
dockSpace: 1
dockHideOnBlur: false dockHideOnBlur: false
dockAlwaysOnTop: true dockAlwaysOnTop: true
flexTabs: false
tabsLocation: top tabsLocation: top
cycleTabs: true cycleTabs: true
theme: Standard theme: Standard

View File

@@ -89,6 +89,46 @@ export class AppHotkeyProvider extends HotkeyProvider {
id: 'tab-10', id: 'tab-10',
name: 'Tab 10', name: 'Tab 10',
}, },
{
id: 'tab-11',
name: 'Tab 11',
},
{
id: 'tab-12',
name: 'Tab 12',
},
{
id: 'tab-13',
name: 'Tab 13',
},
{
id: 'tab-14',
name: 'Tab 14',
},
{
id: 'tab-15',
name: 'Tab 15',
},
{
id: 'tab-16',
name: 'Tab 16',
},
{
id: 'tab-17',
name: 'Tab 17',
},
{
id: 'tab-18',
name: 'Tab 18',
},
{
id: 'tab-19',
name: 'Tab 19',
},
{
id: 'tab-20',
name: 'Tab 20',
},
{ {
id: 'split-right', id: 'split-right',
name: 'Split to the right', name: 'Split to the right',

View File

@@ -44,8 +44,11 @@ import 'ng2-dnd/bundles/style.css'
// PerfectScrollbar fix // PerfectScrollbar fix
import { fromEvent } from 'rxjs/internal/observable/fromEvent' import { fromEvent } from 'rxjs/internal/observable/fromEvent'
import { merge } from 'rxjs/internal/observable/merge' import { merge } from 'rxjs/internal/observable/merge'
require('rxjs').fromEvent = fromEvent
require('rxjs').merge = merge try {
require('rxjs').fromEvent = fromEvent
require('rxjs').merge = merge
} catch {}
const PROVIDERS = [ const PROVIDERS = [
{ provide: HotkeyProvider, useClass: AppHotkeyProvider, multi: true }, { provide: HotkeyProvider, useClass: AppHotkeyProvider, multi: true },
@@ -110,7 +113,7 @@ export default class AppModule { // eslint-disable-line @typescript-eslint/no-ex
}) })
} }
static forRoot (): ModuleWithProviders { static forRoot (): ModuleWithProviders<AppModule> {
return { return {
ngModule: AppModule, ngModule: AppModule,
providers: PROVIDERS, providers: PROVIDERS,

View File

@@ -46,13 +46,13 @@ class CompletionObserver {
export class AppService { export class AppService {
tabs: BaseTabComponent[] = [] tabs: BaseTabComponent[] = []
get activeTab (): BaseTabComponent { return this._activeTab } get activeTab (): BaseTabComponent|null { return this._activeTab ?? null }
private lastTabIndex = 0 private lastTabIndex = 0
private _activeTab: BaseTabComponent private _activeTab: BaseTabComponent | null = null
private closedTabsStack: RecoveryToken[] = [] private closedTabsStack: RecoveryToken[] = []
private activeTabChange = new Subject<BaseTabComponent>() private activeTabChange = new Subject<BaseTabComponent|null>()
private tabsChanged = new Subject<void>() private tabsChanged = new Subject<void>()
private tabOpened = new Subject<BaseTabComponent>() private tabOpened = new Subject<BaseTabComponent>()
private tabClosed = new Subject<BaseTabComponent>() private tabClosed = new Subject<BaseTabComponent>()
@@ -60,7 +60,7 @@ export class AppService {
private completionObservers = new Map<BaseTabComponent, CompletionObserver>() private completionObservers = new Map<BaseTabComponent, CompletionObserver>()
get activeTabChange$ (): Observable<BaseTabComponent> { return this.activeTabChange } get activeTabChange$ (): Observable<BaseTabComponent|null> { return this.activeTabChange }
get tabOpened$ (): Observable<BaseTabComponent> { return this.tabOpened } get tabOpened$ (): Observable<BaseTabComponent> { return this.tabOpened }
get tabsChanged$ (): Observable<void> { return this.tabsChanged } get tabsChanged$ (): Observable<void> { return this.tabsChanged }
get tabClosed$ (): Observable<BaseTabComponent> { return this.tabClosed } get tabClosed$ (): Observable<BaseTabComponent> { return this.tabClosed }
@@ -97,12 +97,10 @@ export class AppService {
} }
} }
hostApp.windowFocused$.subscribe(() => { hostApp.windowFocused$.subscribe(() => this._activeTab?.emitFocused())
this._activeTab?.emitFocused()
})
this.tabClosed$.subscribe(async tab => { this.tabClosed$.subscribe(async tab => {
const token = await tab.getRecoveryToken() const token = await tabRecovery.getFullRecoveryToken(tab)
if (token) { if (token) {
this.closedTabsStack.push(token) this.closedTabsStack.push(token)
} }
@@ -187,12 +185,12 @@ export class AppService {
return null return null
} }
selectTab (tab: BaseTabComponent): void { selectTab (tab: BaseTabComponent|null): void {
if (this._activeTab === tab) { if (tab && this._activeTab === tab) {
this._activeTab.emitFocused() this._activeTab.emitFocused()
return return
} }
if (this.tabs.includes(this._activeTab)) { if (this._activeTab && this.tabs.includes(this._activeTab)) {
this.lastTabIndex = this.tabs.indexOf(this._activeTab) this.lastTabIndex = this.tabs.indexOf(this._activeTab)
} else { } else {
this.lastTabIndex = 0 this.lastTabIndex = 0
@@ -203,12 +201,10 @@ export class AppService {
} }
this._activeTab = tab this._activeTab = tab
this.activeTabChange.next(tab) this.activeTabChange.next(tab)
if (this._activeTab) { setImmediate(() => {
setImmediate(() => { this._activeTab?.emitFocused()
this._activeTab.emitFocused() })
}) this.hostApp.setTitle(this._activeTab?.title)
this.hostApp.setTitle(this._activeTab.title)
}
} }
getParentTab (tab: BaseTabComponent): SplitTabComponent|null { getParentTab (tab: BaseTabComponent): SplitTabComponent|null {
@@ -231,6 +227,9 @@ export class AppService {
} }
nextTab (): void { nextTab (): void {
if (!this._activeTab) {
return
}
if (this.tabs.length > 1) { if (this.tabs.length > 1) {
const tabIndex = this.tabs.indexOf(this._activeTab) const tabIndex = this.tabs.indexOf(this._activeTab)
if (tabIndex < this.tabs.length - 1) { if (tabIndex < this.tabs.length - 1) {
@@ -242,6 +241,9 @@ export class AppService {
} }
previousTab (): void { previousTab (): void {
if (!this._activeTab) {
return
}
if (this.tabs.length > 1) { if (this.tabs.length > 1) {
const tabIndex = this.tabs.indexOf(this._activeTab) const tabIndex = this.tabs.indexOf(this._activeTab)
if (tabIndex > 0) { if (tabIndex > 0) {
@@ -253,23 +255,29 @@ export class AppService {
} }
moveSelectedTabLeft (): void { moveSelectedTabLeft (): void {
if (!this._activeTab) {
return
}
if (this.tabs.length > 1) { if (this.tabs.length > 1) {
const tabIndex = this.tabs.indexOf(this._activeTab) const tabIndex = this.tabs.indexOf(this._activeTab)
if (tabIndex > 0) { if (tabIndex > 0) {
this.swapTabs(this._activeTab, this.tabs[tabIndex - 1]) this.swapTabs(this._activeTab, this.tabs[tabIndex - 1])
} else if (this.config.store.appearance.cycleTabs) { } else if (this.config.store.appearance.cycleTabs) {
this.swapTabs(this._activeTab, this.tabs[this.tabs.length - 1]) this.tabs.push(this.tabs.shift()!)
} }
} }
} }
moveSelectedTabRight (): void { moveSelectedTabRight (): void {
if (!this._activeTab) {
return
}
if (this.tabs.length > 1) { if (this.tabs.length > 1) {
const tabIndex = this.tabs.indexOf(this._activeTab) const tabIndex = this.tabs.indexOf(this._activeTab)
if (tabIndex < this.tabs.length - 1) { if (tabIndex < this.tabs.length - 1) {
this.swapTabs(this._activeTab, this.tabs[tabIndex + 1]) this.swapTabs(this._activeTab, this.tabs[tabIndex + 1])
} else if (this.config.store.appearance.cycleTabs) { } else if (this.config.store.appearance.cycleTabs) {
this.swapTabs(this._activeTab, this.tabs[0]) this.tabs.unshift(this.tabs.pop()!)
} }
} }
} }

View File

@@ -97,7 +97,7 @@ export class ConfigService {
private changed = new Subject<void>() private changed = new Subject<void>()
private _store: any private _store: any
private defaults: any private defaults: any
private servicesCache: { [id: string]: Function[] }|null = null private servicesCache: Record<string, Function[]>|null = null // eslint-disable-line @typescript-eslint/ban-types
get changed$ (): Observable<void> { return this.changed } get changed$ (): Observable<void> { return this.changed }
@@ -109,10 +109,7 @@ export class ConfigService {
) { ) {
this.path = path.join(electron.app.getPath('userData'), 'config.yaml') this.path = path.join(electron.app.getPath('userData'), 'config.yaml')
this.defaults = configProviders.map(provider => { this.defaults = configProviders.map(provider => {
let defaults = {} let defaults = provider.platformDefaults[hostApp.platform] || {}
if (provider.platformDefaults) {
defaults = configMerge(defaults, provider.platformDefaults[hostApp.platform] || {})
}
if (provider.defaults) { if (provider.defaults) {
defaults = configMerge(defaults, provider.defaults) defaults = configMerge(defaults, provider.defaults)
} }
@@ -147,7 +144,7 @@ export class ConfigService {
load (): void { load (): void {
if (fs.existsSync(this.path)) { if (fs.existsSync(this.path)) {
this._store = yaml.safeLoad(fs.readFileSync(this.path, 'utf8')) this._store = yaml.load(fs.readFileSync(this.path, 'utf8'))
} else { } else {
this._store = {} this._store = {}
} }
@@ -157,23 +154,23 @@ export class ConfigService {
save (): void { save (): void {
// Scrub undefined values // Scrub undefined values
this._store = JSON.parse(JSON.stringify(this._store)) this._store = JSON.parse(JSON.stringify(this._store))
fs.writeFileSync(this.path, yaml.safeDump(this._store), 'utf8') fs.writeFileSync(this.path, yaml.dump(this._store), 'utf8')
this.emitChange() this.emitChange()
this.hostApp.broadcastConfigChange(this.store) this.hostApp.broadcastConfigChange(JSON.parse(JSON.stringify(this.store)))
} }
/** /**
* Reads config YAML as string * Reads config YAML as string
*/ */
readRaw (): string { readRaw (): string {
return yaml.safeDump(this._store) return yaml.dump(this._store)
} }
/** /**
* Writes config YAML as string * Writes config YAML as string
*/ */
writeRaw (data: string): void { writeRaw (data: string): void {
this._store = yaml.safeLoad(data) this._store = yaml.load(data)
this.save() this.save()
this.load() this.load()
this.emitChange() this.emitChange()
@@ -189,15 +186,15 @@ export class ConfigService {
* *
* @typeparam T Base provider type * @typeparam T Base provider type
*/ */
enabledServices<T extends object> (services: T[]): T[] { enabledServices<T extends object> (services: T[]): T[] { // eslint-disable-line @typescript-eslint/ban-types
if (!this.servicesCache) { if (!this.servicesCache) {
this.servicesCache = {} this.servicesCache = {}
const ngModule = window['rootModule'].ɵinj const ngModule = window['rootModule'].ɵinj
for (const imp of ngModule.imports) { for (const imp of ngModule.imports) {
const module = imp['ngModule'] || imp const module = imp.ngModule || imp
if (module.ɵinj?.providers) { if (module.ɵinj?.providers) {
this.servicesCache[module['pluginName']] = module.ɵinj.providers.map(provider => { this.servicesCache[module.pluginName] = module.ɵinj.providers.map(provider => {
return provider['useClass'] || provider return provider.useClass || provider
}) })
} }
} }

View File

@@ -1,3 +1,4 @@
import type { Display } from 'electron'
import { Injectable } from '@angular/core' import { Injectable } from '@angular/core'
import { ConfigService } from '../services/config.service' import { ConfigService } from '../services/config.service'
import { ElectronService } from '../services/electron.service' import { ElectronService } from '../services/electron.service'
@@ -11,8 +12,8 @@ export class DockingService {
private config: ConfigService, private config: ConfigService,
private hostApp: HostAppService, private hostApp: HostAppService,
) { ) {
electron.screen.on('display-removed', () => this.repositionWindow()) hostApp.displaysChanged$.subscribe(() => this.repositionWindow())
electron.screen.on('display-metrics-changed', () => this.repositionWindow()) hostApp.displayMetricsChanged$.subscribe(() => this.repositionWindow())
} }
dock (): void { dock (): void {
@@ -25,6 +26,7 @@ export class DockingService {
let display = this.electron.screen.getAllDisplays() let display = this.electron.screen.getAllDisplays()
.filter(x => x.id === this.config.store.appearance.dockScreen)[0] .filter(x => x.id === this.config.store.appearance.dockScreen)[0]
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
if (!display) { if (!display) {
display = this.getCurrentScreen() display = this.getCurrentScreen()
} }
@@ -32,25 +34,30 @@ export class DockingService {
const newBounds: Bounds = { x: 0, y: 0, width: 0, height: 0 } const newBounds: Bounds = { x: 0, y: 0, width: 0, height: 0 }
const fill = this.config.store.appearance.dockFill <= 1 ? this.config.store.appearance.dockFill : 1 const fill = this.config.store.appearance.dockFill <= 1 ? this.config.store.appearance.dockFill : 1
const space = this.config.store.appearance.dockSpace <= 1 ? this.config.store.appearance.dockSpace : 1
const [minWidth, minHeight] = this.hostApp.getWindow().getMinimumSize() const [minWidth, minHeight] = this.hostApp.getWindow().getMinimumSize()
if (dockSide === 'left' || dockSide === 'right') { if (dockSide === 'left' || dockSide === 'right') {
newBounds.width = Math.max(minWidth, Math.round(fill * display.bounds.width)) newBounds.width = Math.max(minWidth, Math.round(fill * display.bounds.width))
newBounds.height = display.bounds.height newBounds.height = Math.round(display.bounds.height * space)
} }
if (dockSide === 'top' || dockSide === 'bottom') { if (dockSide === 'top' || dockSide === 'bottom') {
newBounds.width = display.bounds.width newBounds.width = Math.round(display.bounds.width * space)
newBounds.height = Math.max(minHeight, Math.round(fill * display.bounds.height)) newBounds.height = Math.max(minHeight, Math.round(fill * display.bounds.height))
} }
if (dockSide === 'right') { if (dockSide === 'right') {
newBounds.x = display.bounds.x + display.bounds.width - newBounds.width newBounds.x = display.bounds.x + display.bounds.width - newBounds.width
} else { } else if (dockSide === 'left') {
newBounds.x = display.bounds.x newBounds.x = display.bounds.x
} else {
newBounds.x = display.bounds.x + Math.round(display.bounds.width / 2 * (1 - space))
} }
if (dockSide === 'bottom') { if (dockSide === 'bottom') {
newBounds.y = display.bounds.y + display.bounds.height - newBounds.height newBounds.y = display.bounds.y + display.bounds.height - newBounds.height
} else { } else if (dockSide === 'top') {
newBounds.y = display.bounds.y newBounds.y = display.bounds.y
} else {
newBounds.y = display.bounds.y + Math.round(display.bounds.height / 2 * (1 - space))
} }
const alwaysOnTop = this.config.store.appearance.dockAlwaysOnTop const alwaysOnTop = this.config.store.appearance.dockAlwaysOnTop
@@ -61,11 +68,11 @@ export class DockingService {
}) })
} }
getCurrentScreen (): Electron.Display { getCurrentScreen (): Display {
return this.electron.screen.getDisplayNearestPoint(this.electron.screen.getCursorScreenPoint()) return this.electron.screen.getDisplayNearestPoint(this.electron.screen.getCursorScreenPoint())
} }
getScreens (): Electron.Display[] { getScreens (): Display[] {
const primaryDisplayID = this.electron.screen.getPrimaryDisplay().id const primaryDisplayID = this.electron.screen.getPrimaryDisplay().id
return this.electron.screen.getAllDisplays().sort((a, b) => return this.electron.screen.getAllDisplays().sort((a, b) =>
a.bounds.x === b.bounds.x ? a.bounds.y - b.bounds.y : a.bounds.x - b.bounds.x a.bounds.x === b.bounds.x ? a.bounds.y - b.bounds.y : a.bounds.x - b.bounds.x
@@ -73,7 +80,7 @@ export class DockingService {
return { return {
...display, ...display,
id: display.id, id: display.id,
name: display.id === primaryDisplayID ? 'Primary Display' : `Display ${index +1}`, name: display.id === primaryDisplayID ? 'Primary Display' : `Display ${index + 1}`,
} }
}) })
} }

View File

@@ -1,5 +1,6 @@
import { Injectable } from '@angular/core' import { Injectable } from '@angular/core'
import { TouchBar, BrowserWindow, Menu, MenuItem, NativeImage } from 'electron' import { App, IpcRenderer, Shell, Dialog, Clipboard, GlobalShortcut, Screen, Remote, AutoUpdater, TouchBar, BrowserWindow, Menu, MenuItem, NativeImage, MessageBoxOptions } from 'electron'
import * as remote from '@electron/remote'
export interface MessageBoxResponse { export interface MessageBoxResponse {
response: number response: number
@@ -8,44 +9,45 @@ export interface MessageBoxResponse {
@Injectable({ providedIn: 'root' }) @Injectable({ providedIn: 'root' })
export class ElectronService { export class ElectronService {
app: Electron.App app: App
ipcRenderer: Electron.IpcRenderer ipcRenderer: IpcRenderer
shell: Electron.Shell shell: Shell
dialog: Electron.Dialog dialog: Dialog
clipboard: Electron.Clipboard clipboard: Clipboard
globalShortcut: Electron.GlobalShortcut globalShortcut: GlobalShortcut
nativeImage: typeof NativeImage nativeImage: typeof NativeImage
screen: Electron.Screen screen: Screen
remote: Electron.Remote remote: Remote
autoUpdater: Electron.AutoUpdater process: any
autoUpdater: AutoUpdater
TouchBar: typeof TouchBar TouchBar: typeof TouchBar
BrowserWindow: typeof BrowserWindow BrowserWindow: typeof BrowserWindow
Menu: typeof Menu Menu: typeof Menu
MenuItem: typeof MenuItem MenuItem: typeof MenuItem
private electron: any
/** @hidden */ /** @hidden */
private constructor () { private constructor () {
this.electron = require('electron') const electron = require('electron')
this.remote = this.electron.remote this.shell = electron.shell
this.app = this.remote.app this.clipboard = electron.clipboard
this.screen = this.remote.screen this.ipcRenderer = electron.ipcRenderer
this.dialog = this.remote.dialog
this.shell = this.electron.shell this.process = remote.getGlobal('process')
this.clipboard = this.electron.clipboard this.app = remote.app
this.ipcRenderer = this.electron.ipcRenderer this.screen = remote.screen
this.globalShortcut = this.remote.globalShortcut this.dialog = remote.dialog
this.nativeImage = this.remote.nativeImage this.globalShortcut = remote.globalShortcut
this.autoUpdater = this.remote.autoUpdater this.nativeImage = remote.nativeImage
this.TouchBar = this.remote.TouchBar this.autoUpdater = remote.autoUpdater
this.BrowserWindow = this.remote.BrowserWindow this.TouchBar = remote.TouchBar
this.Menu = this.remote.Menu this.BrowserWindow = remote.BrowserWindow
this.MenuItem = this.remote.MenuItem this.Menu = remote.Menu
this.MenuItem = remote.MenuItem
} }
async showMessageBox ( async showMessageBox (
browserWindow: Electron.BrowserWindow, browserWindow: BrowserWindow,
options: Electron.MessageBoxOptions options: MessageBoxOptions
): Promise<MessageBoxResponse> { ): Promise<MessageBoxResponse> {
return this.dialog.showMessageBox(browserWindow, options) return this.dialog.showMessageBox(browserWindow, options)
} }

View File

@@ -3,7 +3,7 @@ import { Injectable } from '@angular/core'
import { ElectronService } from './electron.service' import { ElectronService } from './electron.service'
import { ConfigService } from './config.service' import { ConfigService } from './config.service'
import * as mixpanel from 'mixpanel' import * as mixpanel from 'mixpanel'
import { v4 as uuidv4 } from 'uuid/v4' import { v4 as uuidv4 } from 'uuid'
@Injectable({ providedIn: 'root' }) @Injectable({ providedIn: 'root' })
export class HomeBaseService { export class HomeBaseService {
@@ -58,7 +58,7 @@ export class HomeBaseService {
getAnalyticsProperties (): Record<string, string> { getAnalyticsProperties (): Record<string, string> {
return { return {
distinct_id: window.localStorage.analyticsUserID, // eslint-disable-line @typescript-eslint/camelcase distinct_id: window.localStorage.analyticsUserID,
platform: process.platform, platform: process.platform,
os: os.release(), os: os.release(),
version: this.appVersion, version: this.appVersion,

View File

@@ -1,13 +1,23 @@
import type { BrowserWindow, TouchBar, MenuItemConstructorOptions } from 'electron'
import * as path from 'path' import * as path from 'path'
import * as fs from 'mz/fs'
import shellEscape from 'shell-escape' import shellEscape from 'shell-escape'
import { Observable, Subject } from 'rxjs' import { Observable, Subject } from 'rxjs'
import { Injectable, NgZone, EventEmitter } from '@angular/core' import { Injectable, NgZone, EventEmitter } from '@angular/core'
import { ElectronService } from './electron.service' import { ElectronService } from './electron.service'
import { Logger, LogService } from './log.service' import { Logger, LogService } from './log.service'
import { isWindowsBuild, WIN_BUILD_FLUENT_BG_MOVE_BUG_FIXED, WIN_BUILD_FLUENT_BG_SUPPORTED } from '../utils' import { isWindowsBuild, WIN_BUILD_FLUENT_BG_SUPPORTED } from '../utils'
/* eslint-disable block-scoped-var */
try {
var wnr = require('windows-native-registry') // eslint-disable-line @typescript-eslint/no-var-requires, no-var
} catch (_) { }
export enum Platform { export enum Platform {
Linux, macOS, Windows, Linux = 'Linux',
macOS = 'macOS',
Windows = 'Windows',
} }
export interface Bounds { export interface Bounds {
@@ -42,6 +52,7 @@ export class HostAppService {
private windowMoved = new Subject<void>() private windowMoved = new Subject<void>()
private windowFocused = new Subject<void>() private windowFocused = new Subject<void>()
private displayMetricsChanged = new Subject<void>() private displayMetricsChanged = new Subject<void>()
private displaysChanged = new Subject<void>()
private logger: Logger private logger: Logger
private windowId: number private windowId: number
@@ -91,6 +102,8 @@ export class HostAppService {
get displayMetricsChanged$ (): Observable<void> { return this.displayMetricsChanged } get displayMetricsChanged$ (): Observable<void> { return this.displayMetricsChanged }
get displaysChanged$ (): Observable<void> { return this.displaysChanged }
private constructor ( private constructor (
private zone: NgZone, private zone: NgZone,
private electron: ElectronService, private electron: ElectronService,
@@ -140,9 +153,14 @@ export class HostAppService {
this.zone.run(() => this.displayMetricsChanged.next()) this.zone.run(() => this.displayMetricsChanged.next())
}) })
electron.ipcRenderer.on('host:second-instance', (_$event, argv: any, cwd: string) => this.zone.run(() => { electron.ipcRenderer.on('host:displays-changed', () => {
this.zone.run(() => this.displaysChanged.next())
})
electron.ipcRenderer.on('cli', (_$event, argv: any, cwd: string, secondInstance: boolean) => this.zone.run(async () => {
this.logger.info('Second instance', argv) this.logger.info('Second instance', argv)
const op = argv._[0] const op = argv._[0]
const opAsPath = op ? path.resolve(cwd, op) : null
if (op === 'open') { if (op === 'open') {
this.cliOpenDirectory.next(path.resolve(cwd, argv.directory)) this.cliOpenDirectory.next(path.resolve(cwd, argv.directory))
} else if (op === 'run') { } else if (op === 'run') {
@@ -155,9 +173,13 @@ export class HostAppService {
this.cliPaste.next(text) this.cliPaste.next(text)
} else if (op === 'profile') { } else if (op === 'profile') {
this.cliOpenProfile.next(argv.profileName) this.cliOpenProfile.next(argv.profileName)
} else if (op === undefined) { } else if (secondInstance && op === undefined) {
this.newWindow() this.newWindow()
} else { } else if (opAsPath && (await fs.lstat(opAsPath)).isDirectory()) {
this.cliOpenDirectory.next(opAsPath)
}
if (secondInstance) {
this.secondInstance.next() this.secondInstance.next()
} }
})) }))
@@ -166,10 +188,7 @@ export class HostAppService {
this.configChangeBroadcast.next() this.configChangeBroadcast.next()
})) }))
if ( if (isWindowsBuild(WIN_BUILD_FLUENT_BG_SUPPORTED)) {
isWindowsBuild(WIN_BUILD_FLUENT_BG_SUPPORTED) &&
!isWindowsBuild(WIN_BUILD_FLUENT_BG_MOVE_BUG_FIXED)
) {
electron.ipcRenderer.send('window-set-disable-vibrancy-while-dragging', true) electron.ipcRenderer.send('window-set-disable-vibrancy-while-dragging', true)
} }
} }
@@ -177,8 +196,8 @@ export class HostAppService {
/** /**
* Returns the current remote [[BrowserWindow]] * Returns the current remote [[BrowserWindow]]
*/ */
getWindow (): Electron.BrowserWindow { getWindow (): BrowserWindow {
return this.electron.BrowserWindow.fromId(this.windowId) return this.electron.BrowserWindow.fromId(this.windowId)!
} }
newWindow (): void { newWindow (): void {
@@ -228,29 +247,29 @@ export class HostAppService {
* @param type `null`, or `fluent` when supported (Windowd only) * @param type `null`, or `fluent` when supported (Windowd only)
*/ */
setVibrancy (enable: boolean, type: string|null): void { setVibrancy (enable: boolean, type: string|null): void {
if (!isWindowsBuild(WIN_BUILD_FLUENT_BG_SUPPORTED)) { if (this.platform === Platform.Windows && !isWindowsBuild(WIN_BUILD_FLUENT_BG_SUPPORTED)) {
type = null type = null
} }
document.body.classList.toggle('vibrant', enable) document.body.classList.toggle('vibrant', enable)
this.electron.ipcRenderer.send('window-set-vibrancy', enable, type) this.electron.ipcRenderer.send('window-set-vibrancy', enable, type)
} }
setTitle (title: string): void { setTitle (title?: string): void {
this.electron.ipcRenderer.send('window-set-title', title) this.electron.ipcRenderer.send('window-set-title', title ?? 'Terminus')
} }
setTouchBar (touchBar: Electron.TouchBar): void { setTouchBar (touchBar: TouchBar): void {
this.getWindow().setTouchBar(touchBar) this.getWindow().setTouchBar(touchBar)
} }
popupContextMenu (menuDefinition: Electron.MenuItemConstructorOptions[]): void { popupContextMenu (menuDefinition: MenuItemConstructorOptions[]): void {
this.electron.Menu.buildFromTemplate(menuDefinition).popup({}) this.electron.Menu.buildFromTemplate(menuDefinition).popup({})
} }
/** /**
* Notifies other windows of config file changes * Notifies other windows of config file changes
*/ */
broadcastConfigChange (configStore: {[k: string]: any}): void { broadcastConfigChange (configStore: Record<string, any>): void {
this.electron.ipcRenderer.send('app:config-change', configStore) this.electron.ipcRenderer.send('app:config-change', configStore)
} }
@@ -270,6 +289,20 @@ export class HostAppService {
this.electron.ipcRenderer.send('app:register-global-hotkey', specs) this.electron.ipcRenderer.send('app:register-global-hotkey', specs)
} }
useBuiltinGraphics (): void {
const keyPath = 'SOFTWARE\\Microsoft\\DirectX\\UserGpuPreferences'
const valueName = this.electron.app.getPath('exe')
if (this.platform === Platform.Windows) {
if (!wnr.getRegistryValue(wnr.HK.CU, keyPath, valueName)) {
wnr.setRegistryValue(wnr.HK.CU, keyPath, valueName, wnr.REG.SZ, 'GpuPreference=1;')
}
}
}
setTrafficLightInset (x: number, y: number): void {
this.getWindow().setTrafficLightPosition({ x, y })
}
relaunch (): void { relaunch (): void {
if (this.isPortable) { if (this.isPortable) {
this.electron.app.relaunch({ execPath: process.env.PORTABLE_EXECUTABLE_FILE }) this.electron.app.relaunch({ execPath: process.env.PORTABLE_EXECUTABLE_FILE })

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