Compare commits

...
128 Commits
Author SHA1 Message Date
Daniel Imms 3504e2ebd5 Merge pull request #3084 from Tyriar/release490
v4.9.0
2020-09-08 16:36:32 -07:00
Daniel Imms 6c22e3df6b v4.9.0 2020-09-08 09:35:05 -07:00
Daniel Imms 33bf765b80 Merge pull request #3067 from mmis1000/fix/addon-serialize-cjk-handling
Fix cjk handling in SerializeAddon
2020-09-08 06:25:40 -07:00
Daniel Imms d960793f0c Merge pull request #3062 from IllusionMH/numeric-fontWeight-3051
Add number type to fontWeight & fontWeightBold options
2020-09-08 06:21:38 -07:00
Daniel Imms 4975f389ff Use assert over expect 2020-09-08 06:18:37 -07:00
Daniel Imms 4649ad7e7b Merge pull request #3077 from xtermjs/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-4.0.0
Bump @typescript-eslint/eslint-plugin from 3.10.1 to 4.0.0
2020-09-07 11:32:28 -07:00
dependabot-preview[bot] a425c325b7 Bump @typescript-eslint/eslint-plugin from 3.10.1 to 4.0.0
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 3.10.1 to 4.0.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v4.0.0/packages/eslint-plugin)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-07 18:21:07 +00:00
Daniel Imms c77025b18c Merge pull request #3079 from xtermjs/dependabot/npm_and_yarn/eslint-7.8.1
Bump eslint from 7.7.0 to 7.8.1
2020-09-07 11:19:18 -07:00
Daniel Imms c6abc85810 Merge pull request #3081 from Tyriar/3069_multiline_selection
Fix rendering of multi-line selection when only top row is visible
2020-09-07 09:59:11 -07:00
Daniel Imms 710223ab27 Merge pull request #3082 from Tyriar/3080_selection_canvas
Fix last/first line of selection sometimes not drawing
2020-09-07 09:57:58 -07:00
Daniel Imms ca9df42a73 Fix last/first line of selection sometimes not drawing
The last ydisp wasn't being updated on early exits.

Fixes #3080
2020-09-07 09:46:43 -07:00
Daniel Imms 9f033cb1d2 Fix rendering of multi-line selection when only top row is visible
Fixes #3069
2020-09-07 09:40:02 -07:00
dependabot-preview[bot] 9613f36280 Bump eslint from 7.7.0 to 7.8.1
Bumps [eslint](https://github.com/eslint/eslint) from 7.7.0 to 7.8.1.
- [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.7.0...v7.8.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-07 16:04:56 +00:00
Daniel Imms 41673f2c20 Merge pull request #3078 from xtermjs/dependabot/npm_and_yarn/types/webpack-4.41.22
Bump @types/webpack from 4.41.21 to 4.41.22
2020-09-07 09:02:56 -07:00
dependabot-preview[bot] 6c98f82ffe Bump @types/webpack from 4.41.21 to 4.41.22
Bumps [@types/webpack](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/webpack) from 4.41.21 to 4.41.22.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/webpack)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-07 15:51:27 +00:00
Daniel Imms a90ef52bda Merge pull request #3076 from xtermjs/dependabot/npm_and_yarn/types/jsdom-16.2.4
Bump @types/jsdom from 16.2.3 to 16.2.4
2020-09-07 08:49:49 -07:00
dependabot-preview[bot] 86884d2d88 Bump @types/jsdom from 16.2.3 to 16.2.4
Bumps [@types/jsdom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jsdom) from 16.2.3 to 16.2.4.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jsdom)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-07 15:32:12 +00:00
Daniel Imms 47c486e1be Merge pull request #3075 from Tyriar/clearTextureAtlas
Expose API to clear texture atlas
2020-09-06 15:16:51 -07:00
Daniel Imms e07b9684bb Expose API to clear texture atlas
Using canvases on Electron (and plain Chromium I believe), when resuming
from sleep the graphics card may release the texture which results in
the terminal display and char atlas being corrupt. This API allows the
consumer to clear the texture atlas right after resuming, atlas warm up
is not done to simplify this process because the fact that atlases are
shared between multiple terminals complicates this.

Related microsoft/vscode#69665
2020-09-06 14:50:09 -07:00
Daniel Imms 10fb48869e Merge pull request #3073 from Tyriar/tyriar/link_dispose
Support ILink.dispose
2020-09-04 22:11:49 -07:00
Daniel Imms 9f3746a3a1 Improve test case 2020-09-04 22:04:59 -07:00
Daniel Imms 50fc84f7d7 Support ILink.dispose
When displaying hovers/overlays using the link provider API currently
it's not possible to know when unused links are no longer cached in
xterm.js which can result in leaked event listeners.
2020-09-04 21:57:51 -07:00
IllusionMH 3e0f0331b3 Add tests for fontWeight normalization 2020-09-05 00:48:12 +03:00
IllusionMH b918f0d34a Use FontWeight as return type 2020-09-04 23:35:38 +03:00
IllusionMH f0e3159ece Add number type to fontWeight & fontWeightBold options 2020-09-04 23:08:34 +03:00
Daniel Imms ecfc7336c5 Merge pull request #3072 from Tyriar/deps2
Upgrade serialize-javascript
2020-09-04 12:53:34 -07:00
Daniel Imms aec8c68bf6 Upgrade serialize-javascript 2020-09-04 12:08:26 -07:00
mmis1000 0fb63561fb Fix cjk handling in SerializeAddon 2020-09-03 13:23:01 +08:00
Daniel Imms 106ea62b4c Merge pull request #3064 from IllusionMH/validate-constructor-options-3063
Validate constructor options
2020-09-02 08:36:04 -07:00
IllusionMH e73bf11849 Log error instead of throwing. Move test to service. 2020-09-01 22:20:37 +03:00
IllusionMH 8d9eda5d0a Add test 2020-09-01 02:37:25 +03:00
IllusionMH cf0b7ce2d0 Validate constructor options 2020-09-01 01:03:49 +03:00
Daniel Imms 60419a7cc6 Merge pull request #3061 from xtermjs/dependabot/npm_and_yarn/mocha-8.1.3
Bump mocha from 8.1.1 to 8.1.3
2020-08-31 12:46:29 -07:00
dependabot-preview[bot] 1b12b2d15d Bump mocha from 8.1.1 to 8.1.3
Bumps [mocha](https://github.com/mochajs/mocha) from 8.1.1 to 8.1.3.
- [Release notes](https://github.com/mochajs/mocha/releases)
- [Changelog](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mochajs/mocha/compare/v8.1.1...v8.1.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-31 16:20:40 +00:00
Daniel Imms b5844990c4 Merge pull request #3060 from xtermjs/dependabot/npm_and_yarn/source-map-loader-1.1.0
Bump source-map-loader from 1.0.2 to 1.1.0
2020-08-31 09:18:56 -07:00
dependabot-preview[bot] 2652768310 Bump source-map-loader from 1.0.2 to 1.1.0
Bumps [source-map-loader](https://github.com/webpack-contrib/source-map-loader) from 1.0.2 to 1.1.0.
- [Release notes](https://github.com/webpack-contrib/source-map-loader/releases)
- [Changelog](https://github.com/webpack-contrib/source-map-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/source-map-loader/compare/v1.0.2...v1.1.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-31 16:12:37 +00:00
Daniel Imms 1f8a6bece4 Merge pull request #3059 from Tyriar/ts4
Upgrade to typescript 4
2020-08-29 09:39:53 -07:00
Daniel Imms 8817ddf020 Remove empty deps 2020-08-28 20:58:06 -07:00
Daniel Imms 5d61956aff Get rid of removed typescript-eslint rules 2020-08-28 20:41:50 -07:00
Daniel Imms 83ece031a7 typescript@4.0 2020-08-28 19:35:26 -07:00
Daniel Imms 566fad4108 Merge pull request #3043 from xtermjs/dependabot/npm_and_yarn/types/mocha-8.0.3
Bump @types/mocha from 8.0.2 to 8.0.3
2020-08-24 12:55:01 -07:00
Daniel Imms a4aa111eaa Merge pull request #3052 from xtermjs/dependabot/npm_and_yarn/ts-loader-8.0.3
Bump ts-loader from 8.0.2 to 8.0.3
2020-08-24 12:54:45 -07:00
dependabot-preview[bot] f6ed184d49 Bump ts-loader from 8.0.2 to 8.0.3
Bumps [ts-loader](https://github.com/TypeStrong/ts-loader) from 8.0.2 to 8.0.3.
- [Release notes](https://github.com/TypeStrong/ts-loader/releases)
- [Changelog](https://github.com/TypeStrong/ts-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/TypeStrong/ts-loader/compare/v8.0.2...v8.0.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-24 15:59:17 +00:00
Daniel Imms c1820501a8 Merge pull request #3046 from Intervue/patch-1
Update README.md to add intervue
2020-08-24 06:40:21 -07:00
dependabot-preview[bot] c7f50c5c28 Bump @types/mocha from 8.0.2 to 8.0.3
Bumps [@types/mocha](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/mocha) from 8.0.2 to 8.0.3.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/mocha)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-24 13:21:31 +00:00
Daniel Imms 371c96e1da Merge pull request #3048 from xtermjs/dependabot/npm_and_yarn/source-map-loader-1.0.2
Bump source-map-loader from 1.0.1 to 1.0.2
2020-08-24 06:19:46 -07:00
dependabot-preview[bot] 11bd8b7eb1 Bump source-map-loader from 1.0.1 to 1.0.2
Bumps [source-map-loader](https://github.com/webpack-contrib/source-map-loader) from 1.0.1 to 1.0.2.
- [Release notes](https://github.com/webpack-contrib/source-map-loader/releases)
- [Changelog](https://github.com/webpack-contrib/source-map-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/source-map-loader/compare/v1.0.1...v1.0.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-21 15:13:37 +00:00
Intervue cb418eb8d1 Update README.md 2020-08-20 18:18:48 +05:30
Daniel Imms f811fb937e Merge pull request #3040 from akshaykmr/patch-1
readme: adds TeleType cli-tool to Real-world uses section
2020-08-13 06:02:05 -07:00
Akshay Kumar 2a6ccb8009 adds TeleType cli-tool to Real-world uses section 2020-08-13 16:49:25 +05:30
Daniel Imms bf49f99810 Merge pull request #3039 from xtermjs/dependabot/npm_and_yarn/types/mocha-8.0.2
Bump @types/mocha from 8.0.1 to 8.0.2
2020-08-12 08:38:04 -07:00
dependabot-preview[bot] e027a5f97b Bump @types/mocha from 8.0.1 to 8.0.2
Bumps [@types/mocha](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/mocha) from 8.0.1 to 8.0.2.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/mocha)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-12 15:08:48 +00:00
Daniel Imms d1ecb571d8 Merge pull request #3033 from xtermjs/dependabot/npm_and_yarn/mocha-8.1.1
Bump mocha from 8.1.0 to 8.1.1
2020-08-10 13:37:03 -07:00
dependabot-preview[bot] 1e3937830f Bump mocha from 8.1.0 to 8.1.1
Bumps [mocha](https://github.com/mochajs/mocha) from 8.1.0 to 8.1.1.
- [Release notes](https://github.com/mochajs/mocha/releases)
- [Changelog](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mochajs/mocha/compare/v8.1.0...v8.1.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-10 14:13:23 +00:00
Daniel Imms 38b2fcb460 Merge pull request #3035 from xtermjs/dependabot/npm_and_yarn/jsdom-16.4.0
Bump jsdom from 16.3.0 to 16.4.0
2020-08-10 07:11:37 -07:00
dependabot-preview[bot] c7ed42226f Bump jsdom from 16.3.0 to 16.4.0
Bumps [jsdom](https://github.com/jsdom/jsdom) from 16.3.0 to 16.4.0.
- [Release notes](https://github.com/jsdom/jsdom/releases)
- [Changelog](https://github.com/jsdom/jsdom/blob/master/Changelog.md)
- [Commits](https://github.com/jsdom/jsdom/compare/16.3.0...16.4.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-10 11:49:09 +00:00
Daniel Imms d0dfad4c92 Merge pull request #3031 from xtermjs/dependabot/npm_and_yarn/ts-loader-8.0.2
Bump ts-loader from 8.0.1 to 8.0.2
2020-08-03 06:40:43 -07:00
dependabot-preview[bot] c66123b91f Bump ts-loader from 8.0.1 to 8.0.2
Bumps [ts-loader](https://github.com/TypeStrong/ts-loader) from 8.0.1 to 8.0.2.
- [Release notes](https://github.com/TypeStrong/ts-loader/releases)
- [Changelog](https://github.com/TypeStrong/ts-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/TypeStrong/ts-loader/compare/v8.0.1...v8.0.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-03 13:31:14 +00:00
Daniel Imms 8d912e891e Merge pull request #3028 from xtermjs/dependabot/npm_and_yarn/types/mocha-8.0.1
Bump @types/mocha from 8.0.0 to 8.0.1
2020-07-31 19:28:13 -07:00
dependabot-preview[bot] 23fd6b8e60 Bump @types/mocha from 8.0.0 to 8.0.1
Bumps [@types/mocha](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/mocha) from 8.0.0 to 8.0.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/mocha)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-31 22:06:10 +00:00
Daniel Imms 0320e6e22a Merge pull request #3027 from xtermjs/dependabot/npm_and_yarn/mocha-8.1.0
Bump mocha from 8.0.1 to 8.1.0
2020-07-31 15:04:28 -07:00
dependabot-preview[bot] 9e70d8fc84 Bump mocha from 8.0.1 to 8.1.0
Bumps [mocha](https://github.com/mochajs/mocha) from 8.0.1 to 8.1.0.
- [Release notes](https://github.com/mochajs/mocha/releases)
- [Changelog](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mochajs/mocha/compare/v8.0.1...v8.1.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-31 21:26:19 +00:00
Daniel Imms 27e28eccac Merge pull request #3026 from Tyriar/docker
Remove docker from root
2020-07-31 06:31:58 -07:00
Daniel Imms 0cb0313fc9 Remove docker from root
We will keep the devcontainer as that is something we want to continue to
support.

Fixes #3000
2020-07-31 06:23:05 -07:00
Daniel Imms 94a34c3703 Merge pull request #3023 from xtermjs/dependabot/npm_and_yarn/elliptic-6.5.3
[Security] Bump elliptic from 6.5.2 to 6.5.3
2020-07-30 07:03:40 -07:00
dependabot-preview[bot] c04c836f12 [Security] Bump elliptic from 6.5.2 to 6.5.3
Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.2 to 6.5.3. **This update includes a security fix.**
- [Release notes](https://github.com/indutny/elliptic/releases)
- [Commits](https://github.com/indutny/elliptic/compare/v6.5.2...v6.5.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-30 13:52:44 +00:00
Daniel Imms c5a9d2c52d Merge pull request #3024 from xtermjs/dependabot/npm_and_yarn/webpack-4.44.1
Bump webpack from 4.44.0 to 4.44.1
2020-07-30 06:51:23 -07:00
dependabot-preview[bot] c0050672ab Bump webpack from 4.44.0 to 4.44.1
Bumps [webpack](https://github.com/webpack/webpack) from 4.44.0 to 4.44.1.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.44.0...v4.44.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-30 11:23:30 +00:00
Daniel Imms 705f94518f Merge pull request #3021 from sergeichestakov/add-replit
Add Repl.it to Real-world uses
2020-07-29 13:46:53 -07:00
Sergei Chestakov a096217526 Merge branch 'master' into add-replit 2020-07-29 13:11:49 -07:00
sergeichestakov 795768667e Add Repl.it to Real-world uses 2020-07-29 13:08:50 -07:00
Daniel Imms 5e9a8c6321 Merge pull request #3020 from Tyriar/vsc98918
Use document role instead of list
2020-07-29 05:34:06 -07:00
Daniel Imms 03df0565bd Use document role instead of list
See microsoft/vscode#98918
2020-07-29 05:29:30 -07:00
Daniel Imms 3ef6856b36 Merge pull request #3018 from xtermjs/dependabot/npm_and_yarn/webpack-4.44.0
Bump webpack from 4.43.0 to 4.44.0
2020-07-27 05:28:20 -07:00
dependabot-preview[bot] 48e9f33263 Bump webpack from 4.43.0 to 4.44.0
Bumps [webpack](https://github.com/webpack/webpack) from 4.43.0 to 4.44.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.43.0...v4.44.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-27 07:54:25 +00:00
Daniel Imms 9559dd47da Merge pull request #3017 from xtermjs/dependabot/npm_and_yarn/types/chai-4.2.12
Bump @types/chai from 4.2.11 to 4.2.12
2020-07-24 05:23:59 -07:00
dependabot-preview[bot] ad7f8c303c Bump @types/chai from 4.2.11 to 4.2.12
Bumps [@types/chai](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/chai) from 4.2.11 to 4.2.12.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/chai)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-24 07:41:38 +00:00
Daniel Imms edb7a0edda Merge pull request #3015 from xtermjs/dependabot/npm_and_yarn/typescript-3.9.7
Bump typescript from 3.9.6 to 3.9.7
2020-07-17 06:22:42 -07:00
dependabot-preview[bot] aedcbba211 Bump typescript from 3.9.6 to 3.9.7
Bumps [typescript](https://github.com/Microsoft/TypeScript) from 3.9.6 to 3.9.7.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/compare/v3.9.6...v3.9.7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-17 07:43:13 +00:00
Daniel Imms ab63b51681 Merge pull request #3013 from xtermjs/dependabot/npm_and_yarn/lodash-4.17.19
[Security] Bump lodash from 4.17.15 to 4.17.19
2020-07-16 05:28:25 -07:00
dependabot-preview[bot] 63f5d0c266 [Security] Bump lodash from 4.17.15 to 4.17.19
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.19. **This update includes a security fix.**
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.19)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-16 07:46:50 +00:00
Daniel Imms 349ebd3846 Merge pull request #3012 from xtermjs/dependabot/npm_and_yarn/ts-loader-8.0.1
Bump ts-loader from 8.0.0 to 8.0.1
2020-07-15 05:06:55 -07:00
dependabot-preview[bot] ce496bc389 Bump ts-loader from 8.0.0 to 8.0.1
Bumps [ts-loader](https://github.com/TypeStrong/ts-loader) from 8.0.0 to 8.0.1.
- [Release notes](https://github.com/TypeStrong/ts-loader/releases)
- [Changelog](https://github.com/TypeStrong/ts-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/TypeStrong/ts-loader/compare/v8.0.0...v8.0.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-15 07:36:40 +00:00
Daniel Imms be1af82ee0 Merge pull request #3010 from Tyriar/mocha8
@types/mocha@8
2020-07-13 06:38:03 -07:00
Daniel Imms 11bfb03add @types/mocha@8 2020-07-13 06:21:25 -07:00
Daniel Imms b89d4b102e Merge pull request #3008 from andrew-schlackman/fix-renderer-pause2
fix renderer pause again with handling of undefined
2020-07-13 06:02:48 -07:00
Andrew Schlackman 0abd121653 fix renderer pause again with handling of undefined 2020-07-12 10:07:47 -04:00
Daniel Imms eeb095b095 Merge pull request #3007 from xtermjs/Tyriar-patch-1
v4.8.1
2020-07-10 12:22:21 -07:00
Daniel Imms 266a289520 Update package.json 2020-07-10 12:21:15 -07:00
Daniel Imms 3c1d6b575a Merge pull request #3005 from Tyriar/fix_passive
Indicate non-passive scroll events for viewport
2020-07-10 12:19:12 -07:00
Daniel Imms bd08862074 Merge pull request #3006 from Tyriar/revert
Revert "fix renderer pausing inadvertently in some cases"
2020-07-10 12:18:36 -07:00
Daniel Imms 70e0c0385a Revert "fix renderer pausing inadvertently in some cases"
This reverts commit 5738f4545f.
2020-07-10 12:14:59 -07:00
Daniel Imms 454cf1fb26 Indicate non-passive scroll events for viewport
Fixes #3004
2020-07-10 12:13:26 -07:00
Daniel Imms 6d1029b3c7 Merge pull request #3002 from xtermjs/Tyriar-patch-1
v4.8.0
2020-07-10 06:35:26 -07:00
Daniel Imms f13f8fb38a v4.8.0 2020-07-10 06:23:36 -07:00
Daniel Imms 2447064604 Merge pull request #2996 from jeanp413/fix-sync-textarea
Sync textarea with cursor
2020-07-10 06:19:18 -07:00
Daniel Imms 85a2589c0c Merge pull request #2999 from andrew-schlackman/fix-renderer-pause
fix renderer pausing inadvertently in some cases
2020-07-10 06:11:01 -07:00
Daniel Imms 2c821155ae Merge pull request #3001 from xtermjs/dependabot/npm_and_yarn/jsdom-16.3.0
Bump jsdom from 16.2.2 to 16.3.0
2020-07-10 05:18:20 -07:00
dependabot-preview[bot] c040be1ad2 Bump jsdom from 16.2.2 to 16.3.0
Bumps [jsdom](https://github.com/jsdom/jsdom) from 16.2.2 to 16.3.0.
- [Release notes](https://github.com/jsdom/jsdom/releases)
- [Changelog](https://github.com/jsdom/jsdom/blob/master/Changelog.md)
- [Commits](https://github.com/jsdom/jsdom/compare/16.2.2...16.3.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-10 07:44:47 +00:00
jeanp413 2b91bb83fa 💄 2020-07-09 20:35:01 -05:00
Andrew Schlackman 5738f4545f fix renderer pausing inadvertently in some cases 2020-07-09 16:20:37 -04:00
Daniel Imms 01432a31d6 Merge pull request #2997 from Tyriar/deps
Update vulnerable dev dependencies
2020-07-09 06:36:02 -07:00
Daniel Imms 798a7fd52e sinon@6.3.5
Fixes vulnerable just-extend
2020-07-09 06:22:47 -07:00
Daniel Imms cee121f414 mkdirp@0.5.5
Updates vulnerable minimist
2020-07-09 06:21:31 -07:00
Daniel Imms a4fe871865 Merge pull request #2995 from xtermjs/dependabot/npm_and_yarn/ts-loader-8.0.0
Bump ts-loader from 7.0.5 to 8.0.0
2020-07-09 05:16:47 -07:00
jeanp413 d85c80df95 💄 2020-07-09 03:59:59 -05:00
jeanp413 95d01dec52 Sync textarea with cursor. Fixes #2598 2020-07-09 03:56:40 -05:00
dependabot-preview[bot] 1506097faa Bump ts-loader from 7.0.5 to 8.0.0
Bumps [ts-loader](https://github.com/TypeStrong/ts-loader) from 7.0.5 to 8.0.0.
- [Release notes](https://github.com/TypeStrong/ts-loader/releases)
- [Changelog](https://github.com/TypeStrong/ts-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/TypeStrong/ts-loader/compare/v7.0.5...v8.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-09 07:38:24 +00:00
Daniel Imms dc541c2664 Merge pull request #2992 from xtermjs/dependabot/npm_and_yarn/types/webpack-4.41.21
Bump @types/webpack from 4.41.20 to 4.41.21
2020-07-08 06:13:24 -07:00
dependabot-preview[bot] 694da35f99 Bump @types/webpack from 4.41.20 to 4.41.21
Bumps [@types/webpack](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/webpack) from 4.41.20 to 4.41.21.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/webpack)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-08 13:02:38 +00:00
Daniel Imms 3c7697420c Merge pull request #2993 from LabhanshAgrawal/ligatures
Bump font-ligatures to 1.3.3
2020-07-08 06:01:00 -07:00
Labhansh Agrawal 4a407dbe76 Bump font-ligatures to 1.3.3 2020-07-08 16:57:37 +05:30
Daniel Imms 2479660028 Merge pull request #2986 from xtermjs/dependabot/npm_and_yarn/typescript-3.9.6
Bump typescript from 3.9.5 to 3.9.6
2020-07-07 09:57:02 -07:00
dependabot-preview[bot] 612b922eeb Bump typescript from 3.9.5 to 3.9.6
Bumps [typescript](https://github.com/Microsoft/TypeScript) from 3.9.5 to 3.9.6.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-07 13:19:44 +00:00
Daniel Imms ea2336b68e Merge pull request #2989 from xtermjs/dependabot/npm_and_yarn/ws-7.3.1
Bump ws from 7.3.0 to 7.3.1
2020-07-07 06:18:04 -07:00
dependabot-preview[bot] 0c953a88c3 Bump ws from 7.3.0 to 7.3.1
Bumps [ws](https://github.com/websockets/ws) from 7.3.0 to 7.3.1.
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](https://github.com/websockets/ws/compare/7.3.0...7.3.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-07 13:01:07 +00:00
Daniel Imms a551c69e9e Merge pull request #2991 from xtermjs/dependabot/npm_and_yarn/types/webpack-4.41.20
Bump @types/webpack from 4.41.18 to 4.41.20
2020-07-07 05:59:27 -07:00
Daniel Imms 7e7be15ab8 Merge pull request #2990 from xtermjs/dependabot/npm_and_yarn/types/glob-7.1.3
Bump @types/glob from 7.1.2 to 7.1.3
2020-07-07 05:59:14 -07:00
dependabot-preview[bot] cb0242782a Bump @types/webpack from 4.41.18 to 4.41.20
Bumps [@types/webpack](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/webpack) from 4.41.18 to 4.41.20.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/webpack)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-07 07:53:25 +00:00
dependabot-preview[bot] 04655b1db5 Bump @types/glob from 7.1.2 to 7.1.3
Bumps [@types/glob](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/glob) from 7.1.2 to 7.1.3.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/glob)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-07 07:52:51 +00:00
Daniel Imms 7ce47c474a Merge pull request #2985 from xtermjs/dependabot/npm_and_yarn/source-map-loader-1.0.1
Bump source-map-loader from 1.0.0 to 1.0.1
2020-07-01 05:30:37 -07:00
dependabot-preview[bot] b6259d3e7e Bump source-map-loader from 1.0.0 to 1.0.1
Bumps [source-map-loader](https://github.com/webpack-contrib/source-map-loader) from 1.0.0 to 1.0.1.
- [Release notes](https://github.com/webpack-contrib/source-map-loader/releases)
- [Changelog](https://github.com/webpack-contrib/source-map-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/source-map-loader/compare/v1.0.0...v1.0.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-01 07:48:02 +00:00
Daniel Imms 3e6bcc09b3 Merge pull request #2984 from xtermjs/dependabot/npm_and_yarn/types/ws-7.2.6
Bump @types/ws from 7.2.5 to 7.2.6
2020-06-30 05:20:23 -07:00
dependabot-preview[bot] fbc34b649c Bump @types/ws from 7.2.5 to 7.2.6
Bumps [@types/ws](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/ws) from 7.2.5 to 7.2.6.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/ws)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-30 07:41:08 +00:00
Daniel Imms 4a0cb00450 Merge pull request #2982 from xtermjs/dependabot/npm_and_yarn/types/webpack-4.41.18
Bump @types/webpack from 4.41.17 to 4.41.18
2020-06-26 08:25:54 -07:00
dependabot-preview[bot] 0cf32d9b4d Bump @types/webpack from 4.41.17 to 4.41.18
Bumps [@types/webpack](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/webpack) from 4.41.17 to 4.41.18.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/webpack)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-26 07:45:33 +00:00
Daniel Imms f6bf7dcd92 Merge pull request #2977 from xtermjs/dependabot/npm_and_yarn/webpack-cli-3.3.12
Bump webpack-cli from 3.3.11 to 3.3.12
2020-06-19 04:43:14 -07:00
dependabot-preview[bot] 4f59d1561a Bump webpack-cli from 3.3.11 to 3.3.12
Bumps [webpack-cli](https://github.com/webpack/webpack-cli) from 3.3.11 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.11...v3.3.12)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-19 07:45:20 +00:00
40 changed files with 1084 additions and 811 deletions
-16
View File
@@ -1,16 +0,0 @@
node_modules/
*.swp
.lock-wscript
lib/
Makefile.gyp
*.Makefile
*.target.gyp.mk
*.node
example/*.log
docs/
npm-debug.log
/.idea/
.env
build/
.vscode/
.git/
-5
View File
@@ -40,7 +40,6 @@
"readonly": "generic"
}
],
"@typescript-eslint/class-name-casing": "warn",
"@typescript-eslint/consistent-type-definitions": "warn",
"@typescript-eslint/explicit-function-return-type": [
"warn",
@@ -61,10 +60,6 @@
"warn",
2
],
"@typescript-eslint/interface-name-prefix": [
"warn",
"always"
],
"@typescript-eslint/member-delimiter-style": [
"warn",
{
-19
View File
@@ -1,19 +0,0 @@
FROM node:12
MAINTAINER Paris Kasidiaris <paris@sourcelair.com>
# Set the working directory
WORKDIR /usr/src/app
# Set an entrypoint, to automatically install node modules
ENTRYPOINT ["/bin/bash", "-c", "if [[ ! -d node_modules ]]; then npm install; fi; exec \"${@:0}\";"]
CMD ["npm", "run", "start"]
# First, install dependencies to improve layer caching
COPY package.json /usr/src/app/
RUN npm install
# Add the code
COPY . /usr/src/app
# Run the tests and build, to make sure everything is working nicely
RUN npm run build && npm run test
+3
View File
@@ -165,6 +165,9 @@ Xterm.js is used in several world-class applications to provide great terminal e
- [**DockerStacks**](https://docker-stacks.com/): Local LAMP/LEMP development studio
- [**Codecademy**](https://codecademy.com/): Uses xterm.js in its courses on Bash.
- [**Laravel Ssh Web Client**](https://github.com/roke22/Laravel-ssh-client): Laravel server inventory with ssh web client to connect at server using xterm.js
- [**Repl.it**](https://repl.it): Collaborative browser based IDE with support for 50+ different languages.
- [**TeleType**](https://github.com/akshaykmr/TeleType): cli tool that allows you to share your terminal online conveniently. Show off mad cli-fu, help a colleague, teach, or troubleshoot.
- [**Intervue**](https://www.intervue.io): Pair programming for interviews. Multiple programming languages supported, with results displayed by xterm.js.
[And much more...](https://github.com/xtermjs/xterm.js/network/dependents)
Do you use xterm.js in your application as well? Please [open a Pull Request](https://github.com/sourcelair/xterm.js/pulls) to include it here. We would love to have it in our list. Note: Please add any new contributions to the end of the list only.
+3 -3
View File
@@ -32,13 +32,13 @@
"license": "MIT",
"dependencies": {
"font-finder": "^1.0.4",
"font-ligatures": "^1.3.2"
"font-ligatures": "^1.3.3"
},
"devDependencies": {
"@types/sinon": "^5.0.1",
"axios": "^0.18.0",
"mkdirp": "^0.5.1",
"sinon": "^6.1.3",
"mkdirp": "0.5.5",
"sinon": "6.3.5",
"yauzl": "^2.10.0"
},
"peerDependencies": {
+92 -50
View File
@@ -2,20 +2,49 @@
# yarn lockfile v1
"@sinonjs/formatio@^2.0.0":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-2.0.0.tgz#84db7e9eb5531df18a8c5e0bfb6e449e55e654b2"
"@sinonjs/commons@^1", "@sinonjs/commons@^1.0.2", "@sinonjs/commons@^1.3.0", "@sinonjs/commons@^1.7.0":
version "1.8.0"
resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.0.tgz#c8d68821a854c555bba172f3b06959a0039b236d"
integrity sha512-wEj54PfsZ5jGSwMX68G8ZXFawcSglQSXqCftWX3ec8MDUzQdHgcKvw97awHbY0efQEL5iKUOAmmVtoYgmrSG4Q==
dependencies:
samsam "1.3.0"
type-detect "4.0.8"
"@sinonjs/samsam@^2.0.0":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-2.0.0.tgz#9163742ac35c12d3602dece74317643b35db6a80"
"@sinonjs/formatio@^3.0.0", "@sinonjs/formatio@^3.2.1":
version "3.2.2"
resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-3.2.2.tgz#771c60dfa75ea7f2d68e3b94c7e888a78781372c"
integrity sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ==
dependencies:
"@sinonjs/commons" "^1"
"@sinonjs/samsam" "^3.1.0"
"@sinonjs/samsam@^2.1.2":
version "2.1.3"
resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-2.1.3.tgz#62cf2a9b624edc795134135fe37fc2ae8ea36be3"
integrity sha512-8zNeBkSKhU9a5cRNbpCKau2WWPfan+Q2zDlcXvXyhn9EsMqgYs4qzo0XHNVlXC6ABQL8fT6nV+zzo5RTHJzyXw==
"@sinonjs/samsam@^3.1.0":
version "3.3.3"
resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-3.3.3.tgz#46682efd9967b259b81136b9f120fd54585feb4a"
integrity sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ==
dependencies:
"@sinonjs/commons" "^1.3.0"
array-from "^2.1.1"
lodash "^4.17.15"
"@sinonjs/text-encoding@^0.7.1":
version "0.7.1"
resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz#8da5c6530915653f3a1f38fd5f101d8c3f8079c5"
integrity sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==
"@types/sinon@^5.0.1":
version "5.0.1"
resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-5.0.1.tgz#a15b36ec42f1f53166617491feabd1734cb03e21"
array-from@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/array-from/-/array-from-2.1.1.tgz#cfe9d8c26628b9dc5aecc62a9f5d8f1f352c1195"
integrity sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=
axios@^0.18.0:
version "0.18.1"
resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.1.tgz#ff3f0de2e7b5d180e757ad98000f1081b87bcea3"
@@ -56,9 +85,10 @@ font-finder@^1.0.3, font-finder@^1.0.4:
get-system-fonts "^2.0.0"
promise-stream-reader "^1.0.1"
font-ligatures@^1.3.2:
version "1.3.2"
resolved "https://registry.yarnpkg.com/font-ligatures/-/font-ligatures-1.3.2.tgz#227eb5fc38fef34b5373aa19b555320b82842a71"
font-ligatures@^1.3.3:
version "1.3.3"
resolved "https://registry.yarnpkg.com/font-ligatures/-/font-ligatures-1.3.3.tgz#63fff18dc8adb3a11fe5eec1f4e8d7edfa8075b9"
integrity sha512-NSGpHgVNX81M7AWS1XylK1UZbN3QllfUIDAAuPv6TUcl5O2b781JcKS5L2RopAU0AqlTyX3ZuX/04eaMpbVrHA==
dependencies:
font-finder "^1.0.3"
lru-cache "^4.1.3"
@@ -80,17 +110,31 @@ isarray@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
just-extend@^1.1.27:
version "1.1.27"
resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-1.1.27.tgz#ec6e79410ff914e472652abfa0e603c03d60e905"
just-extend@^4.0.2:
version "4.1.0"
resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.1.0.tgz#7278a4027d889601640ee0ce0e5a00b992467da4"
integrity sha512-ApcjaOdVTJ7y4r08xI5wIqpvwS48Q0PBG4DJROcEkH1f8MdAiNFyFxz3xoL0LWAVwjrwPYZdVHHxhRHcx/uGLA==
lodash.get@^4.4.2:
version "4.4.2"
resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
lolex@^2.3.2, lolex@^2.4.2:
version "2.7.1"
resolved "https://registry.yarnpkg.com/lolex/-/lolex-2.7.1.tgz#e40a8c4d1f14b536aa03e42a537c7adbaf0c20be"
lodash@^4.17.15:
version "4.17.19"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b"
integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==
lolex@^2.7.5:
version "2.7.5"
resolved "https://registry.yarnpkg.com/lolex/-/lolex-2.7.5.tgz#113001d56bfc7e02d56e36291cc5c413d1aa0733"
integrity sha512-l9x0+1offnKKIzYVjyXU2SiwhXDLekRzKyhnbyldPHvC7BvLPVpdNUNR2KeMAiCN2D/kLNttZgQD5WjSxuBx3Q==
lolex@^5.0.1:
version "5.1.2"
resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367"
integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==
dependencies:
"@sinonjs/commons" "^1.7.0"
lru-cache@^4.1.3:
version "4.1.3"
@@ -99,29 +143,32 @@ lru-cache@^4.1.3:
pseudomap "^1.0.2"
yallist "^2.1.2"
minimist@0.0.8:
version "0.0.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
minimist@^1.2.5:
version "1.2.5"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
mkdirp@^0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
mkdirp@0.5.5:
version "0.5.5"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
dependencies:
minimist "0.0.8"
minimist "^1.2.5"
ms@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
nise@^1.3.3:
version "1.4.2"
resolved "https://registry.yarnpkg.com/nise/-/nise-1.4.2.tgz#a9a3800e3994994af9e452333d549d60f72b8e8c"
nise@^1.4.5:
version "1.5.3"
resolved "https://registry.yarnpkg.com/nise/-/nise-1.5.3.tgz#9d2cfe37d44f57317766c6e9408a359c5d3ac1f7"
integrity sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ==
dependencies:
"@sinonjs/formatio" "^2.0.0"
just-extend "^1.1.27"
lolex "^2.3.2"
"@sinonjs/formatio" "^3.2.1"
"@sinonjs/text-encoding" "^0.7.1"
just-extend "^4.0.2"
lolex "^5.0.1"
path-to-regexp "^1.7.0"
text-encoding "^0.6.4"
opentype.js@^0.8.0:
version "0.8.0"
@@ -147,38 +194,33 @@ pseudomap@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
samsam@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.3.0.tgz#8d1d9350e25622da30de3e44ba692b5221ab7c50"
sinon@^6.1.3:
version "6.1.3"
resolved "https://registry.yarnpkg.com/sinon/-/sinon-6.1.3.tgz#98e7d716b7b11f7f1200e9c997e74f50ae094660"
sinon@6.3.5:
version "6.3.5"
resolved "https://registry.yarnpkg.com/sinon/-/sinon-6.3.5.tgz#0f6d6a5b4ebaad1f6e8e019395542d1d02c144a0"
integrity sha512-xgoZ2gKjyVRcF08RrIQc+srnSyY1JDJtxu3Nsz07j1ffjgXoY6uPLf/qja6nDBZgzYYEovVkFryw2+KiZz11xQ==
dependencies:
"@sinonjs/formatio" "^2.0.0"
"@sinonjs/samsam" "^2.0.0"
"@sinonjs/commons" "^1.0.2"
"@sinonjs/formatio" "^3.0.0"
"@sinonjs/samsam" "^2.1.2"
diff "^3.5.0"
lodash.get "^4.4.2"
lolex "^2.4.2"
nise "^1.3.3"
supports-color "^5.4.0"
lolex "^2.7.5"
nise "^1.4.5"
supports-color "^5.5.0"
type-detect "^4.0.8"
supports-color@^5.4.0:
version "5.4.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54"
supports-color@^5.5.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
dependencies:
has-flag "^3.0.0"
text-encoding@^0.6.4:
version "0.6.4"
resolved "https://registry.yarnpkg.com/text-encoding/-/text-encoding-0.6.4.tgz#e399a982257a276dae428bb92845cb71bdc26d19"
tiny-inflate@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.2.tgz#93d9decffc8805bd57eae4310f0b745e9b6fb3a7"
type-detect@^4.0.8:
type-detect@4.0.8, type-detect@^4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "xterm-addon-serialize",
"version": "0.3.0",
"version": "0.4.0",
"author": {
"name": "The xterm.js authors",
"url": "https://xtermjs.org/"
@@ -270,6 +270,35 @@ describe('SerializeAddon', () => {
await writeSync(page, lines.join('\\r\\n'));
assert.equal(await page.evaluate(`serializeAddon.serialize();`), expected.join('\r\n'));
});
it('serialize CJK correctly', async () => {
const lines = [
'中文中文',
'12中文',
'中文12',
'1中文中文中' // this line is going to be wrapped at last character because it has line length of 11 (1+2*5)
];
const expected = [
'中文中文',
'12中文',
'中文12',
'1中文中文',
'中'
];
await writeSync(page, lines.join('\\r\\n'));
assert.equal(await page.evaluate(`serializeAddon.serialize();`), expected.join('\r\n'));
});
it('serialize CJK Mixed with tab correctly', async () => {
const lines = [
'中文\t12' // CJK mixed with tab
];
const expected = [
'中文\x1b[4C12'
];
await writeSync(page, lines.join('\\r\\n'));
assert.equal(await page.evaluate(`serializeAddon.serialize();`), expected.join('\r\n'));
});
});
function newArray<T>(initial: T | ((index: number) => T), count: number): T[] {
@@ -138,7 +138,7 @@ class StringSerializeHandler extends BaseSerializeHandler {
// Count number of null cells encountered after the last non-null cell and move the cursor
// if a non-null cell is found (eg. \t or cursor move)
if (cell.getChars() === '') {
this._nullCellCount++;
this._nullCellCount += cell.getWidth();
} else if (this._nullCellCount > 0) {
this._currentRow += `\x1b[${this._nullCellCount}C`;
this._nullCellCount = 0;
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "xterm-addon-webgl",
"version": "0.8.0",
"version": "0.9.0",
"author": {
"name": "The xterm.js authors",
"url": "https://xtermjs.org/"
@@ -196,7 +196,7 @@ export class RectangleRenderer {
} else {
// Draw first row
const startCol = model.viewportStartRow === model.viewportCappedStartRow ? model.startCol : 0;
const startRowEndCol = model.viewportCappedStartRow === model.viewportCappedEndRow ? model.endCol : terminal.cols;
const startRowEndCol = model.viewportCappedStartRow === model.viewportEndRow ? model.endCol : terminal.cols;
this._addRectangleFloat(
this._vertices.selection,
0,
@@ -43,7 +43,6 @@ export class RenderModel implements IRenderModel {
public clear(): void {
fill(this.cells, 0, 0);
fill(this.lineLengths, 0, 0);
this.clearSelection();
}
public clearSelection(): void {
@@ -40,4 +40,8 @@ export class WebglAddon implements ITerminalAddon {
public get textureAtlas(): HTMLCanvasElement | undefined {
return this._renderer?.textureAtlas;
}
public clearTextureAtlas(): void {
this._renderer?.clearCharAtlas();
}
}
@@ -16,14 +16,12 @@ let page: Page;
const width = 800;
const height = 600;
let itWebgl: (expectation: string, callback?: (this: Mocha.ITestCallbackContext, done: MochaDone) => any) => Mocha.ITest | void;
describe('WebGL Renderer Integration Tests', async () => {
const browserType = getBrowserType();
const isHeadless = process.argv.indexOf('--headless') !== -1;
// Firefox works only in non-headless mode https://github.com/microsoft/playwright/issues/1032
const areTestsEnabled = browserType.name() === 'chromium' || (browserType.name() === 'firefox' && !isHeadless);
itWebgl = areTestsEnabled ? it : it.skip;
const itWebgl = areTestsEnabled ? it : it.skip;
itWebgl('dispose removes renderer canvases', async function(): Promise<void> {
await setupBrowser();
@@ -121,6 +121,7 @@ export class WebglRenderer extends Disposable implements IRenderer {
// Force a full refresh
this._model.clear();
this._model.clearSelection();
}
public onDevicePixelRatioChange(): void {
@@ -158,6 +159,7 @@ export class WebglRenderer extends Disposable implements IRenderer {
// Force a full refresh
this._model.clear();
this._model.clearSelection();
}
public onCharSizeChanged(): void {
@@ -214,6 +216,14 @@ export class WebglRenderer extends Disposable implements IRenderer {
this._glyphRenderer.setAtlas(this._charAtlas);
}
public clearCharAtlas(): void {
this._charAtlas?.clearTexture();
this._model.clear();
this._updateModel(0, this._terminal.rows - 1);
this._glyphRenderer.updateSelection(this._model);
this._onRequestRedraw.fire({ start: 0, end: this._terminal.rows - 1 });
}
public clear(): void {
this._renderLayers.forEach(l => l.reset(this._terminal));
}
@@ -243,6 +253,7 @@ export class WebglRenderer extends Disposable implements IRenderer {
// Tell renderer the frame is beginning
if (this._glyphRenderer.beginFrame()) {
this._model.clear();
this._model.clearSelection();
}
// Update model to reflect what's drawn
@@ -101,7 +101,7 @@ export class WebglCharAtlas implements IDisposable {
}
}
protected _doWarmUp(): void {
private _doWarmUp(): void {
// Pre-fill with ASCII 33-126
for (let i = 33; i < 126; i++) {
const rasterizedGlyph = this._drawToCache(i, DEFAULT_COLOR, DEFAULT_COLOR);
@@ -115,17 +115,26 @@ export class WebglCharAtlas implements IDisposable {
public beginFrame(): boolean {
if (this._currentRowY > TEXTURE_CAPACITY) {
this._cacheCtx.clearRect(0, 0, TEXTURE_WIDTH, TEXTURE_HEIGHT);
this._cacheMap = {};
this._currentRowHeight = 0;
this._currentRowX = 0;
this._currentRowY = 0;
this._doWarmUp();
this.clearTexture();
this.warmUp();
return true;
}
return false;
}
public clearTexture(): void {
if (this._currentRowX === 0 && this._currentRowY === 0) {
return;
}
this._cacheCtx.clearRect(0, 0, TEXTURE_WIDTH, TEXTURE_HEIGHT);
this._cacheMap = {};
this._cacheMapCombined = {};
this._currentRowHeight = 0;
this._currentRowX = 0;
this._currentRowY = 0;
this._didWarmUp = false;
}
public getRasterizedGlyphCombinedChar(chars: string, bg: number, fg: number): IRasterizedGlyph {
let rasterizedGlyphSet = this._cacheMapCombined[chars];
if (!rasterizedGlyphSet) {
+7 -2
View File
@@ -3,7 +3,7 @@
* @license MIT
*/
import { Terminal, IDisposable, ITerminalAddon } from 'xterm';
import { Terminal, ITerminalAddon } from 'xterm';
declare module 'xterm-addon-webgl' {
/**
@@ -15,7 +15,7 @@ declare module 'xterm-addon-webgl' {
constructor(preserveDrawingBuffer?: boolean);
/**
* Activates the addon
* Activates the addon.
* @param terminal The terminal the addon is being loaded in.
*/
public activate(terminal: Terminal): void;
@@ -24,5 +24,10 @@ declare module 'xterm-addon-webgl' {
* Disposes the addon.
*/
public dispose(): void;
/**
* Clears the terminal's texture atlas and triggers a redraw.
*/
public clearTextureAtlas(): void;
}
}
+4 -4
View File
@@ -59,10 +59,10 @@
}
.xterm .xterm-helper-textarea {
/*
* HACK: to fix IE's blinking cursor
* Move textarea out of the screen to the far left, so that the cursor is not visible.
*/
padding: 0;
border: 0;
margin: 0;
/* Move textarea out of the screen to the far left, so that the cursor is not visible */
position: absolute;
opacity: 0;
left: -9999em;
-17
View File
@@ -1,17 +0,0 @@
version: "3"
services:
web:
image: xtermjs/xterm.js:latest
build: .
volumes:
- ./:/usr/src/app
ports:
- ${XTERMJS_PORT:-3000}:3000
command: ["npm", "start"]
watch:
build: .
volumes:
- ./:/usr/src/app
command: ["npm", "run", "watch"]
+18 -18
View File
@@ -1,7 +1,7 @@
{
"name": "xterm",
"description": "Full xterm terminal, in your browser",
"version": "4.7.0",
"version": "4.9.0",
"main": "lib/xterm.js",
"style": "css/xterm.css",
"types": "typings/xterm.d.ts",
@@ -36,37 +36,37 @@
"vtfeatures": "node bin/extract_vtfeatures.js src/**/*.ts src/*.ts"
},
"devDependencies": {
"@types/chai": "^4.2.11",
"@types/chai": "^4.2.12",
"@types/debug": "^4.1.5",
"@types/deep-equal": "^1.0.1",
"@types/glob": "^7.1.2",
"@types/jsdom": "^16.2.3",
"@types/mocha": "^7.0.2",
"@types/glob": "^7.1.3",
"@types/jsdom": "^16.2.4",
"@types/mocha": "^8.0.3",
"@types/node": "^10.17.17",
"@types/utf8": "^2.1.6",
"@types/webpack": "^4.41.17",
"@types/ws": "^7.2.5",
"@typescript-eslint/eslint-plugin": "^2.34.0",
"@typescript-eslint/parser": "^2.34.0",
"@types/webpack": "^4.41.22",
"@types/ws": "^7.2.6",
"@typescript-eslint/eslint-plugin": "^4.0.0",
"@typescript-eslint/parser": "^3.10.1",
"chai": "^4.2.0",
"deep-equal": "^2.0.3",
"eslint": "^6.8.0",
"eslint": "^7.8.1",
"express": "^4.17.1",
"express-ws": "^4.0.0",
"glob": "^7.0.5",
"jsdom": "^16.2.2",
"mocha": "^8.0.1",
"jsdom": "^16.4.0",
"mocha": "^8.1.3",
"mustache": "^4.0.1",
"node-pty": "^0.9.0",
"nyc": "^15.1.0",
"playwright-core": "^0.11.1",
"source-map-loader": "^1.0.0",
"ts-loader": "^7.0.5",
"typescript": "3.9",
"source-map-loader": "^1.1.0",
"ts-loader": "^8.0.3",
"typescript": "4.0",
"utf8": "^3.0.0",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.11",
"ws": "^7.3.0",
"webpack": "^4.44.1",
"webpack-cli": "^3.3.12",
"ws": "^7.3.1",
"xterm-benchmark": "^0.1.3"
}
}
+1 -1
View File
@@ -57,7 +57,7 @@ export class AccessibilityManager extends Disposable {
this._rowContainer = document.createElement('div');
this._rowContainer.classList.add('xterm-accessibility-tree');
this._rowContainer.setAttribute('role', 'list');
this._rowContainer.setAttribute('role', 'document');
this._rowElements = [];
for (let i = 0; i < this._terminal.rows; i++) {
this._rowElements[i] = this._createAccessibilityTreeNode();
-12
View File
@@ -70,7 +70,6 @@ export function moveTextAreaUnderMouseCursor(ev: MouseEvent, textarea: HTMLTextA
const top = ev.clientY - pos.top - 10;
// Bring textarea at the cursor position
textarea.style.position = 'absolute';
textarea.style.width = '20px';
textarea.style.height = '20px';
textarea.style.left = `${left}px`;
@@ -78,17 +77,6 @@ export function moveTextAreaUnderMouseCursor(ev: MouseEvent, textarea: HTMLTextA
textarea.style.zIndex = '1000';
textarea.focus();
// Reset the terminal textarea's styling
// Timeout needs to be long enough for click event to be handled.
setTimeout(() => {
textarea.style.position = '';
textarea.style.width = '';
textarea.style.height = '';
textarea.style.left = '';
textarea.style.top = '';
textarea.style.zIndex = '';
}, 200);
}
/**
+2 -2
View File
@@ -59,7 +59,7 @@ describe('Linkifier', () => {
bufferService.buffer.lines.push(stringToRow(text));
}
function assertLinkifiesRow(rowText: string, linkMatcherRegex: RegExp, links: {x: number, length: number}[], done: MochaDone): void {
function assertLinkifiesRow(rowText: string, linkMatcherRegex: RegExp, links: {x: number, length: number}[], done: Mocha.Done): void {
addRow(rowText);
linkifier.registerLinkMatcher(linkMatcherRegex, () => {});
linkifier.linkifyRows();
@@ -76,7 +76,7 @@ describe('Linkifier', () => {
}, 0);
}
function assertLinkifiesMultiLineLink(rowText: string, linkMatcherRegex: RegExp, links: {x1: number, y1: number, x2: number, y2: number}[], done: MochaDone): void {
function assertLinkifiesMultiLineLink(rowText: string, linkMatcherRegex: RegExp, links: {x1: number, y1: number, x2: number, y2: number}[], done: Mocha.Done): void {
addRow(rowText);
linkifier.registerLinkMatcher(linkMatcherRegex, () => {});
linkifier.linkifyRows();
+7
View File
@@ -125,6 +125,13 @@ export class Linkifier2 extends Disposable implements ILinkifier2 {
private _askForLink(position: IBufferCellPosition, useLineCache: boolean): void {
if (!this._activeProviderReplies || !useLineCache) {
this._activeProviderReplies?.forEach(reply => {
reply?.forEach(linkWithState => {
if (linkWithState.link.dispose) {
linkWithState.link.dispose();
}
});
});
this._activeProviderReplies = new Map();
this._activeLine = position.y;
}
+1 -1
View File
@@ -1042,7 +1042,7 @@ describe('Terminal', () => {
linkifier.attachToDom({} as any, mouseZoneManager);
});
function assertLinkifiesInTerminal(rowText: string, linkMatcherRegex: RegExp, links: {x1: number, y1: number, x2: number, y2: number}[], done: MochaDone): void {
function assertLinkifiesInTerminal(rowText: string, linkMatcherRegex: RegExp, links: {x1: number, y1: number, x2: number, y2: number}[], done: Mocha.Done): void {
terminal.writeSync(rowText);
linkifier.registerLinkMatcher(linkMatcherRegex, () => {});
linkifier.linkifyRows();
+25 -3
View File
@@ -281,6 +281,25 @@ export class Terminal extends CoreTerminal implements ITerminal {
this._onBlur.fire();
}
private _syncTextArea(): void {
if (!this.textarea || !this.buffer.isCursorInViewport || this._compositionHelper!.isComposing) {
return;
}
const cellHeight = Math.ceil(this._charSizeService!.height * this.optionsService.options.lineHeight);
const cursorTop = this._bufferService.buffer.y * cellHeight;
const cursorLeft = this._bufferService.buffer.x * this._charSizeService!.width;
// Sync the textarea to the exact position of the composition view so the IME knows where the
// text is.
this.textarea.style.left = cursorLeft + 'px';
this.textarea.style.top = cursorTop + 'px';
this.textarea.style.width = this._charSizeService!.width + 'px';
this.textarea.style.height = cellHeight + 'px';
this.textarea.style.lineHeight = cellHeight + 'px';
this.textarea.style.zIndex = '-5';
}
/**
* Initialize default behavior
*/
@@ -436,7 +455,10 @@ export class Terminal extends CoreTerminal implements ITerminal {
this.register(this._inputHandler.onRequestSyncScrollBar(() => this.viewport!.syncScrollArea()));
this.register(this.viewport);
this.register(this.onCursorMove(() => this._renderService!.onCursorMove()));
this.register(this.onCursorMove(() => {
this._renderService!.onCursorMove();
this._syncTextArea();
}));
this.register(this.onResize(() => this._renderService!.onResize(this.cols, this.rows)));
this.register(this.onBlur(() => this._renderService!.onBlur()));
this.register(this.onFocus(() => this._renderService!.onFocus()));
@@ -756,7 +778,7 @@ export class Terminal extends CoreTerminal implements ITerminal {
if (!this.viewport!.onWheel(ev)) {
return this.cancel(ev);
}
}, { passive: true }));
}, { passive: false }));
this.register(addDisposableDomListener(el, 'touchstart', (ev: TouchEvent) => {
if (this._coreMouseService.areMouseEventsActive) return;
@@ -769,7 +791,7 @@ export class Terminal extends CoreTerminal implements ITerminal {
if (!this.viewport!.onTouchMove(ev)) {
return this.cancel(ev);
}
}, { passive: true }));
}, { passive: false }));
}
+3
View File
@@ -309,6 +309,9 @@ export class MockViewport implements IViewport {
}
export class MockCompositionHelper implements ICompositionHelper {
public get isComposing(): boolean {
return false;
}
public compositionstart(): void {
throw new Error('Method not implemented.');
}
+2
View File
@@ -87,6 +87,7 @@ export type CustomKeyEventHandler = (event: KeyboardEvent) => boolean;
export type LineData = CharData[];
export interface ICompositionHelper {
readonly isComposing: boolean;
compositionstart(): void;
compositionupdate(ev: CompositionEvent): void;
compositionend(): void;
@@ -274,6 +275,7 @@ interface ILink {
activate(event: MouseEvent, text: string): void;
hover?(event: MouseEvent, text: string): void;
leave?(event: MouseEvent, text: string): void;
dispose?(): void;
}
interface ILinkDecorations {
+1 -10
View File
@@ -22,6 +22,7 @@ export class CompositionHelper {
* IME. This variable determines whether the compositionText should be displayed on the UI.
*/
private _isComposing: boolean;
public get isComposing(): boolean { return this._isComposing; }
/**
* The position within the input textarea's value of the current composition.
@@ -118,7 +119,6 @@ export class CompositionHelper {
private _finalizeComposition(waitForPropagation: boolean): void {
this._compositionView.classList.remove('active');
this._isComposing = false;
this._clearTextareaPosition();
if (!waitForPropagation) {
// Cancel any delayed composition send requests and send the input immediately.
@@ -218,13 +218,4 @@ export class CompositionHelper {
setTimeout(() => this.updateCompositionElements(true), 0);
}
}
/**
* Clears the textarea's position so that the cursor does not blink on IE.
* @private
*/
private _clearTextareaPosition(): void {
this._textarea.style.left = '';
this._textarea.style.top = '';
}
}
+4 -3
View File
@@ -3,7 +3,7 @@
* @license MIT
*/
import { Terminal as ITerminalApi, ITerminalOptions, IMarker, IDisposable, ILinkMatcherOptions, ITheme, ILocalizableStrings, ITerminalAddon, ISelectionPosition, IBuffer as IBufferApi, IBufferNamespace as IBufferNamespaceApi, IBufferLine as IBufferLineApi, IBufferCell as IBufferCellApi, IParser, IFunctionIdentifier, ILinkProvider, IUnicodeHandling, IUnicodeVersionProvider } from 'xterm';
import { Terminal as ITerminalApi, ITerminalOptions, IMarker, IDisposable, ILinkMatcherOptions, ITheme, ILocalizableStrings, ITerminalAddon, ISelectionPosition, IBuffer as IBufferApi, IBufferNamespace as IBufferNamespaceApi, IBufferLine as IBufferLineApi, IBufferCell as IBufferCellApi, IParser, IFunctionIdentifier, ILinkProvider, IUnicodeHandling, IUnicodeVersionProvider, FontWeight } from 'xterm';
import { ITerminal } from 'browser/Types';
import { IBufferLine, ICellData } from 'common/Types';
import { IBuffer, IBufferSet } from 'common/buffer/Types';
@@ -169,15 +169,16 @@ export class Terminal implements ITerminalApi {
public paste(data: string): void {
this._core.paste(data);
}
public getOption(key: 'bellSound' | 'bellStyle' | 'cursorStyle' | 'fontFamily' | 'fontWeight' | 'fontWeightBold' | 'logLevel' | 'rendererType' | 'termName' | 'wordSeparator'): string;
public getOption(key: 'bellSound' | 'bellStyle' | 'cursorStyle' | 'fontFamily' | 'logLevel' | 'rendererType' | 'termName' | 'wordSeparator'): string;
public getOption(key: 'allowTransparency' | 'cancelEvents' | 'convertEol' | 'cursorBlink' | 'disableStdin' | 'macOptionIsMeta' | 'rightClickSelectsWord' | 'popOnBell' | 'visualBell'): boolean;
public getOption(key: 'cols' | 'fontSize' | 'letterSpacing' | 'lineHeight' | 'rows' | 'tabStopWidth' | 'scrollback'): number;
public getOption(key: 'fontWeight' | 'fontWeightBold'): FontWeight;
public getOption(key: string): any;
public getOption(key: any): any {
return this._core.optionsService.getOption(key);
}
public setOption(key: 'bellSound' | 'fontFamily' | 'termName' | 'wordSeparator', value: string): void;
public setOption(key: 'fontWeight' | 'fontWeightBold', value: 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900'): void;
public setOption(key: 'fontWeight' | 'fontWeightBold', value: 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | number): void;
public setOption(key: 'logLevel', value: 'debug' | 'info' | 'warn' | 'error' | 'off'): void;
public setOption(key: 'bellStyle', value: 'none' | 'visual' | 'sound' | 'both'): void;
public setOption(key: 'cursorStyle', value: 'block' | 'underline' | 'bar'): void;
+2 -1
View File
@@ -75,6 +75,7 @@ export class SelectionRenderLayer extends BaseRenderLayer {
// No need to draw the selection
if (viewportCappedStartRow >= this._bufferService.rows || viewportCappedEndRow < 0) {
this._state.ydisp = this._bufferService.buffer.ydisp;
return;
}
@@ -88,7 +89,7 @@ export class SelectionRenderLayer extends BaseRenderLayer {
} else {
// Draw first row
const startCol = viewportStartRow === viewportCappedStartRow ? start[0] : 0;
const startRowEndCol = viewportCappedStartRow === viewportCappedEndRow ? end[0] : this._bufferService.cols;
const startRowEndCol = viewportCappedStartRow === viewportEndRow ? end[0] : this._bufferService.cols;
this._fillCells(startCol, viewportCappedStartRow, startRowEndCol - startCol, 1);
// Draw middle rows
+1 -1
View File
@@ -26,7 +26,7 @@ export abstract class BaseCharAtlas implements IDisposable {
* Perform any work needed to warm the cache before it can be used. Used by the default
* implementation of warmUp(), and will only be called once.
*/
protected _doWarmUp(): void { }
private _doWarmUp(): void { }
/**
* Called when we start drawing a new frame.
+1 -1
View File
@@ -306,7 +306,7 @@ export class DomRenderer extends Disposable implements IRenderer {
} else {
// Draw first row
const startCol = viewportStartRow === viewportCappedStartRow ? start[0] : 0;
const endCol = viewportCappedStartRow === viewportCappedEndRow ? end[0] : this._bufferService.cols;
const endCol = viewportCappedStartRow === viewportEndRow ? end[0] : this._bufferService.cols;
documentFragment.appendChild(this._createSelectionElement(viewportCappedStartRow, startCol, endCol));
// Draw middle rows
const middleRowsCount = viewportCappedEndRow - viewportCappedStartRow - 1;
+1 -1
View File
@@ -86,7 +86,7 @@ export class RenderService extends Disposable implements IRenderService {
}
private _onIntersectionChange(entry: IntersectionObserverEntry): void {
this._isPaused = entry.intersectionRatio === 0;
this._isPaused = entry.isIntersecting === undefined ? (entry.intersectionRatio === 0) : !entry.isIntersecting;
if (!this._isPaused && this._needsFullRefresh) {
this.refreshRows(0, this._rowCount - 1);
this._needsFullRefresh = false;
@@ -0,0 +1,60 @@
/**
* Copyright (c) 2020 The xterm.js authors. All rights reserved.
* @license MIT
*/
import { assert } from 'chai';
import { OptionsService, DEFAULT_OPTIONS } from 'common/services/OptionsService';
describe('OptionsService', () => {
describe('constructor', () => {
const originalError = console.error;
beforeEach(() => {
console.error = () => {};
});
afterEach(() => {
console.error = originalError;
});
it('uses default value if invalid constructor option value passed', () => {
assert.equal(new OptionsService({tabStopWidth: 0}).getOption('tabStopWidth'), DEFAULT_OPTIONS.tabStopWidth);
});
});
describe('setOption', () => {
let service: OptionsService;
beforeEach(() => {
service = new OptionsService({});
});
it('applies valid fontWeight option values', () => {
service.setOption('fontWeight', 'bold');
assert.equal(service.getOption('fontWeight'), 'bold', '"bold" keyword value should be applied');
service.setOption('fontWeight', 'normal');
assert.equal(service.getOption('fontWeight'), 'normal', '"normal" keyword value should be applied');
service.setOption('fontWeight', '600');
assert.equal(service.getOption('fontWeight'), '600', 'String numeric values should be applied');
service.setOption('fontWeight', 350);
assert.equal(service.getOption('fontWeight'), 350, 'Values between 1 and 1000 should be applied as is');
service.setOption('fontWeight', 1);
assert.equal(service.getOption('fontWeight'), 1, 'Range should include minimum value: 1');
service.setOption('fontWeight', 1000);
assert.equal(service.getOption('fontWeight'), 1000, 'Range should include maximum value: 1000');
});
it('normalizes invalid fontWeight option values', () => {
service.setOption('fontWeight', 350);
assert.doesNotThrow(() => service.setOption('fontWeight', 10000), 'fontWeight should be normalized instead of throwing');
assert.equal(service.getOption('fontWeight'), DEFAULT_OPTIONS.fontWeight, 'Values greater than 1000 should be reset to default');
service.setOption('fontWeight', 350);
service.setOption('fontWeight', -10);
assert.equal(service.getOption('fontWeight'), DEFAULT_OPTIONS.fontWeight, 'Values less than 1 should be reset to default');
service.setOption('fontWeight', 350);
service.setOption('fontWeight', 'bold700');
assert.equal(service.getOption('fontWeight'), DEFAULT_OPTIONS.fontWeight, 'Wrong string literals should be reset to default');
});
});
});
+17 -5
View File
@@ -3,7 +3,7 @@
* @license MIT
*/
import { IOptionsService, ITerminalOptions, IPartialTerminalOptions } from 'common/services/Services';
import { IOptionsService, ITerminalOptions, IPartialTerminalOptions, FontWeight } from 'common/services/Services';
import { EventEmitter, IEvent } from 'common/EventEmitter';
import { isMac } from 'common/Platform';
import { clone } from 'common/Clone';
@@ -56,6 +56,8 @@ export const DEFAULT_OPTIONS: ITerminalOptions = Object.freeze({
cancelEvents: false
});
const FONT_WEIGHT_OPTIONS: Extract<FontWeight, string>[] = ['normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900'];
/**
* The set of options that only have an effect when set in the Terminal constructor.
*/
@@ -73,8 +75,12 @@ export class OptionsService implements IOptionsService {
this.options = clone(DEFAULT_OPTIONS);
for (const k of Object.keys(options)) {
if (k in this.options) {
const newValue = options[k as keyof IPartialTerminalOptions] as any;
this.options[k] = newValue;
try {
const newValue = options[k as keyof IPartialTerminalOptions] as any;
this.options[k] = this._sanitizeAndValidateOption(k, newValue);
} catch (e) {
console.error(e);
}
}
}
}
@@ -105,14 +111,20 @@ export class OptionsService implements IOptionsService {
switch (key) {
case 'bellStyle':
case 'cursorStyle':
case 'fontWeight':
case 'fontWeightBold':
case 'rendererType':
case 'wordSeparator':
if (!value) {
value = DEFAULT_OPTIONS[key];
}
break;
case 'fontWeight':
case 'fontWeightBold':
if (typeof value === 'number' && 1 <= value && value <= 1000) {
// already valid numeric value
break;
}
value = FONT_WEIGHT_OPTIONS.indexOf(value) !== -1 ? value : DEFAULT_OPTIONS[key];
break;
case 'cursorWidth':
value = Math.floor(value);
// Fall through for bounds check
+1 -1
View File
@@ -179,7 +179,7 @@ export interface IOptionsService {
getOption<T>(key: string): T | undefined;
}
export type FontWeight = 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900';
export type FontWeight = 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | number;
export type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'off';
export type RendererType = 'dom' | 'canvas';
+51
View File
@@ -755,6 +755,57 @@ describe('API Integration Tests', function(): void {
await pollFor(page, `window.calls`, ['provide 1', 'hover 1-3', 'leave 1-3', 'hover 5-7', 'leave 5-7', 'provide 2', 'provide 1', 'hover 9-11']);
await page.evaluate(`window.disposable.dispose()`);
});
it('should dispose links when hovering away', async () => {
await openTerminal(page, { rendererType: 'dom' });
await writeSync(page, 'foo bar baz');
// Wait for renderer to catch up as links are cleared on render
await pollFor(page, `document.querySelector('.xterm-rows').textContent`, 'foo bar baz ');
await page.evaluate(`
window.calls = [];
window.disposable = window.term.registerLinkProvider({
provideLinks: (position, cb) => {
window.calls.push('provide ' + position);
if (position === 1) {
cb([{
range: { start: { x: 1, y: 1 }, end: { x: 3, y: 1 } },
text: '',
activate: () => window.calls.push('activate'),
dispose: () => window.calls.push('dispose 1-3'),
hover: () => window.calls.push('hover 1-3'),
leave: () => window.calls.push('leave 1-3')
}, {
range: { start: { x: 5, y: 1 }, end: { x: 7, y: 1 } },
text: '',
activate: () => window.calls.push('activate'),
dispose: () => window.calls.push('dispose 5-7'),
hover: () => window.calls.push('hover 5-7'),
leave: () => window.calls.push('leave 5-7')
}, {
range: { start: { x: 9, y: 1 }, end: { x: 11, y: 1 } },
text: '',
activate: () => window.calls.push('activate'),
dispose: () => window.calls.push('dispose 9-11'),
hover: () => window.calls.push('hover 9-11'),
leave: () => window.calls.push('leave 9-11')
}]);
}
}
});
`);
const dims = await getDimensions();
await moveMouseCell(page, dims, 2, 1);
await pollFor(page, `window.calls`, ['provide 1', 'hover 1-3']);
await moveMouseCell(page, dims, 6, 1);
await pollFor(page, `window.calls`, ['provide 1', 'hover 1-3', 'leave 1-3', 'hover 5-7']);
await moveMouseCell(page, dims, 6, 2);
await pollFor(page, `window.calls`, ['provide 1', 'hover 1-3', 'leave 1-3', 'hover 5-7', 'leave 5-7', 'dispose 1-3', 'dispose 5-7', 'dispose 9-11', 'provide 2']);
await moveMouseCell(page, dims, 10, 1);
await pollFor(page, `window.calls`, ['provide 1', 'hover 1-3', 'leave 1-3', 'hover 5-7', 'leave 5-7', 'dispose 1-3', 'dispose 5-7', 'dispose 9-11', 'provide 2', 'provide 1', 'hover 9-11']);
await moveMouseCell(page, dims, 10, 2);
await pollFor(page, `window.calls`, ['provide 1', 'hover 1-3', 'leave 1-3', 'hover 5-7', 'leave 5-7', 'dispose 1-3', 'dispose 5-7', 'dispose 9-11', 'provide 2', 'provide 1', 'hover 9-11', 'leave 9-11', 'dispose 1-3', 'dispose 5-7', 'dispose 9-11', 'provide 2']);
await page.evaluate(`window.disposable.dispose()`);
});
});
});
+14 -4
View File
@@ -11,9 +11,9 @@
declare module 'xterm' {
/**
* A string representing text font weight.
* A string or number representing text font weight.
*/
export type FontWeight = 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900';
export type FontWeight = 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | number;
/**
* A string representing log level.
@@ -933,7 +933,7 @@ declare module 'xterm' {
* Retrieves an option's value from the terminal.
* @param key The option key.
*/
getOption(key: 'bellSound' | 'bellStyle' | 'cursorStyle' | 'fontFamily' | 'fontWeight' | 'fontWeightBold' | 'logLevel' | 'rendererType' | 'termName' | 'wordSeparator'): string;
getOption(key: 'bellSound' | 'bellStyle' | 'cursorStyle' | 'fontFamily' | 'logLevel' | 'rendererType' | 'termName' | 'wordSeparator'): string;
/**
* Retrieves an option's value from the terminal.
* @param key The option key.
@@ -944,6 +944,11 @@ declare module 'xterm' {
* @param key The option key.
*/
getOption(key: 'cols' | 'fontSize' | 'letterSpacing' | 'lineHeight' | 'rows' | 'tabStopWidth' | 'scrollback'): number;
/**
* Retrieves an option's value from the terminal.
* @param key The option key.
*/
getOption(key: 'fontWeight' | 'fontWeightBold'): FontWeight;
/**
* Retrieves an option's value from the terminal.
* @param key The option key.
@@ -961,7 +966,7 @@ declare module 'xterm' {
* @param key The option key.
* @param value The option value.
*/
setOption(key: 'fontWeight' | 'fontWeightBold', value: null | 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900'): void;
setOption(key: 'fontWeight' | 'fontWeightBold', value: null | 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | number): void;
/**
* Sets an option on the terminal.
* @param key The option key.
@@ -1158,6 +1163,11 @@ declare module 'xterm' {
* @param text The text of the link.
*/
leave?(event: MouseEvent, text: string): void;
/**
* Called when the link is released and no longer used by xterm.js.
*/
dispose?(): void;
}
/**
+698 -616
View File
File diff suppressed because it is too large Load Diff