Compare commits

...
661 Commits
Author SHA1 Message Date
Daniel Imms 4b29b8a9c6 Merge pull request #3237 from Tyriar/r4_10
v4.10.0
2021-01-29 09:25:08 -08:00
Daniel Imms c994c67dd9 v4.10.0 2021-01-29 09:14:31 -08:00
jerch 28bcd88fb0 Merge pull request #3229 from jerch/replace_expect_testing
replace expect testing with assert
2021-01-23 19:07:26 +01:00
jerch bee4b0ff06 Merge branch 'master' into replace_expect_testing 2021-01-23 19:00:39 +01:00
Daniel Imms 559b3c1392 Merge pull request #3228 from nishant-d/master
added Devtron's usages
2021-01-23 09:12:47 -08:00
Jörg Breitbart d3c9f70bec replace expect testing with assert 2021-01-23 17:09:43 +01:00
jerch ff74caf50d Merge pull request #3200 from kena0ki/issue3032
Filter U+FEFF (BOM) when decoding input data
2021-01-23 13:03:57 +01:00
Ken Aoki 3d941f2fdf add BOM skip logic 2021-01-23 11:42:16 +00:00
Ken Aoki 93aab95f7b filter U+FEFF (BOM) when decoding input data 2021-01-23 04:39:57 +00:00
nishant-d db8e449a8a added Devtron's usages 2021-01-23 09:35:43 +05:30
Daniel Imms 4da5d557a5 Merge pull request #3227 from marvinthepa/3225_onSelectionChange_on_clear
Store old selection when firing onSelectionChange
2021-01-22 08:37:36 -08:00
jerch a1dc85ee57 Merge pull request #3223 from jerch/simplify_handler_interface
cleanup parser handler interface
2021-01-22 17:17:48 +01:00
Martin Sander 554b4a8224 Store old selection when firing onSelectionChange 2021-01-22 16:41:57 +01:00
Jörg Breitbart 3f659a15da minor fixes:
- better perf for short DCS without params (8 times faster)
- test perf for class and string based interfaces of OSC and DCS
  separately
- undo wrong commit on parser
2021-01-21 15:58:03 +01:00
Jörg Breitbart dd5b295219 release active handler list on dispose in DcsHandler 2021-01-21 13:08:01 +01:00
Jörg Breitbart 9d0200252b fix possible OSC handler bug skipping the fallback handler 2021-01-21 13:05:57 +01:00
Jörg Breitbart d67faff92a simplify return eval 2021-01-21 11:38:47 +01:00
Jörg Breitbart c50c134e25 simplify parser handler interface:
- remove setHandler
- apply boolean return to ESC|CSI|OSC|DCS handlers
  (rewrite empty return defaulting to true)
- rename addHandler to registerHandler
2021-01-20 23:03:55 +01:00
Daniel Imms 74ea558bfc Merge pull request #3219 from marvinthepa/3216_onSelectionChange_on_right_click
fire onSelectionChange on right click select
2021-01-19 10:24:55 -08:00
Martin Sander c6f93701f5 fire onSelectionChange on right click select
fixes #3216.
2021-01-16 10:14:11 +01:00
Daniel Imms 8a4772ca39 Merge pull request #3215 from marvinthepa/3193_onSelectionChange_on_clear
fire onSelectionChange on empty selection
2021-01-15 10:17:21 -08:00
Daniel ImmsandMegan Rogge 66c80d8b78 Simplify checks
Co-authored-by: Megan Rogge <merogge@microsoft.com>
2021-01-15 09:39:34 -08:00
Martin Sander 0cb38cfdcb fire onSelectionChange on empty selection
Fire the onSelectionChange event when a selection is cleared by
single-clicking somewhere inside the terminal area.

fixes #3193.

This also slightly changes the behaviour when re-selecting the same area
in the terminal. Before, this fired onSelectionChange, but it does not
anymore, even when changing the direction of the selection.
2021-01-14 23:08:34 +01:00
Daniel Imms c669c3fba7 Merge pull request #3194 from kena0ki/issue3191
Prevent input characters using IME from being duplicated
2021-01-11 14:28:02 -08:00
Daniel Imms 8860726c68 Merge branch 'master' into issue3191 2021-01-11 09:51:02 -08:00
Daniel Imms f64724f54f Merge pull request #3187 from chenjigeng/fix/select-all
fix shift+cmd+a will Select all
2021-01-11 09:41:14 -08:00
Daniel Imms fd222b58b5 Merge branch 'master' into fix/select-all 2021-01-11 09:29:35 -08:00
Daniel Imms 83ba481e3d Merge pull request #3125 from kena0ki/issue#2734
Fix search addon not expanding selection to left when appropriate
2021-01-11 09:29:18 -08:00
Daniel Imms 7d5bbc341f Merge branch 'master' into issue#2734 2021-01-11 09:20:47 -08:00
Daniel ImmsandMegan Rogge 519e44d30e Clean up, improve comments
Co-authored-by: Megan Rogge <merogge@microsoft.com>
2021-01-11 09:19:53 -08:00
Daniel Imms 3bb2c158fd Merge pull request #3213 from Tyriar/update_yarn
Update yarn.lock for font-finder
2021-01-11 08:53:20 -08:00
Daniel Imms 5ada5f0c0c Update yarn.lock for font-finder
Previous update was likely done using npm, not yarn
2021-01-11 08:31:56 -08:00
Daniel Imms ea1fcc6a5f Merge pull request #3163 from slawekzachcial/add-osc-4
Add support for OSC 4 ; color ; color spec
2021-01-11 07:54:04 -08:00
Daniel Imms 19c14b076b Remove resolved TODO 2021-01-11 07:40:25 -08:00
Slawek Zachcial 676aabc3ed Merge branch 'master' into add-osc-4 2021-01-09 16:57:18 +01:00
Slawek Zachcial 5c33e4008d Make _parseAnsiColorChange available for tests in TestInputHandler 2021-01-09 14:30:24 +01:00
Daniel Imms 772e446192 Merge pull request #3210 from meganrogge/windows-git-bash
Get demo working for git bash on windows
2021-01-08 11:33:34 -08:00
meganroggeandPretaSOFT 66be7797cf Get demo working for git bash on windows
Co-authored-by: Megan Rogge merogge@microsoft.com
Co-authored-by: Daniel Imms daimms@microsoft.com
2021-01-08 11:02:34 -08:00
Daniel Imms 3261c53c08 Merge pull request #3209 from Nokel81/freeze-default-colours
freeze the default ANSI colours const
2021-01-08 07:10:12 -08:00
Sebastian Malton 5bab94730f freeze the default ANSI colours const 2021-01-08 09:46:12 -05:00
Daniel Imms 801aeb8462 Merge pull request #3207 from CyanSalt/commas
Add Commas to the Real-world uses List
2021-01-05 23:27:50 -08:00
Sun Xiaoran cbe5abcf27 Add Commas to the Real-world uses List 2021-01-06 14:10:10 +08:00
Daniel Imms 72dbd43be6 Merge pull request #3204 from meganrogge/master
set this._buffer to new buffer
2021-01-05 10:20:57 -08:00
Daniel ImmsandPretaSOFT 7145130835 Fix onBufferChange event not working after reset
Co-authored-by: Megan Rogge (megan.rogge@microsoft.com)
2021-01-05 09:32:09 -08:00
meganrogge b34289cc44 use reset 2021-01-05 07:10:27 -08:00
meganrogge fe2b1c0d43 set this._buffer to new buffer 2021-01-04 11:32:11 -08:00
Daniel Imms 4de6f1c255 Merge pull request #3203 from meganrogge/master
cache buffer to fix VS Code issue #111562
2021-01-04 10:35:46 -08:00
meganrogge 8baff9bade cache buffer 2021-01-04 08:31:22 -08:00
jerch f8f7e7e4c1 Merge pull request #3188 from UziTech/update-font-finder
fix: update font-finder to v1.1.0
2021-01-02 19:34:40 +01:00
jerch 7523505af1 Merge branch 'master' into update-font-finder 2021-01-02 19:23:35 +01:00
jerch d94b119e9d Merge pull request #3190 from jrieken/joh/trustedTypes
Avoid innerHTML usages
2021-01-02 19:21:55 +01:00
kena0ki 3cab8511e4 Prevent input characters using IME from being duplicated 2020-12-31 22:55:54 +09:00
Slawek Zachcial 7d3f5375a8 Implement OSC 4 for list of colors 2020-12-09 22:30:23 +01:00
Johannes Rieken b2c4ed638b fix bad none-breaking whitespace 2020-12-09 09:08:14 +00:00
Slawek Zachcial 2804bfa8b7 Make safe references to colorManager in _changeAnsiColor 2020-12-07 23:20:10 +01:00
Johannes Rieken 64ac67026a avoid innerHTML usages 2020-12-02 16:25:19 +00:00
Slawek Zachcial 5a74ce2e59 Add Ansi color change positive test 2020-11-30 22:00:04 +01:00
Slawek Zachcial f4a56389cd Fix quotes 2020-11-29 23:22:31 +01:00
Slawek Zachcial 52b64beefc Make InputHandler parseAnsiColorChange private 2020-11-29 16:30:05 +01:00
Tony Brix ec1234e8d8 fix: update font-finder to v1.1.0 2020-11-27 14:19:05 -06:00
condichen@tencent.com b7695d2fd6 fix shift+cmd+a will Select all 2020-11-28 00:56:45 +08:00
Slawek Zachcial 4c6dc45d20 Merge branch 'master' into add-osc-4 2020-11-24 22:54:26 +01:00
Daniel Imms 5cb048094e Merge pull request #3181 from awmottaz/master
Make alt+click behavior configurable
2020-11-24 09:04:21 -08:00
Daniel Imms e3cccd619b Update typings/xterm.d.ts 2020-11-24 09:03:59 -08:00
Tony Mottaz 88f0b91056 add altClickMovesCursor option to Services type 2020-11-22 10:01:02 -06:00
Tony Mottaz 78ddb9feba Add 'altClickMovesCursor' option to getOption/setOption in Terminal 2020-11-22 10:00:41 -06:00
Tony Mottaz f68ff2a455 Check for alt+click option sooner 2020-11-22 10:00:02 -06:00
Tony Mottaz 04e2bdd6ec Make alt+click behavior configurable 2020-11-20 19:50:03 -06:00
Daniel Imms 84fa6be370 Merge pull request #3175 from dsanders11/patch-1
use Array.includes
2020-11-11 12:50:07 -08:00
David Sanders af2f744186 use Array.includes 2020-11-11 09:43:17 -08:00
Daniel Imms 5f4b719444 Merge pull request #3172 from KKoukiou/a11y-fix
Fix a11y violation because of using role='listitem' without role='list' parent
2020-11-10 08:53:45 -08:00
Katerina Koukiou 9616851e52 Fix a11y violation because of using role='listitem' without role='list' parent 2020-11-10 16:36:59 +01:00
Daniel Imms 4645fda126 Merge pull request #3170 from blois/shadow_root
Incorporate shadowRoot in focus calculation.
2020-11-09 16:17:09 -08:00
Pete Blois 057a8f6f1b Incorporate shadowRoot in focus calculation.
This adds a call to getRootNode to get either the Document or the
ShadowRoot to use when calculating whether the textarea has focus.

getRootNode is guarded for older browser compatibility (IE).
2020-11-09 13:12:03 -08:00
Slawek Zachcial e6917d1933 Clarify color spec description 2020-11-08 22:07:24 +01:00
Slawek Zachcial 6535995753 Update OSC 4 description to match #3036 2020-11-08 22:05:25 +01:00
Slawek Zachcial 77ed5ba7ed Add terminal sequence doc 2020-11-08 10:19:12 +01:00
Slawek Zachcial bc86b7804c Use all and not only 16 Ansi colors in CharAtlas config 2020-11-07 21:36:05 +01:00
Slawek Zachcial d5f4ae53c9 Add IAnsiColorChangeEvent related tests 2020-11-07 21:36:05 +01:00
Slawek Zachcial b898e016f3 Add IAnsiColorChangeEvent type 2020-11-07 21:36:05 +01:00
Slawek Zachcial 712f0ae2a7 Merge branch 'master' into add-osc-4 2020-11-05 22:02:48 +01:00
Daniel Imms c553107d23 Merge pull request #3167 from xtermjs/dependabot/npm_and_yarn/webpack-cli-4.2.0
Bump webpack-cli from 4.1.0 to 4.2.0
2020-11-05 08:35:34 -08:00
Slawek Zachcial b127436cc4 Fix TODO comment 2020-11-05 08:51:01 +01:00
dependabot-preview[bot] b61ac11a76 Bump webpack-cli from 4.1.0 to 4.2.0
Bumps [webpack-cli](https://github.com/webpack/webpack-cli) from 4.1.0 to 4.2.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.1.0...webpack-cli@4.2.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-05 07:38:01 +00:00
Slawek Zachcial b22d7f1140 Move color parsing from Terminal to InputHandler 2020-11-04 22:19:55 +01:00
Daniel Imms 925aaf18a1 Merge pull request #3165 from xtermjs/dependabot/npm_and_yarn/webpack-5.4.0
Bump webpack from 5.3.2 to 5.4.0
2020-11-04 06:46:09 -08:00
Daniel Imms 797ed47791 Merge pull request #3164 from xtermjs/dependabot/npm_and_yarn/ts-loader-8.0.8
Bump ts-loader from 8.0.7 to 8.0.8
2020-11-04 06:45:49 -08:00
dependabot-preview[bot] 4128a6e2f1 Bump webpack from 5.3.2 to 5.4.0
Bumps [webpack](https://github.com/webpack/webpack) from 5.3.2 to 5.4.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.3.2...v5.4.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-04 07:28:16 +00:00
dependabot-preview[bot] 69f34be4b8 Bump ts-loader from 8.0.7 to 8.0.8
Bumps [ts-loader](https://github.com/TypeStrong/ts-loader) from 8.0.7 to 8.0.8.
- [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.7...v8.0.8)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-04 07:27:51 +00:00
Slawek Zachcial 1c3da7e2e6 Merge branch 'master' into add-osc-4 2020-11-03 18:57:51 +01:00
Slawek Zachcial 5c7644adc0 Add rudimenatary and not fully working support of OSC 4 2020-11-03 18:36:28 +01:00
Daniel Imms f974010aa3 Merge pull request #3162 from xtermjs/dependabot/npm_and_yarn/mocha-8.2.1
Bump mocha from 8.2.0 to 8.2.1
2020-11-03 06:58:51 -08:00
dependabot-preview[bot] d4d18f741f Bump mocha from 8.2.0 to 8.2.1
Bumps [mocha](https://github.com/mochajs/mocha) from 8.2.0 to 8.2.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.2.0...v8.2.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-03 07:36:13 +00:00
Daniel Imms d97b54b9be Merge pull request #3161 from nasrob/update-to-webpack-5
fixes #3154 upgraded webpack to version 5.3.2
2020-11-02 06:09:21 -08:00
Daniel Imms a7b94fbe1a Revert "Reference tsc/webpack in root dir"
This reverts commit fd6bf6d667.
2020-11-02 05:40:18 -08:00
Daniel Imms 2ab9de91fe Format tsconfig.json 2020-11-02 05:37:31 -08:00
Daniel Imms fd6bf6d667 Reference tsc/webpack in root dir 2020-11-02 05:36:23 -08:00
Daniel Imms 38e81f053f Merge pull request #3133 from coderaiser/lint/putout
Using putout linter on xterm codebase part 2
2020-11-02 05:15:07 -08:00
coderaiser c6f1b456f5 feature: tsconfig: es2017 -> es2016.Array.Include 2020-11-01 09:46:31 +02:00
Nasser Boukehil 8484978ef0 fixes #3154 upgraded webpack to version 5.3.2 with types property in ligatures tsconfig 2020-10-31 21:03:01 +01:00
coderaiser c4919b9a6b feature: tsconfig: es2015 -> es2017 2020-10-31 15:13:12 +02:00
Daniel Imms 02e4db4c82 Merge pull request #3136 from kena0ki/termfit
Fix "term.fit is not a function" error when change padding value in the demo
2020-10-30 12:23:17 -07:00
Daniel Imms 8d9badb588 Merge pull request #3089 from UziTech/rerender-hidden
Render initially hidden terminal when visible
2020-10-30 08:55:29 -07:00
Daniel Imms fc534a1067 Merge pull request #3158 from xtermjs/dependabot/npm_and_yarn/types/jsdom-16.2.5
Bump @types/jsdom from 16.2.4 to 16.2.5
2020-10-29 13:46:58 -07:00
Daniel Imms f68ef19868 Merge pull request #3157 from xtermjs/dependabot/npm_and_yarn/types/webpack-4.41.24
Bump @types/webpack from 4.41.23 to 4.41.24
2020-10-29 13:46:46 -07:00
dependabot-preview[bot] 0a2e40502f Bump @types/jsdom from 16.2.4 to 16.2.5
Bumps [@types/jsdom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jsdom) from 16.2.4 to 16.2.5.
- [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-10-29 20:34:06 +00:00
dependabot-preview[bot] e843a2f61e Bump @types/webpack from 4.41.23 to 4.41.24
Bumps [@types/webpack](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/webpack) from 4.41.23 to 4.41.24.
- [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-10-29 20:33:16 +00:00
Daniel Imms d95a633f16 Merge pull request #3149 from xtermjs/dependabot/npm_and_yarn/playwright-1.5.2
Bump playwright from 1.5.1 to 1.5.2
2020-10-28 19:16:51 -07:00
Daniel Imms 6f41aad2ef Merge pull request #3153 from xtermjs/dependabot/npm_and_yarn/types/ws-7.2.9
Bump @types/ws from 7.2.8 to 7.2.9
2020-10-28 17:00:10 -07:00
dependabot-preview[bot] e76cbd9c3f Bump @types/ws from 7.2.8 to 7.2.9
Bumps [@types/ws](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/ws) from 7.2.8 to 7.2.9.
- [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-10-28 23:50:58 +00:00
dependabot-preview[bot] 0c8b299996 Bump playwright from 1.5.1 to 1.5.2
Bumps [playwright](https://github.com/Microsoft/playwright) from 1.5.1 to 1.5.2.
- [Release notes](https://github.com/Microsoft/playwright/releases)
- [Commits](https://github.com/Microsoft/playwright/compare/v1.5.1...v1.5.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-28 23:50:40 +00:00
Daniel Imms 86420d2535 Merge pull request #3151 from xtermjs/dependabot/npm_and_yarn/types/ws-7.2.8
Bump @types/ws from 7.2.7 to 7.2.8
2020-10-28 06:22:40 -07:00
Daniel Imms 9e4dcdaf91 Merge pull request #3147 from xtermjs/dependabot/npm_and_yarn/source-map-loader-1.1.2
Bump source-map-loader from 1.1.1 to 1.1.2
2020-10-28 06:14:05 -07:00
Daniel Imms 45e7bf274a Merge pull request #3148 from xtermjs/dependabot/npm_and_yarn/eslint-7.12.1
Bump eslint from 7.12.0 to 7.12.1
2020-10-28 06:13:48 -07:00
Daniel Imms 62cf413d54 Merge pull request #3150 from xtermjs/dependabot/npm_and_yarn/typescript-4.0.5
Bump typescript from 4.0.3 to 4.0.5
2020-10-28 06:12:57 -07:00
dependabot-preview[bot] 3e0a270891 Bump @types/ws from 7.2.7 to 7.2.8
Bumps [@types/ws](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/ws) from 7.2.7 to 7.2.8.
- [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-10-28 13:01:39 +00:00
dependabot-preview[bot] 22d79eef26 Bump typescript from 4.0.3 to 4.0.5
Bumps [typescript](https://github.com/Microsoft/TypeScript) from 4.0.3 to 4.0.5.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/compare/v4.0.3...v4.0.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-28 13:01:11 +00:00
dependabot-preview[bot] 31d806afce Bump eslint from 7.12.0 to 7.12.1
Bumps [eslint](https://github.com/eslint/eslint) from 7.12.0 to 7.12.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.12.0...v7.12.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-28 13:00:07 +00:00
dependabot-preview[bot] 1e9ca83120 Bump source-map-loader from 1.1.1 to 1.1.2
Bumps [source-map-loader](https://github.com/webpack-contrib/source-map-loader) from 1.1.1 to 1.1.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.1.1...v1.1.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-28 12:59:33 +00:00
Tony Brix 3d9a33bb69 move measure before refreshRows 2020-10-25 10:59:30 -05:00
Tony Brix ea989ed691 Merge branch 'master' into rerender-hidden 2020-10-25 09:58:09 -05:00
jerch 8e151ee6ef Merge pull request #3143 from xtermjs/dependabot/npm_and_yarn/ts-loader-8.0.7
Bump ts-loader from 8.0.6 to 8.0.7
2020-10-25 12:00:21 +01:00
jerch dc904b27a2 Merge branch 'master' into dependabot/npm_and_yarn/ts-loader-8.0.7 2020-10-25 11:49:09 +01:00
jerch 4de539a1ff Merge pull request #3142 from xtermjs/dependabot/npm_and_yarn/eslint-7.12.0
Bump eslint from 7.11.0 to 7.12.0
2020-10-25 11:45:02 +01:00
dependabot-preview[bot] 913de3158e Bump ts-loader from 8.0.6 to 8.0.7
Bumps [ts-loader](https://github.com/TypeStrong/ts-loader) from 8.0.6 to 8.0.7.
- [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.6...v8.0.7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-25 09:14:57 +00:00
dependabot-preview[bot] 049ca653ed Bump eslint from 7.11.0 to 7.12.0
Bumps [eslint](https://github.com/eslint/eslint) from 7.11.0 to 7.12.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.11.0...v7.12.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-25 08:59:56 +00:00
coderaiser 246d137c2c src: lint using putout 2020-10-25 10:05:41 +02:00
coderaiser 99b1a7a49b bin: lint using putout 2020-10-25 01:13:40 +03:00
jerch 9fa068f574 Merge pull request #3109 from mmis1000/fix/addon-serialize-benchmark
Fix/addon serialize benchmark
2020-10-24 23:43:59 +02:00
jerch 91337d7e57 Merge branch 'master' into fix/addon-serialize-benchmark 2020-10-24 14:57:13 +02:00
jerch cb555d5297 Merge branch 'master' into rerender-hidden 2020-10-24 14:02:17 +02:00
jerch 50dd3cb841 Merge pull request #3114 from jerch/fix_3108
marker fixes
2020-10-24 14:01:18 +02:00
jerch b7750cbf91 Merge branch 'master' into fix_3108 2020-10-24 13:44:19 +02:00
jerch dde47269de Merge branch 'master' into rerender-hidden 2020-10-24 13:43:59 +02:00
jerch bc3f2a12c0 Merge pull request #3132 from xtermjs/dependabot/npm_and_yarn/mocha-8.2.0
Bump mocha from 8.1.3 to 8.2.0
2020-10-24 13:42:06 +02:00
jerch bdb112b23c Merge branch 'master' into dependabot/npm_and_yarn/mocha-8.2.0 2020-10-24 13:32:29 +02:00
jerch 214ccd14ac Merge pull request #3139 from xtermjs/dependabot/npm_and_yarn/ts-loader-8.0.6
Bump ts-loader from 8.0.4 to 8.0.6
2020-10-24 13:30:12 +02:00
jerch e5f3820285 Merge branch 'master' into dependabot/npm_and_yarn/ts-loader-8.0.6 2020-10-24 13:21:37 +02:00
jerch f75b4cfa93 Merge pull request #3140 from xtermjs/dependabot/npm_and_yarn/types/webpack-4.41.23
Bump @types/webpack from 4.41.22 to 4.41.23
2020-10-24 13:21:01 +02:00
jerch f5d651dda1 Merge branch 'master' into dependabot/npm_and_yarn/types/webpack-4.41.23 2020-10-24 13:14:21 +02:00
jerch a90254e778 Merge branch 'master' into dependabot/npm_and_yarn/ts-loader-8.0.6 2020-10-24 13:03:05 +02:00
jerch a6bcfcfba4 Merge pull request #3135 from xtermjs/dependabot/npm_and_yarn/webpack-cli-4.1.0
Bump webpack-cli from 3.3.12 to 4.1.0
2020-10-24 13:01:34 +02:00
jerch 78ae1d09f7 Merge branch 'master' into dependabot/npm_and_yarn/webpack-cli-4.1.0 2020-10-24 12:51:21 +02:00
jerch 1132da8563 Merge pull request #3131 from xtermjs/dependabot/npm_and_yarn/types/chai-4.2.14
Bump @types/chai from 4.2.12 to 4.2.14
2020-10-24 12:49:52 +02:00
jerch 199b9ceb6d Merge branch 'master' into dependabot/npm_and_yarn/types/chai-4.2.14 2020-10-24 12:40:02 +02:00
jerch 8e41d22f8d Merge pull request #3128 from xtermjs/dependabot/npm_and_yarn/playwright-1.5.1
Bump playwright from 1.4.2 to 1.5.1
2020-10-24 12:39:17 +02:00
jerch 57bd61697c Merge branch 'master' into dependabot/npm_and_yarn/playwright-1.5.1 2020-10-24 12:32:16 +02:00
jerch 3e8b8dc6ef Merge pull request #3122 from xtermjs/dependabot/npm_and_yarn/eslint-7.11.0
Bump eslint from 7.10.0 to 7.11.0
2020-10-24 12:31:03 +02:00
jerch b4bc830cee Merge branch 'master' into dependabot/npm_and_yarn/eslint-7.11.0 2020-10-24 12:19:02 +02:00
jerch 2e43f615f6 Merge pull request #3121 from xtermjs/dependabot/npm_and_yarn/source-map-loader-1.1.1
Bump source-map-loader from 1.1.0 to 1.1.1
2020-10-24 12:17:46 +02:00
jerch 5f2d1d2b4e Merge branch 'master' into dependabot/npm_and_yarn/source-map-loader-1.1.1 2020-10-24 12:07:11 +02:00
jerch 4ee305fa21 Merge pull request #3119 from xtermjs/dependabot/npm_and_yarn/deep-equal-2.0.4
Bump deep-equal from 2.0.3 to 2.0.4
2020-10-24 12:06:34 +02:00
jerch 4b3e16dbd0 Merge branch 'master' into dependabot/npm_and_yarn/deep-equal-2.0.4 2020-10-24 11:58:13 +02:00
jerch a7c836e42c Merge pull request #3117 from xtermjs/dependabot/npm_and_yarn/types/ws-7.2.7
Bump @types/ws from 7.2.6 to 7.2.7
2020-10-24 11:57:13 +02:00
dependabot-preview[bot] 886c057d0f Bump @types/webpack from 4.41.22 to 4.41.23
Bumps [@types/webpack](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/webpack) from 4.41.22 to 4.41.23.
- [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-10-21 09:34:39 +00:00
dependabot-preview[bot] 038704786d Bump ts-loader from 8.0.4 to 8.0.6
Bumps [ts-loader](https://github.com/TypeStrong/ts-loader) from 8.0.4 to 8.0.6.
- [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/8.0.4...v8.0.6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-21 09:33:24 +00:00
Ken Aoki c61076830f Replace function call from term.fit() to addons.fit.instance.fit() 2020-10-21 06:44:17 +00:00
dependabot-preview[bot] 02fccfbdc7 Bump webpack-cli from 3.3.12 to 4.1.0
Bumps [webpack-cli](https://github.com/webpack/webpack-cli) from 3.3.12 to 4.1.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/v3.3.12...webpack-cli@4.1.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-19 15:48:14 +00:00
dependabot-preview[bot] b250cedf81 Bump mocha from 8.1.3 to 8.2.0
Bumps [mocha](https://github.com/mochajs/mocha) from 8.1.3 to 8.2.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.1.3...v8.2.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-18 01:30:59 +00:00
dependabot-preview[bot] 7243e330fc Bump @types/chai from 4.2.12 to 4.2.14
Bumps [@types/chai](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/chai) from 4.2.12 to 4.2.14.
- [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-10-16 16:46:16 +00:00
dependabot-preview[bot] 17a7fb2a6e Bump playwright from 1.4.2 to 1.5.1
Bumps [playwright](https://github.com/Microsoft/playwright) from 1.4.2 to 1.5.1.
- [Release notes](https://github.com/Microsoft/playwright/releases)
- [Commits](https://github.com/Microsoft/playwright/compare/v1.4.2...v1.5.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-15 09:50:26 +00:00
Ken Aoki d3d8ec3b20 Fix search not expanding selection to left when appropriate (revenge) 2020-10-13 09:55:10 +00:00
Ken Aoki b6074df4bf Revert "Fix search not expanding selection to left when appropriate"
This reverts commit a9d2b8a55c.
2020-10-13 06:44:01 +00:00
dependabot-preview[bot] f3cc9469a7 Bump eslint from 7.10.0 to 7.11.0
Bumps [eslint](https://github.com/eslint/eslint) from 7.10.0 to 7.11.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.10.0...v7.11.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-10 22:07:29 +00:00
Ken Aoki a9d2b8a55c Fix search not expanding selection to left when appropriate 2020-10-10 04:04:52 +00:00
dependabot-preview[bot] 73e235d9f8 Bump source-map-loader from 1.1.0 to 1.1.1
Bumps [source-map-loader](https://github.com/webpack-contrib/source-map-loader) from 1.1.0 to 1.1.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.1.0...v1.1.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-09 16:59:40 +00:00
Tony Brix 17ec85e39e Merge branch 'master' into rerender-hidden 2020-10-09 10:23:20 -05:00
dependabot-preview[bot] 723c64e481 Bump deep-equal from 2.0.3 to 2.0.4
Bumps [deep-equal](https://github.com/inspect-js/node-deep-equal) from 2.0.3 to 2.0.4.
- [Release notes](https://github.com/inspect-js/node-deep-equal/releases)
- [Changelog](https://github.com/inspect-js/node-deep-equal/blob/master/CHANGELOG.md)
- [Commits](https://github.com/inspect-js/node-deep-equal/compare/v2.0.3...v2.0.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-05 15:57:08 +00:00
Jörg Breitbart faa60be6fb add missing insert and delete events to CircularList.splice 2020-10-03 17:11:49 +02:00
Jörg Breitbart e95f9815d8 Merge branch 'master' into fix_3108 2020-10-03 16:43:04 +02:00
Jörg Breitbart 9b62d8a01a basic marker test cases 2020-10-03 16:32:46 +02:00
dependabot-preview[bot] 1c206c2c27 Bump @types/ws from 7.2.6 to 7.2.7
Bumps [@types/ws](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/ws) from 7.2.6 to 7.2.7.
- [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-09-30 03:51:40 +00:00
Daniel Imms 782797ca11 Merge pull request #3116 from bhrg3se/master
added TRASA in "Real-world uses" list
2020-09-29 10:37:40 -07:00
bhrg3se b34ee5157e added TRASA in "Real-world uses" list 2020-09-29 19:55:58 +05:45
Daniel Imms ae37c43cd4 Merge pull request #3112 from xtermjs/dependabot/npm_and_yarn/playwright-1.4.2
Bump playwright from 1.3.0 to 1.4.2
2020-09-28 09:15:56 -07:00
dependabot-preview[bot] 272b1d2194 Bump playwright from 1.3.0 to 1.4.2
Bumps [playwright](https://github.com/Microsoft/playwright) from 1.3.0 to 1.4.2.
- [Release notes](https://github.com/Microsoft/playwright/releases)
- [Commits](https://github.com/Microsoft/playwright/compare/v1.3.0...v1.4.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-28 16:05:45 +00:00
Daniel Imms 260e2dab16 Merge pull request #3115 from xtermjs/dependabot/npm_and_yarn/eslint-7.10.0
Bump eslint from 7.9.0 to 7.10.0
2020-09-28 09:03:36 -07:00
dependabot-preview[bot] 7c78390e2b Bump eslint from 7.9.0 to 7.10.0
Bumps [eslint](https://github.com/eslint/eslint) from 7.9.0 to 7.10.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.9.0...v7.10.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-28 15:50:17 +00:00
Jörg Breitbart f5a4eed27c add super.dispose, add oDispose to API 2020-09-27 15:59:11 +02:00
Daniel Imms b0768f18ca Merge pull request #3113 from zaataylor/patch-1
Fix spelling error in README
2020-09-26 15:16:40 -07:00
zaataylor 4d1e532069 Fix spelling error in README
I corrected the spelling error for the Internet Explorer 11 browser mentioned in the "Browser Support" section.
2020-09-26 13:11:24 -04:00
Mmis1000 5beb7f52c2 Serialize addon: Change benchmark random source from /dev/random to /dev/urandom 2020-09-23 21:22:40 +08:00
Mmis1000 eaaf9b7af1 Serialize addon: Fix file path in benchmark 2020-09-23 21:21:54 +08:00
Tony Brix 3c9687decf Merge branch 'master' into rerender-hidden 2020-09-21 17:46:06 -05:00
Daniel Imms a5e269a3f9 Merge pull request #3104 from xtermjs/dependabot/npm_and_yarn/ts-loader-8.0.4
Bump ts-loader from 8.0.3 to 8.0.4
2020-09-21 14:52:45 -07:00
Daniel Imms 30d84b1202 Merge pull request #3106 from xtermjs/dependabot/npm_and_yarn/typescript-4.0.3
Bump typescript from 4.0.2 to 4.0.3
2020-09-21 14:51:52 -07:00
Daniel Imms 0aa1079cd0 Merge pull request #3107 from xtermjs/dependabot/npm_and_yarn/webpack-4.44.2
Bump webpack from 4.44.1 to 4.44.2
2020-09-21 14:51:36 -07:00
dependabot-preview[bot] 1091255d2c Bump webpack from 4.44.1 to 4.44.2
Bumps [webpack](https://github.com/webpack/webpack) from 4.44.1 to 4.44.2.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.44.1...v4.44.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-21 15:55:09 +00:00
dependabot-preview[bot] 56e63d762b Bump typescript from 4.0.2 to 4.0.3
Bumps [typescript](https://github.com/Microsoft/TypeScript) from 4.0.2 to 4.0.3.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/compare/v4.0.2...v4.0.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-21 15:54:34 +00:00
dependabot-preview[bot] f3c8b8f395 Bump ts-loader from 8.0.3 to 8.0.4
Bumps [ts-loader](https://github.com/TypeStrong/ts-loader) from 8.0.3 to 8.0.4.
- [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.3...8.0.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-21 15:53:19 +00:00
Daniel Imms 1a0a56c1f2 Merge pull request #3100 from Tyriar/fix_build
Fix publish build
2020-09-15 10:49:58 -07:00
Daniel Imms 055267ee9c Fix publish build 2020-09-15 10:49:21 -07:00
Daniel Imms 6e9040e6ba Merge pull request #3099 from Tyriar/role
Move role=document to xterm element
2020-09-15 10:38:14 -07:00
Daniel Imms a32776e2af Move role=document to xterm element
Feedback in microsoft/vscode#98918 said this could improve the UX on
screen readers
2020-09-15 10:33:28 -07:00
Tony Brix 1d6d6eb716 Merge branch 'master' into rerender-hidden 2020-09-15 09:55:22 -05:00
Daniel Imms 003cf96910 Merge pull request #3096 from xtermjs/dependabot/npm_and_yarn/eslint-7.9.0
Bump eslint from 7.8.1 to 7.9.0
2020-09-14 10:41:58 -07:00
dependabot-preview[bot] 3cb87af315 Bump eslint from 7.8.1 to 7.9.0
Bumps [eslint](https://github.com/eslint/eslint) from 7.8.1 to 7.9.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.8.1...v7.9.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-14 16:07:24 +00:00
Daniel Imms e32d8774eb Merge branch 'master' into rerender-hidden 2020-09-11 05:56:26 -07:00
Daniel Imms 49d5608fa6 Define member bar in ctor 2020-09-11 05:29:24 -07:00
Daniel Imms 56bfdb64d4 Merge pull request #3088 from UziTech/patch-2
fix: fit addon proposing infinite dimensions
2020-09-11 05:25:09 -07:00
Tony Brix 9513c231c9 fix: rerender hidden terminal when visible 2020-09-11 00:42:18 -05:00
Tony Brix dd92161da5 test: test proposing dimensions on hidden terminal 2020-09-10 19:54:31 -05:00
Tony Brix 55571a1ae8 fix: fit addon proposing infinite dimensions 2020-09-10 12:31:27 -05:00
Daniel Imms c112990d8f Merge pull request #3087 from Tyriar/playwright
Update playwright to 1.3.0
2020-09-10 08:09:13 -07:00
Daniel Imms 23dba6aebd Remove commented out calls 2020-09-10 08:01:31 -07:00
Daniel Imms f669b8ed1d Fix 2444 regression test 2020-09-10 07:52:02 -07:00
Daniel Imms 9a22cbe44b Fix selection api test on Windows 2020-09-10 07:45:38 -07:00
Daniel Imms 883ddba934 Improve search test
Was failing on Windows
2020-09-10 07:38:14 -07:00
Daniel Imms 8f7295b8a2 Avoid cache in integration test jobs 2020-09-10 06:54:25 -07:00
Daniel Imms 0ba97f6941 Put customOscHandlerCallStack on window 2020-09-10 06:38:43 -07:00
Daniel Imms d979c077a0 Update playwright to 1.3.0
Fixes #2917
2020-09-10 06:31:59 -07:00
Daniel Imms 4e18a78c02 Merge pull request #3086 from Tyriar/addon_test_projects
Create addon test tsconfig projects
2020-09-09 14:26:19 -07:00
Daniel Imms 1d6e8abcca More other addons api tests into test project 2020-09-09 13:54:43 -07:00
Daniel Imms 82a65be446 Include new out-test path in test-api 2020-09-09 12:58:39 -07:00
Daniel Imms 0778a823d1 Exclude test dirs in npmignore 2020-09-09 12:54:01 -07:00
Daniel Imms eca36458b3 Move webgl addon test code into own tsconfig
Part of #2917
2020-09-09 12:53:33 -07:00
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
Daniel Imms 86af9aa59d Merge pull request #2974 from Tyriar/r470
v4.7.0
2020-06-11 09:46:59 -07:00
Daniel Imms 1cd4f79347 v4.7.0 2020-06-11 09:27:41 -07:00
Daniel Imms f928c7e156 Merge pull request #2973 from daniel-j-davis/fix_2617
Fix getSelection not working sometimes for single character selections
2020-06-11 06:29:20 -07:00
Daniel Davis 0e6611b528 onSelectionChange() not getting called for single character selection #2617 2020-06-11 14:12:42 +01:00
Daniel Imms afc39106c3 Merge pull request #2931 from DavidSichau/master
fixed warnings about non passive events
2020-06-11 05:23:16 -07:00
Daniel Imms 06c8de381b Merge pull request #2970 from xtermjs/dependabot/npm_and_yarn/mocha-8.0.1
Bump mocha from 7.2.0 to 8.0.1
2020-06-11 04:33:27 -07:00
Daniel Imms ac0e1aeb19 Merge pull request #2952 from Puneethnaik/#2737_fix
non-transparent selection covers text
2020-06-11 04:31:25 -07:00
Daniel Imms 1171a20262 Merge branch 'master' into dependabot/npm_and_yarn/mocha-8.0.1 2020-06-11 04:21:43 -07:00
Daniel Imms 8fa729a702 Merge branch 'master' into #2737_fix 2020-06-11 04:21:24 -07:00
Daniel Imms 53eb54e656 Merge pull request #2971 from Tyriar/font_fix
Fix ligatures addon breaking CI
2020-06-11 04:21:01 -07:00
Daniel Imms 3b9047be0f Fix fira code download 2020-06-11 04:14:38 -07:00
dependabot-preview[bot] 2562311606 Bump mocha from 7.2.0 to 8.0.1
Bumps [mocha](https://github.com/mochajs/mocha) from 7.2.0 to 8.0.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/v7.2.0...v8.0.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-11 07:53:05 +00:00
Daniel Imms 98d0760898 Add tests, support #rrggbbaa in css.toColor 2020-06-10 18:37:13 -07:00
Daniel Imms 4c943ddb0d Space out exports 2020-06-10 12:39:11 -07:00
Puneethnaik 61432ab65d Made changes according as per Review Comments. 2020-06-09 23:34:53 +05:30
Puneethnaik 0ccdc8d1ca Merge branch 'master' of https://github.com/xtermjs/xterm.js into #2737_fix 2020-06-06 16:42:28 +05:30
Daniel Imms 8a3366b1eb Merge pull request #2967 from xtermjs/dependabot/npm_and_yarn/typescript-3.9.5
Bump typescript from 3.9.3 to 3.9.5
2020-06-05 12:58:10 -07:00
dependabot-preview[bot] c669cfbb23 Bump typescript from 3.9.3 to 3.9.5
Bumps [typescript](https://github.com/Microsoft/TypeScript) from 3.9.3 to 3.9.5.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/compare/v3.9.3...v3.9.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-05 13:05:50 +00:00
Daniel Imms 45749f6017 Merge pull request #2968 from xtermjs/dependabot/npm_and_yarn/types/glob-7.1.2
Bump @types/glob from 7.1.1 to 7.1.2
2020-06-05 06:04:03 -07:00
dependabot-preview[bot] bc6bb417ac Bump @types/glob from 7.1.1 to 7.1.2
Bumps [@types/glob](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/glob) from 7.1.1 to 7.1.2.
- [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-06-05 07:50:19 +00:00
Daniel Imms 5342ba6b10 Merge pull request #2966 from xtermjs/remove_elements_helper
Add a helper to remove elements from their parent
2020-06-04 07:42:18 -07:00
Daniel Imms a1dc0d1936 Add tests for removeElementFromParent 2020-06-04 07:32:34 -07:00
Daniel Imms 15f1759580 Introduce removeElementFromParent helper 2020-06-04 07:20:59 -07:00
Daniel Imms fb25be3ecd Merge pull request #2962 from JoshuaKGoldberg/dom-renderer-dispose-children
Only removeChild valid children in DomRenderer dispose
2020-06-04 07:15:38 -07:00
Josh Goldberg fbb8c6273b Switched to parentElement optionals 2020-06-04 10:12:36 -04:00
Daniel Imms 289014b32e Merge pull request #2965 from JoshuaKGoldberg/patch-2
Bumped Dockerfile Node from 8 to 12
2020-06-04 07:11:10 -07:00
Josh Goldberg 9b91e3d5e2 Bumped Dockerfile Node from 8 to 12
This seemed to work for me, but I'm new here and don't particularly trust myself. 😄
2020-06-04 10:07:54 -04:00
Daniel Imms d57e099e6e Merge pull request #2964 from xtermjs/dependabot/npm_and_yarn/types/ws-7.2.5
Bump @types/ws from 7.2.4 to 7.2.5
2020-06-04 06:25:32 -07:00
dependabot-preview[bot] c5d30a9c63 Bump @types/ws from 7.2.4 to 7.2.5
Bumps [@types/ws](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/ws) from 7.2.4 to 7.2.5.
- [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-04 08:17:01 +00:00
Josh Goldberg 8ee08a3be7 ESLint? What is that? Never heard of the thing. 2020-06-03 16:16:00 -04:00
Josh Goldberg 5af1554bbf Only removeChild valid children in DomRenderer dispose 2020-06-03 16:05:53 -04:00
Puneethnaik e226a111f9 Merge branch 'master' of https://github.com/xtermjs/xterm.js into #2737_fix 2020-06-03 19:48:39 +05:30
Puneethnaik d5bc65ec0e 1. Removed logic to blend selection with background with 0.3 opacity from ColorManager to a function in color namespace.
2. Changed the DomRenderer and CanvasRenderer where the function defined in color namespace is called.
2020-06-03 19:48:34 +05:30
Daniel Imms 106d74caa2 Merge pull request #2953 from coderaiser/lint/simplify
Using putout linter on xterm codebase
2020-06-02 05:35:45 -07:00
Daniel Imms 825784e0ec Merge pull request #2956 from xtermjs/dependabot/npm_and_yarn/types/webpack-4.41.17
Bump @types/webpack from 4.41.16 to 4.41.17
2020-06-02 04:21:21 -07:00
dependabot-preview[bot] 80c6c7f399 Bump @types/webpack from 4.41.16 to 4.41.17
Bumps [@types/webpack](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/webpack) from 4.41.16 to 4.41.17.
- [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-02 07:58:26 +00:00
David Sichau 156563e832 Merge branch 'master' into master 2020-06-02 08:49:55 +02:00
coderaiser b92260870a Merge branch 'master' into lint/simplify 2020-06-01 17:11:46 +03:00
coderaiser 04f2b6e9ff CoreMouseService: reports: while pop -> [] 2020-06-01 17:07:14 +03:00
coderaiserandDaniel Imms a9862a1a6f Update src/common/buffer/Buffer.ts
Co-authored-by: Daniel Imms <tyriar@tyriar.com>
2020-06-01 16:30:17 +03:00
Daniel Imms 2e2acd77f3 Merge pull request #2954 from xtermjs/dependabot/npm_and_yarn/types/webpack-4.41.16
Bump @types/webpack from 4.41.13 to 4.41.16
2020-06-01 05:44:04 -07:00
dependabot-preview[bot] 75e8999a88 Bump @types/webpack from 4.41.13 to 4.41.16
Bumps [@types/webpack](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/webpack) from 4.41.13 to 4.41.16.
- [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-01 11:40:33 +00:00
Daniel Imms 7bf62a3078 Merge pull request #2955 from xtermjs/dependabot/npm_and_yarn/nyc-15.1.0
Bump nyc from 15.0.1 to 15.1.0
2020-06-01 04:38:44 -07:00
dependabot-preview[bot] 0030ed214d Bump nyc from 15.0.1 to 15.1.0
Bumps [nyc](https://github.com/istanbuljs/nyc) from 15.0.1 to 15.1.0.
- [Release notes](https://github.com/istanbuljs/nyc/releases)
- [Changelog](https://github.com/istanbuljs/nyc/blob/master/CHANGELOG.md)
- [Commits](https://github.com/istanbuljs/nyc/compare/v15.0.1...v15.1.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-01 08:21:24 +00:00
coderaiser f63f1f7b95 chore: lint using putout 2020-06-01 00:04:17 +03:00
Puneethnaik 6daa3f4499 ColorManager.ts : modified the setTheme function to add opacity of 0.3 to the selection color if selection color provided is opaque. 2020-05-31 12:42:14 +05:30
Daniel Imms 4e6151d011 Merge pull request #2951 from roke22/patch-1
Added Laravel Ssh Web Client to readme file
2020-05-29 06:45:54 -07:00
Jose J. Anton 18330b47ed Added Laravel Ssh Web Client
Added Laravel Ssh Web Client
2020-05-29 14:55:49 +02:00
Daniel Imms 864f1a9be9 Merge pull request #2950 from JoshuaKGoldberg/patch-1
Add Codecademy to README.md list
2020-05-27 14:44:14 -07:00
Josh Goldberg 1b6e24d94a Add Codecademy to README.md list
💖
2020-05-27 16:26:09 -04:00
Daniel Imms 617e702a94 Merge pull request #2949 from xtermjs/dependabot/npm_and_yarn/source-map-loader-1.0.0
Bump source-map-loader from 0.2.4 to 1.0.0
2020-05-27 06:25:17 -07:00
dependabot-preview[bot] 6c0de23915 Bump source-map-loader from 0.2.4 to 1.0.0
Bumps [source-map-loader](https://github.com/webpack-contrib/source-map-loader) from 0.2.4 to 1.0.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/v0.2.4...v1.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-27 07:49:40 +00:00
Daniel Imms 869d791f44 Merge pull request #2942 from sfx101/patch-1
Added DockerStacks link to real world uses
2020-05-26 08:12:25 -07:00
Daniel Imms e5499711c3 Merge pull request #2947 from xtermjs/dependabot/npm_and_yarn/ts-loader-7.0.5
Bump ts-loader from 7.0.4 to 7.0.5
2020-05-26 07:54:47 -07:00
Daniel Imms 3fbd215854 Merge pull request #2948 from xtermjs/dependabot/npm_and_yarn/mocha-7.2.0
Bump mocha from 7.1.2 to 7.2.0
2020-05-26 07:54:33 -07:00
dependabot-preview[bot] b7132e7fa7 Bump mocha from 7.1.2 to 7.2.0
Bumps [mocha](https://github.com/mochajs/mocha) from 7.1.2 to 7.2.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/v7.1.2...v7.2.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-25 08:04:35 +00:00
dependabot-preview[bot] 7f201e3e6b Bump ts-loader from 7.0.4 to 7.0.5
Bumps [ts-loader](https://github.com/TypeStrong/ts-loader) from 7.0.4 to 7.0.5.
- [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.4...v7.0.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-25 08:04:03 +00:00
Subhadip Naskar cebbac8265 Added DockerStacks link to real world uses 2020-05-22 10:48:17 +05:30
Daniel Imms 227a1f5aa3 Merge pull request #2940 from xtermjs/dependabot/npm_and_yarn/typescript-3.9.3
Bump typescript from 3.9.2 to 3.9.3
2020-05-20 05:24:47 -07:00
dependabot-preview[bot] 07bdc10245 Bump typescript from 3.9.2 to 3.9.3
Bumps [typescript](https://github.com/Microsoft/TypeScript) from 3.9.2 to 3.9.3.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/compare/v3.9.2...v3.9.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-20 08:06:43 +00:00
Daniel Imms 1b9b6f0cbf Merge pull request #2938 from xtermjs/dependabot/npm_and_yarn/typescript-eslint/parser-2.34.0
Bump @typescript-eslint/parser from 2.33.0 to 2.34.0
2020-05-19 05:36:29 -07:00
dependabot-preview[bot] 1f6ebb3dac Bump @typescript-eslint/parser from 2.33.0 to 2.34.0
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 2.33.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 12:28:45 +00:00
Daniel Imms 3abb66500d Merge pull request #2939 from xtermjs/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-2.34.0
Bump @typescript-eslint/eslint-plugin from 2.33.0 to 2.34.0
2020-05-19 05:27:05 -07:00
dependabot-preview[bot] b6b2e67180 Bump @typescript-eslint/eslint-plugin from 2.33.0 to 2.34.0
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 2.33.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/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v2.34.0/packages/eslint-plugin)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-19 07:57:29 +00:00
Daniel Imms db9d950fb4 Merge pull request #2936 from xtermjs/dependabot/npm_and_yarn/types/jsdom-16.2.3
Bump @types/jsdom from 16.2.2 to 16.2.3
2020-05-18 07:45:18 -07:00
dependabot-preview[bot] bdd8b8d32f Bump @types/jsdom from 16.2.2 to 16.2.3
Bumps [@types/jsdom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jsdom) from 16.2.2 to 16.2.3.
- [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-05-18 08:12:37 +00:00
Daniel Imms d8bc7ceaff Merge pull request #2934 from xtermjs/tyriar/2933
Fix exception when disposing Terminal twice
2020-05-15 12:29:23 -07:00
Daniel Imms 6a0f7b0713 Fix exception when disposing Terminal twice
Fixes #2933
2020-05-15 10:58:09 -07:00
Daniel Imms 3ac8a89f9b Merge pull request #2932 from xtermjs/dependabot/npm_and_yarn/types/jsdom-16.2.2
Bump @types/jsdom from 16.2.1 to 16.2.2
2020-05-15 08:38:11 -07:00
dependabot-preview[bot] fcec9c793c Bump @types/jsdom from 16.2.1 to 16.2.2
Bumps [@types/jsdom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jsdom) from 16.2.1 to 16.2.2.
- [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-05-15 08:14:52 +00:00
David Sichau 2140930793 fixed warnings about non passive events 2020-05-14 15:03:13 +02:00
Daniel Imms 2c16a7e0d7 Merge pull request #2930 from xtermjs/dependabot/npm_and_yarn/types/webpack-4.41.13
Bump @types/webpack from 4.41.12 to 4.41.13
2020-05-14 05:41:14 -07:00
dependabot-preview[bot] 325559e5d1 Bump @types/webpack from 4.41.12 to 4.41.13
Bumps [@types/webpack](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/webpack) from 4.41.12 to 4.41.13.
- [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-05-14 08:05:09 +00:00
Daniel Imms 3ec926750a Merge pull request #2929 from Tyriar/4_6_0
v4.6.0 and bump all addons
2020-05-13 07:29:15 -07:00
Daniel Imms 6d8e9c43c9 v4.6.0 and bump all addons 2020-05-13 07:05:58 -07:00
Daniel Imms 69f3f302d6 Merge pull request #2928 from xtermjs/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-2.33.0
Bump @typescript-eslint/eslint-plugin from 2.32.0 to 2.33.0
2020-05-13 06:37:16 -07:00
dependabot-preview[bot] 1282900140 Bump @typescript-eslint/eslint-plugin from 2.32.0 to 2.33.0
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 2.32.0 to 2.33.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/v2.33.0/packages/eslint-plugin)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-13 13:23:37 +00:00
Daniel Imms 768710b2d7 Merge pull request #2927 from xtermjs/dependabot/npm_and_yarn/typescript-eslint/parser-2.33.0
Bump @typescript-eslint/parser from 2.32.0 to 2.33.0
2020-05-13 05:43:51 -07:00
Daniel Imms 8750ad4ec2 Merge pull request #2926 from xtermjs/dependabot/npm_and_yarn/typescript-3.9.2
Bump typescript from 3.8.3 to 3.9.2
2020-05-13 05:42:33 -07:00
dependabot-preview[bot] 409d995080 Bump @typescript-eslint/parser from 2.32.0 to 2.33.0
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 2.32.0 to 2.33.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.33.0/packages/parser)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-13 08:09:36 +00:00
dependabot-preview[bot] a151b72fc5 Bump typescript from 3.8.3 to 3.9.2
Bumps [typescript](https://github.com/Microsoft/TypeScript) from 3.8.3 to 3.9.2.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/compare/v3.8.3...v3.9.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-13 08:09:16 +00:00
Daniel Imms 0626b7ec22 Merge pull request #2923 from xtermjs/dependabot/npm_and_yarn/typescript-eslint/parser-2.32.0
Bump @typescript-eslint/parser from 2.31.0 to 2.32.0
2020-05-12 08:27:10 -07:00
dependabot-preview[bot] 91205710ef Bump @typescript-eslint/parser from 2.31.0 to 2.32.0
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 2.31.0 to 2.32.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.32.0/packages/parser)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-12 14:53:11 +00:00
Daniel Imms 5a4f352bb0 Merge pull request #2924 from xtermjs/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-2.32.0
Bump @typescript-eslint/eslint-plugin from 2.31.0 to 2.32.0
2020-05-12 07:51:31 -07:00
dependabot-preview[bot] f62a14e976 Bump @typescript-eslint/eslint-plugin from 2.31.0 to 2.32.0
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 2.31.0 to 2.32.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/v2.32.0/packages/eslint-plugin)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-12 12:08:11 +00:00
Daniel Imms 5f3fb410f7 Merge pull request #2925 from xtermjs/dependabot/npm_and_yarn/ts-loader-7.0.4
Bump ts-loader from 7.0.3 to 7.0.4
2020-05-12 05:06:27 -07:00
dependabot-preview[bot] 2d8dfde660 Bump ts-loader from 7.0.3 to 7.0.4
Bumps [ts-loader](https://github.com/TypeStrong/ts-loader) from 7.0.3 to 7.0.4.
- [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.3...v7.0.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-12 07:54:10 +00:00
Daniel Imms 7fb885ce7d Merge pull request #2921 from Tyriar/2826_api_check
Add a proposed API check option
2020-05-11 04:46:45 -07:00
Daniel Imms 4aa3097cd1 Merge pull request #2922 from xtermjs/dependabot/npm_and_yarn/ws-7.3.0
Bump ws from 7.2.5 to 7.3.0
2020-05-11 04:35:48 -07:00
dependabot-preview[bot] 0b87d9a39c Bump ws from 7.2.5 to 7.3.0
Bumps [ws](https://github.com/websockets/ws) from 7.2.5 to 7.3.0.
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](https://github.com/websockets/ws/compare/7.2.5...7.3.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-11 08:29:28 +00:00
Daniel Imms 92fdf0ce58 Fix lint issue 2020-05-08 12:41:26 -07:00
Daniel Imms aa59f34aab Add a proposed API check option
Part of #2826
2020-05-08 12:41:10 -07:00
Daniel Imms 05c149783f Merge pull request #2914 from drauggres/bug/demo_addons_list
Fix demo. Clear addons list on terminal recreation
2020-05-08 11:27:51 -07:00
Daniel Imms c3bc436e49 Merge branch 'master' into bug/demo_addons_list 2020-05-08 11:26:25 -07:00
Daniel Imms 64328ee39c Merge pull request #2920 from xtermjs/dependabot/npm_and_yarn/ts-loader-7.0.3
Bump ts-loader from 7.0.2 to 7.0.3
2020-05-07 04:53:58 -07:00
dependabot-preview[bot] 61667c1c23 Bump ts-loader from 7.0.2 to 7.0.3
Bumps [ts-loader](https://github.com/TypeStrong/ts-loader) from 7.0.2 to 7.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/v7.0.2...v7.0.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-07 07:52:11 +00:00
Daniel Imms 3a9cdbab0d Merge pull request #2916 from xtermjs/tyriar/intersecting
Remove intersecting lower priority links
2020-05-06 06:55:51 -07:00
Daniel Imms 27af770068 Remove intersecting lower priority links
Fixes #2848
2020-05-06 06:16:36 -07:00
Sergey Volkov 71e45cdd25 Fix demo. Clear addons list on terminal recreation 2020-05-06 15:28:23 +03:00
Daniel Imms f9adf8ad83 Merge pull request #2912 from xtermjs/tyriar/2911
Workaround for hover firing multiple times
2020-05-06 04:59:33 -07:00
Daniel Imms f886698dc3 Workaround for hover firing multiple times
Fixes #2911
2020-05-06 04:53:25 -07:00
Daniel Imms 7ab0a42b24 Merge pull request #2908 from Tyriar/line_links
Change link provider API to provide all links for a line
2020-05-06 03:05:32 -07:00
Daniel Imms 99e2a3db1c Add test for multiple links on one line 2020-05-06 02:56:52 -07:00
Daniel Imms 9ca6733f68 Fix api tests 2020-05-06 02:50:35 -07:00
Daniel Imms 6d5ae1416a Correct api usage in tests
assertions should still fail
2020-05-05 18:35:37 -07:00
Daniel Imms 0707398a5b Remove logs 2020-05-05 18:27:11 -07:00
Daniel Imms 75e4e2089e Improve api 2020-05-05 18:26:07 -07:00
Daniel Imms 484883f442 Fix Linkifier2 tests 2020-05-05 18:24:45 -07:00
Daniel Imms d488b49fc4 Change link provider API to return all links for the line
Fixes #2848
2020-05-05 18:19:57 -07:00
Daniel Imms 1168c6c52f Merge pull request #2903 from theflyingape/patch-1
Update README.md
2020-05-05 05:50:14 -07:00
Daniel Imms f4e87cdbb3 Merge pull request #2905 from xtermjs/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-2.31.0
Bump @typescript-eslint/eslint-plugin from 2.30.0 to 2.31.0
2020-05-05 05:33:03 -07:00
dependabot-preview[bot] 24c64bfc7f Bump @typescript-eslint/eslint-plugin from 2.30.0 to 2.31.0
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 2.30.0 to 2.31.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/v2.31.0/packages/eslint-plugin)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-05 12:06:10 +00:00
Daniel Imms ed5aeb7472 Merge pull request #2906 from xtermjs/dependabot/npm_and_yarn/typescript-eslint/parser-2.31.0
Bump @typescript-eslint/parser from 2.30.0 to 2.31.0
2020-05-05 05:04:34 -07:00
dependabot-preview[bot] eb3f933290 Bump @typescript-eslint/parser from 2.30.0 to 2.31.0
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 2.30.0 to 2.31.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.31.0/packages/parser)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-05 08:06:57 +00:00
Robert Hurst 832c43a509 Update README.md
A TypeScript port (app & client) of the venerable Hack & Slash game.
2020-05-04 09:57:35 -04:00
Daniel Imms 31d3ae451c Merge pull request #2899 from Tyriar/memoryleak
Fix listener leaks causing Terminal memory from not getting freed
2020-05-03 15:30:29 -07:00
Daniel Imms e413133602 Remove unused helper 2020-05-03 15:26:02 -07:00
Daniel Imms 06b8d36cf0 Fix other leaking listeners 2020-05-03 14:37:20 -07:00
Daniel Imms b75e42a56c Fix terminal object leaking 2020-05-03 12:46:37 -07:00
Daniel Imms 66b2c01549 Merge pull request #2898 from Tyriar/eslint_js
Disable eslint in all js files
2020-05-03 07:39:11 -07:00
Daniel Imms 065eb13a9d Merge pull request #2751 from jerch/underline_core
Underline styles and colors - core part
2020-05-03 07:32:32 -07:00
Daniel Imms 15bb9aa137 Disable eslint in all js files
This was causing distracting editor diagnostics
2020-05-03 07:31:46 -07:00
Daniel Imms 07862c2e52 Fixing minor comments 2020-05-03 07:26:27 -07:00
Daniel Imms a8b6252c3c Fix compile after merge 2020-05-03 07:20:58 -07:00
Daniel Imms bbbf128b7c Fix tests 2020-05-03 07:19:10 -07:00
Daniel Imms 62b8398719 Merge branch 'master' into pr/jerch/2751 2020-05-03 07:14:02 -07:00
Daniel Imms 3ea9a7511e Merge pull request #2724 from jerch/reverse_wraparound
Reverse wraparound
2020-05-03 07:11:25 -07:00
Daniel Imms 076d51fc35 Merge branch 'master' into reverse_wraparound 2020-05-03 07:05:14 -07:00
Daniel Imms 210fa7f655 Move commented test into Terminal.test 2020-05-03 07:04:01 -07:00
Daniel Imms fbdb01d43c Merge pull request #2847 from LabhanshAgrawal/ligatures-addon
Merge ligatures addon into core repo
2020-05-03 06:54:46 -07:00
Daniel Imms 36e241cd8d Alphabetize tsconfig addons 2020-05-03 06:49:05 -07:00
Daniel Imms c5b0068c9b Remove coveralls 2020-05-03 06:48:00 -07:00
Daniel Imms ed7bab7f02 Correct package.json repo links 2020-05-03 06:46:38 -07:00
Daniel Imms 001e16e081 Copyright 2020-05-03 06:45:12 -07:00
Daniel Imms 41670dc181 Remove test dependence on applyAddon 2020-05-03 06:44:17 -07:00
Daniel Imms 6c6900ede8 Bring ligatures readme install/usage up to date 2020-05-03 06:35:36 -07:00
Daniel Imms b450470142 Remove old addon api 'apply' call 2020-05-03 06:32:32 -07:00
Daniel Imms d98fcf8d1f Update copyright 2020-05-03 06:29:02 -07:00
Daniel Imms 5b90b8a3ad Clean up ligatures readme 2020-05-03 06:26:23 -07:00
Daniel Imms e343e690f2 Merge branch 'master' into ligatures-addon 2020-05-03 06:22:14 -07:00
Daniel Imms 6f1f4ba98f Merge pull request #2867 from rishab-pdx/#2840
Different behavior when search two same words in only one row
2020-05-03 06:21:14 -07:00
Daniel Imms 7a34b4de73 Merge pull request #2895 from Tyriar/eslint_warn
Make all eslint rules warnings
2020-05-03 06:15:15 -07:00
Daniel Imms b84831f148 Make all eslint rules warnings
eslint warnings normally don't exit with non-zero when warnings fail unless
'--max-warnings 0' is used. This commit adds that and changes all rules to
be warnings in order to improve feedback in the editor. After this commit
all warning diagnostics (yellow) are stylistic/lint-related ones that will
still fail lint, which error diagnostics (red) are actual errors that will
fail compilation (from tsc).

Fixes #2886
2020-05-03 06:07:53 -07:00
Daniel Imms d9ecafeb2a Merge pull request #2892 from Eugeny/fixed-dpr-listener
fixed ScreenDprListener never being fired
2020-05-02 15:54:52 -07:00
EugeneandDaniel Imms 930de9aeb7 Update src/browser/ScreenDprMonitor.ts
Co-authored-by: Daniel Imms <tyriar@tyriar.com>
2020-05-02 22:48:30 +02:00
Eugene Pankov 40a09d7412 fixed ScreenDprListener never being fired 2020-05-02 16:20:46 +02:00
Labhansh Agrawal ad9aabbb7e fix ci errors 2020-05-01 14:26:03 +05:30
Labhansh Agrawal 195bce0485 add dependencies as externals in webpack 2020-05-01 14:26:03 +05:30
Labhansh Agrawal 42b88f34f4 remove azure devops config 2020-05-01 14:26:03 +05:30
Labhansh Agrawal 7bde7039bb add webpack config 2020-05-01 14:26:03 +05:30
Labhansh Agrawal 4702a0af9d lint 2020-05-01 14:26:03 +05:30
Labhansh Agrawal c818381ef1 add ligatures addon config 2020-05-01 14:26:03 +05:30
Labhansh Agrawal ef4ecf7c8e clean up dev dependencies 2020-05-01 14:26:03 +05:30
Labhansh Agrawal fb65cea115 set up similar to other addons 2020-05-01 14:26:03 +05:30
Labhansh Agrawal dcca79baef delete non-required files 2020-05-01 14:26:03 +05:30
Labhansh Agrawal 15df03ba09 clone ligatures addon repo 2020-05-01 14:26:03 +05:30
rishab 5eb33e9d8a Merge branch 'master' of https://github.com/xtermjs/xterm.js into #2840 2020-04-30 14:05:01 -07:00
Daniel Imms 939de5d151 Merge pull request #2888 from lunaroyster/master
Added @ as a character in URL paths for the weblinks addon
2020-04-30 06:30:59 -07:00
Daniel Imms 4c440b8552 Merge pull request #2890 from xtermjs/dependabot/npm_and_yarn/ts-loader-7.0.2
Bump ts-loader from 7.0.1 to 7.0.2
2020-04-30 05:10:20 -07:00
dependabot-preview[bot] 1c73fd5454 Bump ts-loader from 7.0.1 to 7.0.2
Bumps [ts-loader](https://github.com/TypeStrong/ts-loader) from 7.0.1 to 7.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/v7.0.1...v7.0.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-30 08:01:12 +00:00
lunaroysterandEricWangUTM 9567ae4bfe Added @ as a character to pathCharacterSet for xterm-addons-web-links
Co-authored-by: lunaroyster <oneinaquadrillion@live.com>
Co-authored-by: EricWangUTM <yifeng.wang@mail.utoronto.ca>
2020-04-30 04:35:34 +00:00
rishab 853b454eae Merge branch 'master' of https://github.com/xtermjs/xterm.js into #2840 2020-04-29 19:56:45 -07:00
Daniel Imms 94b1fec91e Merge pull request #2883 from xtermjs/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-2.30.0
Bump @typescript-eslint/eslint-plugin from 2.29.0 to 2.30.0
2020-04-28 05:57:46 -07:00
dependabot-preview[bot] a6a5c010fe Bump @typescript-eslint/eslint-plugin from 2.29.0 to 2.30.0
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 2.29.0 to 2.30.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/v2.30.0/packages/eslint-plugin)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-28 12:46:07 +00:00
Daniel Imms 52bcbaed08 Merge pull request #2882 from xtermjs/dependabot/npm_and_yarn/typescript-eslint/parser-2.30.0
Bump @typescript-eslint/parser from 2.29.0 to 2.30.0
2020-04-28 05:44:20 -07:00
dependabot-preview[bot] 74ac45730f Bump @typescript-eslint/parser from 2.29.0 to 2.30.0
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 2.29.0 to 2.30.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.30.0/packages/parser)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-28 08:06:37 +00:00
Jörg Breitbart 0d0f04de5c resolve master conflicts 2020-04-27 16:16:31 +02:00
Jörg Breitbart e1be294147 Merge branch 'master' into reverse_wraparound 2020-04-27 16:11:39 +02:00
Daniel Imms 45077d7106 Merge pull request #2880 from xtermjs/dependabot/npm_and_yarn/mocha-7.1.2
Bump mocha from 7.1.1 to 7.1.2
2020-04-27 06:16:14 -07:00
dependabot-preview[bot] e65ead3f20 Bump mocha from 7.1.1 to 7.1.2
Bumps [mocha](https://github.com/mochajs/mocha) from 7.1.1 to 7.1.2.
- [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/v7.1.1...v7.1.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-27 13:01:17 +00:00
Daniel Imms 5ed6d0fedb Merge pull request #2879 from xtermjs/dependabot/npm_and_yarn/ws-7.2.5
Bump ws from 7.2.3 to 7.2.5
2020-04-27 05:59:41 -07:00
dependabot-preview[bot] 673138c5af Bump ws from 7.2.3 to 7.2.5
Bumps [ws](https://github.com/websockets/ws) from 7.2.3 to 7.2.5.
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](https://github.com/websockets/ws/compare/7.2.3...7.2.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-27 08:26:57 +00:00
Rishab 0e145a1a57 Merge branch 'master' into #2840 2020-04-26 14:42:43 -07:00
Daniel Imms a8bcfc62d0 Merge pull request #2876 from Tyriar/layers3
Move more parts of Terminal into CoreTerminal and move everything else into browser/
2020-04-26 11:19:05 -07:00
Daniel Imms 394bb38913 Remove src/tsconfig.json from eslintrc 2020-04-26 11:11:04 -07:00
Daniel Imms 80c5c94e7e Remove src project 2020-04-26 11:06:30 -07:00
Daniel Imms 03bfd2c842 Move Terminal*.test into browser 2020-04-26 10:59:32 -07:00
Daniel Imms bdb438972f Fix errors in Terminal and elsewhere
This was mostly ! to compel TS, we should actually fix this down the road
but that can come later.
2020-04-26 10:44:44 -07:00
Daniel Imms f256206fd4 Move Terminal and AccessibilityManager into browser 2020-04-26 10:18:05 -07:00
Daniel Imms 4d01929503 Introduce ICoreTerminal 2020-04-26 10:11:24 -07:00
Daniel Imms 2a9b76246b Move scroll into CoreTerminal 2020-04-26 10:02:59 -07:00
Daniel Imms 21bcef5008 Move a bunch of scroll logic into CoreTerminal
This change will now reset userScrolling on RIS
2020-04-26 09:54:44 -07:00
Daniel Imms 46e7fc61cc Move WriteBuffer into CoreTerminal 2020-04-26 09:38:34 -07:00
Daniel Imms b9dee59900 Move InputHandler init into CoreTerminal 2020-04-26 09:36:56 -07:00
Daniel Imms 2fd4c149fd Merge pull request #2874 from Tyriar/layers2
Move InputHandler into common
2020-04-26 09:08:50 -07:00
Daniel Imms d085768e8b Fix some lint issues 2020-04-26 08:23:38 -07:00
Daniel Imms 6f9730c652 Merge branch 'master' into layers2 2020-04-26 08:14:47 -07:00
Daniel Imms b79a0a9832 Remove unwanted vscode setting 2020-04-26 08:12:53 -07:00
Daniel Imms 212061be50 Move InputHandler.test into common, fix strict errors 2020-04-26 08:11:53 -07:00
Daniel Imms c931341259 Remove Terminal dep in InputHandler.test 2020-04-26 08:08:49 -07:00
Daniel Imms 51dc03a730 Merge pull request #2873 from jerch/fix_2872
Fix missing ybase calc in print
2020-04-26 08:08:26 -07:00
Jörg Breitbart 31670da633 fix sloppy coding in InputHandler 2020-04-26 16:53:15 +02:00
Jörg Breitbart 51a808c094 some refactoring 2020-04-26 16:34:15 +02:00
Daniel Imms d756086b8e Move InputHandler into common
Part of #2749
Part of #1507
2020-04-26 07:24:30 -07:00
Daniel Imms 81d289b266 Remove RenderService dep in InputHandler 2020-04-26 07:03:11 -07:00
Jörg Breitbart 71c2551a2e Merge branch 'reverse_wraparound' of github.com:jerch/xterm.js into reverse_wraparound 2020-04-26 15:59:27 +02:00
Jörg Breitbart ab2c8c7382 Merge branch 'master' into reverse_wraparound 2020-04-26 15:59:10 +02:00
Daniel Imms ba40fe4ff4 Remove Terminal dependency from InputHandler 🎉 2020-04-26 06:46:37 -07:00
Daniel Imms dbced5c1a4 Move Terminal.is into InputHandler 2020-04-26 06:38:10 -07:00
Daniel Imms 3a1a0d6590 Remove input handler Terminal.resize dep 2020-04-26 06:34:36 -07:00
Daniel Imms 451d9aab96 Register forwardEvent calls 2020-04-26 06:21:16 -07:00
Daniel Imms a6949d522e Move resize event into bufferservice 2020-04-26 06:16:13 -07:00
Daniel Imms eba372e2cc More some of Terminal.resize into bufferservice 2020-04-25 20:52:59 -07:00
Daniel Imms a3ac0d542d Remove unused imports 2020-04-25 20:39:58 -07:00
Daniel Imms 0709b0dc3b Break input handler dep on Terminal.scroll 2020-04-25 19:28:00 -07:00
rishab 5bb710e921 Merge branch 'master' of https://github.com/xtermjs/xterm.js 2020-04-25 17:39:30 -07:00
Rishab a5c1e594b3 Merge pull request #1 from rishab-pdx/#2840
handle wrap back with find previous
2020-04-25 17:37:12 -07:00
rishab 08f8f51ade handle wrap back with find previous
wrap back search selection to last selected result when we hit top
2020-04-25 17:33:48 -07:00
Daniel Imms 3897950e22 Remove a11y event dep, introduce forwardEvent helper 2020-04-25 16:45:46 -07:00
Daniel Imms e9db1ecd1f Remove Terminal.handleTitle dep 2020-04-25 16:37:31 -07:00
Daniel Imms 9346eba2f2 Remove Terminal.showCursor dep from input handler 2020-04-25 16:18:43 -07:00
Daniel Imms c5ba1d62e7 Remove mouseEvents from Terminal
Depend on CoreMouseService directly
2020-04-25 13:31:45 -07:00
Daniel Imms 37996bcd15 Move sendFocus to core service 2020-04-25 13:26:06 -07:00
Daniel Imms d5729f9216 Move insertMode into core service 2020-04-25 11:26:20 -07:00
Daniel Imms 4cec11be9c Move bracketed paste mode to coreservice 2020-04-25 11:11:05 -07:00
Daniel Imms b80c14639e Move option listeners to core 2020-04-25 10:34:37 -07:00
Daniel Imms 0d3bd2052b Remove remaining common service inits to common 2020-04-25 10:26:29 -07:00
Daniel Imms 353a8c5388 Create CoreTerminal, fix createInstance in strict mode 2020-04-25 10:21:56 -07:00
Daniel Imms dac3037ee4 Merge pull request #2871 from Tyriar/layers
Support dependency injection in UnicodeService
2020-04-25 08:44:25 -07:00
Daniel Imms e3c81048af Use DI with Linkifier2 2020-04-25 07:29:07 -07:00
Daniel Imms c752ca84df Merge pull request #2870 from Tyriar/selection
Make sure selection gets redrawn when switching renderers
2020-04-25 07:27:17 -07:00
Daniel Imms a5d50960a7 Support DI in UnicodeService 2020-04-25 07:27:09 -07:00
Daniel Imms af0845b4a3 Merge branch 'master' into selection 2020-04-25 07:18:27 -07:00
Daniel Imms 8d77b1ae16 Merge pull request #2869 from Tyriar/vs95556
Invalidate all links above when the terminal scrolls
2020-04-25 07:17:20 -07:00
Daniel Imms c185529ad5 Make sure selection gets redrawn when switching renderers
Fixes #2555
2020-04-25 07:11:43 -07:00
Daniel Imms 3a5def98e5 Correct selection types being optional 2020-04-25 06:56:00 -07:00
Daniel Imms 603c68bd69 Merge branch 'master' into vs95556 2020-04-25 06:46:02 -07:00
Daniel Imms 2f984964da Merge pull request #2868 from Tyriar/2595_selection_colors
Refresh model colors after changing theme
2020-04-25 06:42:01 -07:00
Daniel Imms 22aaf0471a Invalidate all links above when the terminal scrolls
See microsoft/vscode#95556
2020-04-25 06:41:25 -07:00
Daniel Imms 1134d0d7d4 Refresh model colors after changing theme
Fixes #2595
2020-04-25 06:22:08 -07:00
rishab 45ff3ee637 Update SearchAddon.ts 2020-04-25 03:13:32 -07:00
rishab 50ba6bfa1b Wrap search back if there exists a result in search
Search must wrap back as it does when there are multiple lines.
2020-04-25 03:13:19 -07:00
Daniel Imms cdcbb1d6da Merge pull request #2866 from xtermjs/dependabot/npm_and_yarn/deep-equal-2.0.3
Bump deep-equal from 2.0.2 to 2.0.3
2020-04-24 05:09:50 -07:00
dependabot-preview[bot] 49bf22ace4 Bump deep-equal from 2.0.2 to 2.0.3
Bumps [deep-equal](https://github.com/inspect-js/node-deep-equal) from 2.0.2 to 2.0.3.
- [Release notes](https://github.com/inspect-js/node-deep-equal/releases)
- [Changelog](https://github.com/inspect-js/node-deep-equal/blob/master/CHANGELOG.md)
- [Commits](https://github.com/inspect-js/node-deep-equal/compare/v2.0.2...v2.0.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-24 08:02:20 +00:00
Daniel Imms 22fa95cf87 Merge pull request #2865 from xtermjs/dependabot/npm_and_yarn/webpack-4.43.0
Bump webpack from 4.42.1 to 4.43.0
2020-04-22 05:30:31 -07:00
dependabot-preview[bot] a76a889924 Bump webpack from 4.42.1 to 4.43.0
Bumps [webpack](https://github.com/webpack/webpack) from 4.42.1 to 4.43.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.42.1...v4.43.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-22 08:27:07 +00:00
Daniel Imms 8f7c6a635f Merge pull request #2864 from Tyriar/center_text
Center webgl text vertically
2020-04-21 18:23:14 -07:00
Daniel Imms 9ece6b1fbc Center webgl text vertically
Fixes #2613
2020-04-21 18:20:10 -07:00
Daniel Imms 9d7a45f459 Merge pull request #2862 from xtermjs/dependabot/npm_and_yarn/typescript-eslint/parser-2.29.0
Bump @typescript-eslint/parser from 2.28.0 to 2.29.0
2020-04-21 03:33:20 -07:00
dependabot-preview[bot] 0465ba24a2 Bump @typescript-eslint/parser from 2.28.0 to 2.29.0
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 2.28.0 to 2.29.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.29.0/packages/parser)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-21 10:22:18 +00:00
Daniel Imms b622c89967 Merge pull request #2861 from xtermjs/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-2.29.0
Bump @typescript-eslint/eslint-plugin from 2.28.0 to 2.29.0
2020-04-21 03:20:43 -07:00
dependabot-preview[bot] 7efb141f88 Bump @typescript-eslint/eslint-plugin from 2.28.0 to 2.29.0
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 2.28.0 to 2.29.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/v2.29.0/packages/eslint-plugin)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-21 08:13:30 +00:00
Daniel Imms d093912f9d Merge pull request #2859 from xtermjs/dependabot/npm_and_yarn/ts-loader-7.0.1
Bump ts-loader from 7.0.0 to 7.0.1
2020-04-20 07:20:17 -07:00
dependabot-preview[bot] 92e5c8d228 Bump ts-loader from 7.0.0 to 7.0.1
Bumps [ts-loader](https://github.com/TypeStrong/ts-loader) from 7.0.0 to 7.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/v7.0.0...v7.0.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-20 13:06:59 +00:00
Daniel Imms 68995e6ed8 Merge pull request #2858 from xtermjs/dependabot/npm_and_yarn/types/webpack-4.41.12
Bump @types/webpack from 4.41.11 to 4.41.12
2020-04-20 06:05:01 -07:00
dependabot-preview[bot] edac29fe51 Bump @types/webpack from 4.41.11 to 4.41.12
Bumps [@types/webpack](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/webpack) from 4.41.11 to 4.41.12.
- [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-04-20 08:35:06 +00:00
Daniel Imms e7f72a1ba8 Merge pull request #2857 from Tyriar/decoration_customizations
Allow embedders to customize link decorations independently
2020-04-19 04:24:50 -07:00
Daniel Imms d0519d6c25 Fix tests 2020-04-19 04:20:10 -07:00
Daniel Imms 2ce435f98d Allow embedders to customize link decorations independently
See microsoft/vscode#95631
2020-04-19 04:07:22 -07:00
Daniel Imms 67fde3e941 Merge pull request #2856 from Tyriar/link_underline
Prevent hover callbacks firing if the mouse is outside the viewport
2020-04-18 18:27:12 -07:00
Daniel Imms 1282c060fc Prevent hover callbacks firing if the mouse is outside the viewport
Fixes #2849
2020-04-18 18:02:51 -07:00
Daniel Imms 52f1fc943d Merge pull request #2855 from Tyriar/link_underline
Polish link decorations and better support embedder hovers
2020-04-18 10:21:57 -07:00
Daniel Imms 88ff19383b Allow embedders to designate link hover elements 2020-04-18 09:13:09 -07:00
Daniel Imms 832312e095 Change hideUnderline to hideDecorations
Also track cursor style
2020-04-18 06:23:46 -07:00
Daniel Imms f2ed01993d Track changes to hideUnderline 2020-04-18 06:18:01 -07:00
Daniel Imms ccf869e671 Merge pull request #2854 from Tyriar/hide_underline
Allow hiding of link underlines
2020-04-17 19:01:22 -07:00
Daniel Imms 48f579977e Allow hiding of link underlines
See microsoft/vscode#95080
2020-04-17 18:46:01 -07:00
Daniel Imms ab595659c2 Merge pull request #2852 from Tyriar/mouseleave
Clear link when leaving xterm link
2020-04-17 17:38:45 -07:00
Daniel Imms 0cd2b78425 Clear link when leaving xterm link
Fixes #2851
2020-04-17 17:30:53 -07:00
Daniel Imms c1e618fc3b Merge pull request #2830 from kumaran-14/2702_api_test_debug
Add api-test script to log poll result on passing --debug flag
2020-04-15 08:04:12 -07:00
Daniel Imms 934b9faf36 Merge branch 'master' into 2702_api_test_debug 2020-04-15 06:52:14 -07:00
Daniel Imms 2836dcb71f Merge pull request #2845 from xtermjs/dependabot/npm_and_yarn/ts-loader-7.0.0
Bump ts-loader from 6.2.2 to 7.0.0
2020-04-15 06:09:39 -07:00
dependabot-preview[bot] 2b874c5817 Bump ts-loader from 6.2.2 to 7.0.0
Bumps [ts-loader](https://github.com/TypeStrong/ts-loader) from 6.2.2 to 7.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/v6.2.2...v7.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-15 08:12:32 +00:00
Daniel Imms 19b73d2ba7 Merge pull request #2842 from xtermjs/dependabot/npm_and_yarn/typescript-eslint/parser-2.28.0
Bump @typescript-eslint/parser from 2.27.0 to 2.28.0
2020-04-14 06:36:51 -07:00
Daniel Imms 548a17d94c Merge pull request #2844 from Tyriar/2824
Enforce explicit access modifiers
2020-04-14 06:36:34 -07:00
Daniel Imms de4005d470 Merge branch 'master' into 2824 2020-04-14 06:31:48 -07:00
dependabot-preview[bot] 46e9b9499c Bump @typescript-eslint/parser from 2.27.0 to 2.28.0
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 2.27.0 to 2.28.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.28.0/packages/parser)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-14 13:26:53 +00:00
Daniel Imms 580b06ada5 Merge pull request #2843 from xtermjs/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-2.28.0
Bump @typescript-eslint/eslint-plugin from 2.27.0 to 2.28.0
2020-04-14 06:25:15 -07:00
Daniel Imms 1472e7b051 Merge branch 'master' into 2824 2020-04-14 06:25:06 -07:00
Daniel Imms 9817754f92 Fix explicit access 2020-04-14 06:23:11 -07:00
dependabot-preview[bot] 05f1959c83 Bump @typescript-eslint/eslint-plugin from 2.27.0 to 2.28.0
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 2.27.0 to 2.28.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/v2.28.0/packages/eslint-plugin)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-14 13:08:53 +00:00
Daniel Imms 80a692a751 Merge pull request #2841 from xtermjs/dependabot/npm_and_yarn/types/ws-7.2.4
Bump @types/ws from 7.2.3 to 7.2.4
2020-04-14 06:07:11 -07:00
Daniel Imms a5ebb6d98c Add member access eslint rule 2020-04-14 06:03:47 -07:00
Daniel Imms 04c1e4b57d Remove readonly from ctors 2020-04-14 06:03:31 -07:00
dependabot-preview[bot] f8f9c06ed8 Bump @types/ws from 7.2.3 to 7.2.4
Bumps [@types/ws](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/ws) from 7.2.3 to 7.2.4.
- [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-04-14 08:14:38 +00:00
kumaran-14 1f4b2607cc Replace flatMap method with reduce and map 2020-04-13 22:36:33 +05:30
Daniel Imms f0c518a134 Merge pull request #2838 from xtermjs/dependabot/npm_and_yarn/types/jsdom-16.2.1
Bump @types/jsdom from 16.2.0 to 16.2.1
2020-04-13 06:33:50 -07:00
dependabot-preview[bot] c396518736 Bump @types/jsdom from 16.2.0 to 16.2.1
Bumps [@types/jsdom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jsdom) from 16.2.0 to 16.2.1.
- [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-04-13 12:34:17 +00:00
Daniel Imms d6a45b511e Merge pull request #2839 from xtermjs/dependabot/npm_and_yarn/types/webpack-4.41.11
Bump @types/webpack from 4.41.10 to 4.41.11
2020-04-13 05:32:38 -07:00
dependabot-preview[bot] f5c4c3e450 Bump @types/webpack from 4.41.10 to 4.41.11
Bumps [@types/webpack](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/webpack) from 4.41.10 to 4.41.11.
- [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-04-13 08:19:05 +00:00
Daniel Imms aecfb5772d Merge pull request #2835 from Tyriar/2822
Add linkTooltipHoverDuration setting
2020-04-11 10:08:30 -07:00
Daniel Imms 3b7b936582 Merge pull request #2837 from Tyriar/2836
Only fire IRenderService.onRender when buffer changes occurred
2020-04-11 09:59:34 -07:00
Daniel Imms 309bdf3d70 Rename onRender 2020-04-11 09:53:32 -07:00
Daniel Imms 55f9203f60 Only fire IRenderService.onRender when buffer changes occurred
Fixes #2836
2020-04-11 09:51:28 -07:00
kumaran-14 df7ba37d57 Update args parser to allow flag values 2020-04-11 21:15:24 +05:30
kumaran-14 96cb4e9a52 Merge remote-tracking branch 'upstream/master' into 2702_api_test_debug 2020-04-11 19:55:36 +05:30
Daniel Imms f070be8dd3 Add deprecated with explanation 2020-04-11 07:23:53 -07:00
Daniel Imms 3408a0537f Add linkTooltipHoverDuration setting
Fixes #2822
2020-04-11 07:22:20 -07:00
Daniel Imms 5669cf832f Merge branch 'master' into reverse_wraparound 2020-04-11 06:41:28 -07:00
Daniel Imms e2ac4b45d0 Merge pull request #2834 from Tyriar/2833
Fix selection wrapping to end when not beyond viewport
2020-04-11 06:38:50 -07:00
Daniel Imms 714daba393 Fix selection wrapping to end when not beyond viewport
This was happening as the devicePixelRatio wasn't being taken into account,
the fix was to rely on IRenderService to get the right canvas height.

Fixes #2833
2020-04-11 06:31:58 -07:00
Daniel Imms 1913e9512c Merge pull request #2718 from kumaran-14/2498_alt_enter
Support alt+enter key signal by default
2020-04-11 05:49:33 -07:00
kumaran-14 ae72994cfb Undo changes on ./bin/test.js 2020-04-11 12:02:27 +05:30
kumaran-14 f9b2f3e87d Add api-test script to log poll result on passing --debug flag 2020-04-11 11:54:58 +05:30
Daniel Imms e05bf87528 Merge pull request #2829 from Tyriar/lgtm
Fix most lgtm warnings
2020-04-10 14:22:24 -07:00
Daniel Imms 7609a5456e Fix most lgtm warnings 2020-04-10 14:08:28 -07:00
Daniel Imms e61c34b85f Merge branch 'master' into 2498_alt_enter 2020-04-10 12:53:16 -07:00
Daniel Imms ba0dc60b09 Combine into ternary 2020-04-10 12:53:02 -07:00
kumaran-14 3ef41f2b1d Remove decset modes from coreservices 2020-04-10 23:19:31 +05:30
Daniel Imms 2e6f547bfc Merge branch 'master' into reverse_wraparound 2020-04-10 10:30:30 -07:00
Daniel Imms 9460e915cd Merge branch 'master' into underline_core 2020-04-10 09:22:07 -07:00
Jörg Breitbart 120527cb41 underline color support, test cases 2020-03-08 22:56:58 +01:00
Jörg Breitbart 058f33cd7b update vt docs 2020-03-08 20:25:26 +01:00
Jörg Breitbart 88582726b7 implement SGR 21, sequence tests 2020-03-08 20:08:22 +01:00
Jörg Breitbart fd5f5e3204 extend AttributeData with eAttrs, implement SGR 4 subparams, tests 2020-03-08 18:57:05 +01:00
jerch 23cacbf81a Merge branch 'master' into reverse_wraparound 2020-02-22 23:49:25 +01:00
Jörg Breitbart d35d12f671 Merge branch 'reverse_wraparound' of github.com:jerch/xterm.js into reverse_wraparound 2020-02-21 18:24:55 +01:00
Jörg Breitbart cb31179274 respect scroll margins, tests 2020-02-21 18:23:00 +01:00
kumaran-14 c9277c3c72 Remove altEscape DECSET mode and add support for alt+esc key 2020-02-21 13:13:46 +05:30
kumaran-14 5896a05ca6 Change decset flag to altEscMode 2020-02-20 00:21:33 +05:30
jerch 5cf0aadd84 Merge branch 'master' into reverse_wraparound 2020-02-18 20:12:55 +01:00
Jörg Breitbart 62ea2c691e wide char tests 2020-02-17 12:39:36 +01:00
Jörg Breitbart 7de600cc64 test case for clearing cells to the right on early wrap-around 2020-02-17 12:30:35 +01:00
Jörg Breitbart 0c703276b1 fix behavior, first BS tests 2020-02-17 12:22:53 +01:00
Jörg Breitbart f736b6c299 comment missing empty cell handling 2020-02-16 20:53:53 +01:00
Jörg Breitbart 6f886fe167 working draft 2020-02-16 20:41:55 +01:00
kumaran-14 b75ae0f7b1 Support alt+Enter key signal by default 2020-02-14 20:00:03 +05:30
200 changed files with 9800 additions and 7272 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/
+52 -38
View File
@@ -9,52 +9,66 @@
"project": [
"src/browser/tsconfig.json",
"src/common/tsconfig.json",
"src/tsconfig.json",
"test/api/tsconfig.json",
"test/benchmark/tsconfig.json",
"addons/xterm-addon-attach/src/tsconfig.json",
"addons/xterm-addon-attach/test/tsconfig.json",
"addons/xterm-addon-fit/src/tsconfig.json",
"addons/xterm-addon-fit/test/tsconfig.json",
"addons/xterm-addon-ligatures/src/tsconfig.json",
"addons/xterm-addon-search/src/tsconfig.json",
"addons/xterm-addon-unicode11/src/tsconfig.json",
"addons/xterm-addon-web-links/src/tsconfig.json",
"addons/xterm-addon-webgl/src/tsconfig.json",
"addons/xterm-addon-search/test/tsconfig.json",
"addons/xterm-addon-serialize/src/tsconfig.json",
"addons/xterm-addon-serialize/benchmark/tsconfig.json"
"addons/xterm-addon-serialize/test/tsconfig.json",
"addons/xterm-addon-serialize/benchmark/tsconfig.json",
"addons/xterm-addon-unicode11/src/tsconfig.json",
"addons/xterm-addon-unicode11/test/tsconfig.json",
"addons/xterm-addon-web-links/src/tsconfig.json",
"addons/xterm-addon-web-links/test/tsconfig.json",
"addons/xterm-addon-webgl/src/tsconfig.json",
"addons/xterm-addon-webgl/test/tsconfig.json"
],
"sourceType": "module"
},
"ignorePatterns": [
"**/typings/*.d.ts"
"**/typings/*.d.ts",
"**/node_modules",
"**/*.js"
],
"plugins": [
"@typescript-eslint"
],
"rules": {
"no-extra-semi": "error",
"@typescript-eslint/array-type": [
"error",
"warn",
{
"default": "array-simple",
"readonly": "generic"
}
],
"@typescript-eslint/class-name-casing": "error",
"@typescript-eslint/consistent-type-definitions": "error",
"@typescript-eslint/consistent-type-definitions": "warn",
"@typescript-eslint/explicit-function-return-type": [
"error",
"warn",
{
"allowExpressions": true
}
],
"@typescript-eslint/explicit-member-accessibility": [
"warn",
{
"accessibility": "explicit",
"overrides": {
"constructors": "off"
}
}
],
"@typescript-eslint/indent": [
"error",
"warn",
2
],
"@typescript-eslint/interface-name-prefix": [
"error",
"always"
],
"@typescript-eslint/member-delimiter-style": [
"error",
"warn",
{
"multiline": {
"delimiter": "semi",
@@ -67,7 +81,7 @@
}
],
"@typescript-eslint/naming-convention": [
"error",
"warn",
{ "selector": "default", "format": ["camelCase"] },
// variableLike
{ "selector": "variable", "format": ["camelCase", "UPPER_CASE"] },
@@ -83,19 +97,19 @@
{ "selector": "typeLike", "format": ["PascalCase"] },
{ "selector": "interface", "format": ["PascalCase"], "prefix": ["I"] }
],
"@typescript-eslint/prefer-namespace-keyword": "error",
"@typescript-eslint/type-annotation-spacing": "error",
"@typescript-eslint/prefer-namespace-keyword": "warn",
"@typescript-eslint/type-annotation-spacing": "warn",
"@typescript-eslint/quotes": [
"error",
"warn",
"single",
{ "allowTemplateLiterals": true }
],
"@typescript-eslint/semi": [
"error",
"warn",
"always"
],
"comma-dangle": [
"error",
"warn",
{
"objects": "never",
"arrays": "never",
@@ -103,43 +117,43 @@
}
],
"curly": [
"error",
"warn",
"multi-line"
],
"eol-last": "error",
"eol-last": "warn",
"eqeqeq": [
"error",
"warn",
"always"
],
"keyword-spacing": "error",
"new-parens": "error",
"no-duplicate-imports": "error",
"keyword-spacing": "warn",
"new-parens": "warn",
"no-duplicate-imports": "warn",
"no-else-return": [
"error",
"warn",
{
"allowElseIf": false
}
],
"no-eval": "error",
"no-irregular-whitespace": "error",
"no-eval": "warn",
"no-irregular-whitespace": "warn",
"no-restricted-imports": [
"error",
"warn",
{
"patterns": [
".*\\/out\\/.*"
]
}
],
"no-trailing-spaces": "error",
"no-unsafe-finally": "error",
"no-var": "error",
"no-trailing-spaces": "warn",
"no-unsafe-finally": "warn",
"no-var": "warn",
"one-var": [
"error",
"warn",
"never"
],
"prefer-const": "error",
"prefer-const": "warn",
"spaced-comment": [
"error",
"warn",
"always",
{
"markers": ["/"],
-19
View File
@@ -1,19 +0,0 @@
FROM node:8
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
+11 -2
View File
@@ -87,7 +87,7 @@ The xterm.js team maintains the following addons but they can be built by anyone
Since xterm.js is typically implemented as a developer tool, only modern browsers are supported officially. Specifically the latest versions of *Chrome*, *Edge*, *Firefox* and *Safari*.
We also partially support *Intenet Explorer 11*, meaning xterm.js should work for the most part, but we reserve the right to not provide workarounds specifically for it unless it's absolutely necessary to get the basic input/output flow working.
We also partially support *Internet Explorer 11*, meaning xterm.js should work for the most part, but we reserve the right to not provide workarounds specifically for it unless it's absolutely necessary to get the basic input/output flow working.
Xterm.js works seamlessly in [Electron](https://electronjs.org/) apps and may even work on earlier versions of the browsers, these are the versions we strive to keep working.
@@ -161,7 +161,16 @@ Xterm.js is used in several world-class applications to provide great terminal e
- [**FluffOS**](https://www.fluffos.info): Active maintained LPMUD driver with websocket support.
- [**x-terminal**](https://atom.io/packages/x-terminal): Atom plugin for providing terminals inside your Atom workspace.
- [**CoCalc**](https://cocalc.com/): Lots of free software pre-installed, to chat, collaborate, develop, program, publish, research, share, teach, in C++, HTML, Julia, Jupyter, LaTeX, Markdown, Python, R, SageMath, Scala, ...
- [**Dank Domain**](https://www.DDgame.us/): Open source multiuser medieval game supporting old & new terminal emulation.
- [**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.
- [**TRASA**](https://trasa.io): Zero trust access to Web, SSH, RDP and Database services.
- [**Commas**](https://github.com/CyanSalt/commas): Commas is a hackable terminal and command runner.
- [**Devtron**](https://github.com/devtron-labs/devtron): Software Delivery Workflow For Kubernetes.
[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.
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "xterm-addon-attach",
"version": "0.5.0",
"version": "0.6.0",
"author": {
"name": "The xterm.js authors",
"url": "https://xtermjs.org/"
@@ -10,7 +10,7 @@
"repository": "https://github.com/xtermjs/xterm.js",
"license": "MIT",
"scripts": {
"build": "../../node_modules/.bin/tsc -p src",
"build": "../../node_modules/.bin/tsc -p .",
"prepackage": "npm run build",
"package": "../../node_modules/.bin/webpack",
"prepublishOnly": "npm run package"
+1 -2
View File
@@ -12,8 +12,7 @@
"removeComments": true,
"strict": true,
"types": [
"../../../node_modules/@types/mocha",
"../../../out-test/api/TestUtils"
"../../../node_modules/@types/mocha"
]
},
"include": [
@@ -5,7 +5,7 @@
import WebSocket = require('ws');
import { openTerminal, pollFor, getBrowserType } from '../../../out-test/api/TestUtils';
import { Browser, Page } from 'playwright-core';
import { Browser, Page } from 'playwright';
const APP = 'http://127.0.0.1:3000/test';
@@ -17,7 +17,7 @@ const height = 600;
describe('AttachAddon', () => {
before(async function(): Promise<any> {
const browserType = getBrowserType();
browser = await browserType.launch({ dumpio: true,
browser = await browserType.launch({
headless: process.argv.indexOf('--headless') !== -1
});
page = await (await browser.newContext()).newPage();
@@ -0,0 +1,23 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"lib": [
"es2015"
],
"rootDir": ".",
"outDir": "../out-test",
"sourceMap": true,
"removeComments": true,
"strict": true,
"types": [
"../../../node_modules/@types/mocha",
"../../../node_modules/@types/node",
"../../../out-test/api/TestUtils"
]
},
"include": [
"./**/*",
"../../../typings/xterm.d.ts"
]
}
+8
View File
@@ -0,0 +1,8 @@
{
"files": [],
"include": [],
"references": [
{ "path": "./src" },
{ "path": "./test" }
]
}
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "xterm-addon-fit",
"version": "0.3.0",
"version": "0.5.0",
"author": {
"name": "The xterm.js authors",
"url": "https://xtermjs.org/"
@@ -10,7 +10,7 @@
"repository": "https://github.com/xtermjs/xterm.js",
"license": "MIT",
"scripts": {
"build": "../../node_modules/.bin/tsc -p src",
"build": "../../node_modules/.bin/tsc -p .",
"prepackage": "npm run build",
"package": "../../node_modules/.bin/webpack",
"prepublishOnly": "npm run package"
+4
View File
@@ -59,6 +59,10 @@ export class FitAddon implements ITerminalAddon {
// TODO: Remove reliance on private API
const core = (this._terminal as any)._core;
if (core._renderService.dimensions.actualCellWidth === 0 || core._renderService.dimensions.actualCellHeight === 0) {
return undefined;
}
const parentElementStyle = window.getComputedStyle(this._terminal.element.parentElement);
const parentElementHeight = parseInt(parentElementStyle.getPropertyValue('height'));
const parentElementWidth = Math.max(0, parseInt(parentElementStyle.getPropertyValue('width')));
+1 -2
View File
@@ -12,8 +12,7 @@
"removeComments": true,
"strict": true,
"types": [
"../../../node_modules/@types/mocha",
"../../../out-test/api/TestUtils"
"../../../node_modules/@types/mocha"
]
},
"include": [
@@ -5,7 +5,7 @@
import { assert } from 'chai';
import { openTerminal, getBrowserType } from '../../../out-test/api/TestUtils';
import { Browser, Page } from 'playwright-core';
import { Browser, Page } from 'playwright';
const APP = 'http://127.0.0.1:3000/test';
@@ -17,12 +17,16 @@ const height = 768;
describe('FitAddon', () => {
before(async function(): Promise<any> {
const browserType = getBrowserType();
browser = await browserType.launch({ dumpio: true,
browser = await browserType.launch({
headless: process.argv.indexOf('--headless') !== -1
});
page = await (await browser.newContext()).newPage();
await page.setViewportSize({ width, height });
await page.goto(APP);
});
beforeEach(async function(): Promise<any> {
await page.evaluate(`document.querySelector('#terminal-container').style.display=''`);
await openTerminal(page);
});
@@ -30,6 +34,10 @@ describe('FitAddon', () => {
await browser.close();
});
afterEach(async function(): Promise<any> {
await page.evaluate(`window.term.dispose()`);
});
it('no terminal', async function(): Promise<any> {
await page.evaluate(`window.fit = new FitAddon();`);
assert.equal(await page.evaluate(`window.fit.proposeDimensions()`), undefined);
@@ -63,6 +71,15 @@ describe('FitAddon', () => {
rows: 1
});
});
it('hidden', async function(): Promise<any> {
await page.evaluate(`window.term.dispose()`);
await page.evaluate(`document.querySelector('#terminal-container').style.display='none'`);
await page.evaluate(`window.term = new Terminal()`);
await page.evaluate(`window.term.open(document.querySelector('#terminal-container'))`);
await loadFit();
assert.equal(await page.evaluate(`window.fit.proposeDimensions()`), undefined);
});
});
describe('fit', () => {
+23
View File
@@ -0,0 +1,23 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"lib": [
"es2015"
],
"rootDir": ".",
"outDir": "../out-test",
"sourceMap": true,
"removeComments": true,
"strict": true,
"types": [
"../../../node_modules/@types/mocha",
"../../../node_modules/@types/node",
"../../../out-test/api/TestUtils"
]
},
"include": [
"./**/*",
"../../../typings/xterm.d.ts"
]
}
+8
View File
@@ -0,0 +1,8 @@
{
"files": [],
"include": [],
"references": [
{ "path": "./src" },
{ "path": "./test" }
]
}
+13
View File
@@ -0,0 +1,13 @@
node_modules/
.nyc_output/
coverage/
lib/
fonts/
.env
.vscode/
*.swp
*.tgz
npm-debug.log*
yarn-error.log*
+48
View File
@@ -0,0 +1,48 @@
# Blacklist - exclude everything except npm defaults such as LICENSE, etc
*
!*/
# Whitelist - entries to be included must be negated with "!"
!*.js
!*.json
# Whitelist - lib/
!lib/**/*.d.ts
!lib/**/*.js
!lib/**/*.js.map
# Whitelist - out/
!out/**/*.d.ts
!out/**/*.js
!out/**/*.js.map
# Whitelist - src/
!src/**/*.ts
!src/**/*.d.ts
!src/**/*.js
!src/**/*.js.map
# Whitelist - typings/
!typings/**/*.d.ts
# Blacklist - (normal behavior) these will override any whitelist
*.test.ts
*.test.d.ts
*.test.js
*.test.js.map
docs/
/.idea/
.vscode/
coverage/
.nyc_output/
fonts/
**/*.api.js
**/*.api.ts
tsconfig.json
.yarnrc
webpack.config.js
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2018
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+53
View File
@@ -0,0 +1,53 @@
## xterm-addon-ligatures
Add support for programming ligatures to [xterm.js] when running in environments with access to [Node.js] APIs (such as [Electron]).
### Requirements
* [Node.js] 8.x or higher (present in [Electron] 1.8.3 or higher)
* [xterm.js] 4.0.0 or higher using the default canvas renderer
### Install
```bash
npm install --save xterm-addon-ligatures
```
### Usage
```ts
import { Terminal } from 'xterm';
import { LigaturesAddon } from 'xterm-addon-ligatures';
const terminal = new Terminal();
const ligaturesAddon = new LigaturesAddon();
terminal.open(containerElement);
terminal.loadAddon(ligaturesAddon);
```
### How It Works
In a browser environment, font ligature information is read directly by the web browser and used to render text correctly without any intervention from the developer. As of version 3, xterm.js uses the canvas to render characters individually, resulting in a significant performance boost. However, this means that it can no longer lean on the browser to determine when to draw font ligatures.
This package locates the font file on disk for the font currently in use by the terminal and parses the ligature information out of it (via the [font-ligatures] package). As text is rendered in xterm.js, this package annotates it with the locations of ligatures, allowing xterm.js to render it correctly.
Since this package depends on being able to find and resolve a system font from disk, it has to have system access that isn't available in the web browser. As a result, this package is mainly useful in environments that combine browser and Node.js runtimes (such as [Electron]).
### Fonts
This package makes use of the following fonts for testing:
* [Fira Code][Fira Code] - [Licensed under the OFL][Fira Code License] by Nikita
Prokopov, Mozilla Foundation with reserved names Fira Code, Fira Mono, and
Fira Sans
* [Iosevka] - [Licensed under the OFL][Iosevka License] by Belleve Invis with
reserved name Iosevka
[xterm.js]: https://github.com/xtermjs/xterm.js
[Electron]: https://electronjs.org/
[Node.js]: https://nodejs.org/
[font-ligatures]: https://github.com/princjef/font-ligatures
[Fira Code]: https://github.com/tonsky/FiraCode
[Fira Code License]: https://github.com/tonsky/FiraCode/blob/master/LICENSE
[Iosevka]: https://github.com/be5invis/Iosevka
[Iosevka License]: https://github.com/be5invis/Iosevka/blob/master/LICENSE.md
@@ -0,0 +1,75 @@
/**
* Copyright (c) 2018 The xterm.js authors. All rights reserved.
* @license MIT
*/
const fs = require('fs');
const path = require('path');
const util = require('util');
const axios = require('axios').default;
const mkdirp = require('mkdirp');
const yauzl = require('yauzl');
const urls = {
fira: 'https://github.com/tonsky/FiraCode/raw/d42e7276fa925e5f82748f3ec9ea429736611b48/distr/otf/FiraCode-Regular.otf',
iosevka: 'https://github.com/be5invis/Iosevka/releases/download/v1.14.3/01-iosevka-1.14.3.zip'
};
const writeFile = util.promisify(fs.writeFile);
const fontsFolder = path.join(__dirname, '../fonts');
async function download() {
await mkdirp(fontsFolder);
await downloadFiraCode();
await downloadIosevka();
console.log('Loaded all fonts for testing')
}
async function downloadFiraCode() {
const file = path.join(fontsFolder, 'firaCode.otf');
if (await util.promisify(fs.exists)(file)) {
console.log('Fira Code already loaded');
} else {
console.log('Downloading Fira Code...');
await writeFile(
file,
(await axios.get(urls.fira, { responseType: 'arraybuffer' })).data
);
}
}
async function downloadIosevka() {
const file = path.join(fontsFolder, 'iosevka.ttf');
if (await util.promisify(fs.exists)(file)) {
console.log('Iosevka already loaded');
} else {
console.log('Downloading Iosevka...');
const iosevkaContents = (await axios.get(urls.iosevka, { responseType: 'arraybuffer' })).data;
const iosevkaZipfile = await util.promisify(yauzl.fromBuffer)(iosevkaContents);
await new Promise((resolve, reject) => {
iosevkaZipfile.on('entry', entry => {
if (entry.fileName === 'ttf/iosevka-regular.ttf') {
iosevkaZipfile.openReadStream(entry, (err, stream) => {
if (err) {
return reject(err);
}
const writeStream = fs.createWriteStream(file);
stream.pipe(writeStream);
writeStream.on('close', () => resolve());
});
}
});
});
}
}
download();
process.on('unhandledRejection', e => {
console.error(e);
process.exit(1);
});
+47
View File
@@ -0,0 +1,47 @@
{
"name": "xterm-addon-ligatures",
"version": "0.4.0",
"description": "Add support for programming ligatures to xterm.js",
"author": {
"name": "The xterm.js authors",
"url": "https://xtermjs.org/"
},
"main": "lib/xterm-addon-ligatures.js",
"types": "typings/xterm-addon-ligatures.d.ts",
"repository": "https://github.com/xtermjs/xterm.js",
"engines": {
"node": ">8.0.0"
},
"scripts": {
"prepare": "node bin/download-fonts.js",
"build": "tsc -p src",
"watch": "tsc -w -p src",
"prepackage": "npm run build",
"package": "webpack",
"pretest": "npm run build",
"test": "nyc mocha out/**/*.test.js",
"prepublish": "npm run package"
},
"keywords": [
"font",
"ligature",
"xterm",
"xterm.js",
"terminal"
],
"license": "MIT",
"dependencies": {
"font-finder": "^1.1.0",
"font-ligatures": "^1.3.3"
},
"devDependencies": {
"@types/sinon": "^5.0.1",
"axios": "^0.18.0",
"mkdirp": "0.5.5",
"sinon": "6.3.5",
"yauzl": "^2.10.0"
},
"peerDependencies": {
"xterm": "^4.0.0"
}
}
@@ -0,0 +1,23 @@
/**
* Copyright (c) 2018 The xterm.js authors. All rights reserved.
* @license MIT
*/
import { Terminal } from 'xterm';
import { enableLigatures } from '.';
export interface ITerminalAddon {
activate(terminal: Terminal): void;
dispose(): void;
}
export class LigaturesAddon implements ITerminalAddon {
constructor() {}
public activate(terminal: Terminal): void {
enableLigatures(terminal);
}
public dispose(): void {}
}
+53
View File
@@ -0,0 +1,53 @@
/**
* Copyright (c) 2018 The xterm.js authors. All rights reserved.
* @license MIT
*/
import * as fontFinder from 'font-finder';
import * as fontLigatures from 'font-ligatures';
import parse from './parse';
let fontsPromise: Promise<fontFinder.FontList> | undefined = undefined;
/**
* Loads the font ligature wrapper for the specified font family if it could be
* resolved, throwing if it is unable to find a suitable match.
* @param fontFamily The CSS font family definition to resolve
* @param cacheSize The size of the ligature cache to maintain if the font is resolved
*/
export default async function load(fontFamily: string, cacheSize: number): Promise<fontLigatures.Font | undefined> {
if (!fontsPromise) {
fontsPromise = fontFinder.list();
}
const fonts = await fontsPromise;
for (const family of parse(fontFamily)) {
// If we reach one of the generic font families, the font resolution
// will end for the browser and we can't determine the specific font
// used. Throw.
if (genericFontFamilies.includes(family)) {
return undefined;
}
if (fonts.hasOwnProperty(family) && fonts[family].length > 0) {
return await fontLigatures.loadFile(fonts[family][0].path, { cacheSize });
}
}
// If none of the fonts could resolve, throw an error
return undefined;
}
// https://drafts.csswg.org/css-fonts-4/#generic-font-families
const genericFontFamilies = [
'serif',
'sans-serif',
'cursive',
'fantasy',
'monospace',
'system-ui',
'emoji',
'math',
'fangsong'
];
@@ -0,0 +1,222 @@
/**
* Copyright (c) 2018 The xterm.js authors. All rights reserved.
* @license MIT
*/
import * as path from 'path';
import * as sinon from 'sinon';
import { assert } from 'chai';
import * as fontFinder from 'font-finder';
import * as fontLigatures from 'font-ligatures';
import * as ligatureSupport from '.';
describe('xterm-addon-ligatures', () => {
let onRefresh: sinon.SinonStub;
let term: MockTerminal;
// -> forms a ligature in Fira Code and Iosevka, but www only forms a ligature
// in Fira Code
const input = 'a -> b www c';
before(() => {
sinon.stub(fontFinder, 'list').returns(Promise.resolve({
// eslint-disable-next-line @typescript-eslint/naming-convention
'Fira Code': [{
path: path.join(__dirname, '../fonts/firaCode.otf'),
style: fontFinder.Style.Regular,
type: fontFinder.Type.Monospace,
weight: 400
}],
// eslint-disable-next-line @typescript-eslint/naming-convention
'Iosevka': [{
path: path.join(__dirname, '../fonts/iosevka.ttf'),
style: fontFinder.Style.Regular,
type: fontFinder.Type.Monospace,
weight: 400
}],
// eslint-disable-next-line @typescript-eslint/naming-convention
'Nonexistant Font': [{
path: path.join(__dirname, '../fonts/nonexistant.ttf'),
style: fontFinder.Style.Regular,
type: fontFinder.Type.Monospace,
weight: 400
}]
} as fontFinder.FontList));
});
beforeEach(() => {
onRefresh = sinon.stub();
term = new MockTerminal(onRefresh);
ligatureSupport.enableLigatures(term as any);
});
it('registers itself correctly', () => {
const term = new MockTerminal(sinon.spy());
assert.isUndefined(term.joiner);
ligatureSupport.enableLigatures(term as any);
assert.isFunction(term.joiner);
});
it('registers itself correctly when called directly', () => {
const term = new MockTerminal(sinon.spy());
assert.isUndefined(term.joiner);
ligatureSupport.enableLigatures(term as any);
assert.isFunction(term.joiner);
});
it('returns an empty set of ranges on the first call while the font is loading', () => {
assert.deepEqual(term.joiner!(input), []);
});
it('returns the correct set of ranges once the font has loaded', done => {
assert.deepEqual(term.joiner!(input), []);
onRefresh.callsFake(() => {
assert.deepEqual(term.joiner!(input), [[2, 4], [7, 10]]);
done();
});
});
it('handles quoted font names', done => {
term.setOption('fontFamily', '"Fira Code", monospace');
assert.deepEqual(term.joiner!(input), []);
onRefresh.callsFake(() => {
assert.deepEqual(term.joiner!(input), [[2, 4], [7, 10]]);
done();
});
});
it('falls back to later fonts if earlier ones are not present', done => {
term.setOption('fontFamily', 'notinstalled, Fira Code, monospace');
assert.deepEqual(term.joiner!(input), []);
onRefresh.callsFake(() => {
assert.deepEqual(term.joiner!(input), [[2, 4], [7, 10]]);
done();
});
});
it('uses the current font value', done => {
// The first three calls are all synchronous so that we don't allow time for
// any fonts to load while we're switching things around
term.setOption('fontFamily', 'Fira Code');
assert.deepEqual(term.joiner!(input), []);
term.setOption('fontFamily', 'notinstalled');
assert.deepEqual(term.joiner!(input), []);
term.setOption('fontFamily', 'Iosevka');
assert.deepEqual(term.joiner!(input), []);
onRefresh.callsFake(() => {
assert.deepEqual(term.joiner!(input), [[2, 4]]);
// And switch it back to Fira Code for good measure
term.setOption('fontFamily', 'Fira Code');
// At this point, we haven't loaded the new font, so the result reverts
// back to empty until that happens
assert.deepEqual(term.joiner!(input), []);
onRefresh.callsFake(() => {
assert.deepEqual(term.joiner!(input), [[2, 4], [7, 10]]);
done();
});
});
});
it('allows multiple terminal instances that use different fonts', done => {
const onRefresh2 = sinon.stub();
const term2 = new MockTerminal(onRefresh2);
term2.setOption('fontFamily', 'Iosevka');
ligatureSupport.enableLigatures(term2 as any);
assert.deepEqual(term.joiner!(input), []);
onRefresh.callsFake(() => {
assert.deepEqual(term.joiner!(input), [[2, 4], [7, 10]]);
assert.deepEqual(term2.joiner!(input), []);
onRefresh2.callsFake(() => {
assert.deepEqual(term2.joiner!(input), [[2, 4]]);
assert.deepEqual(term.joiner!(input), [[2, 4], [7, 10]]);
done();
});
});
});
it('fails if it finds but cannot load the font', async () => {
term.setOption('fontFamily', 'Nonexistant Font, monospace');
assert.deepEqual(term.joiner!(input), []);
await delay(500);
assert.isTrue(onRefresh.notCalled);
assert.throws(() => term.joiner!(input));
});
it('returns nothing if the font is not present on the system', async () => {
term.setOption('fontFamily', 'notinstalled');
assert.deepEqual(term.joiner!(input), []);
await delay(500);
assert.isTrue(onRefresh.notCalled);
assert.deepEqual(term.joiner!(input), []);
});
it('returns nothing if no specific font is specified', async () => {
term.setOption('fontFamily', 'monospace');
assert.deepEqual(term.joiner!(input), []);
await delay(500);
assert.isTrue(onRefresh.notCalled);
assert.deepEqual(term.joiner!(input), []);
});
it('returns nothing if no fonts are provided', async () => {
term.setOption('fontFamily', '');
assert.deepEqual(term.joiner!(input), []);
await delay(500);
assert.isTrue(onRefresh.notCalled);
assert.deepEqual(term.joiner!(input), []);
});
it('fails when given malformed inputs', async () => {
term.setOption('fontFamily', {} as any);
assert.deepEqual(term.joiner!(input), []);
await delay(500);
assert.isTrue(onRefresh.notCalled);
assert.throws(() => term.joiner!(input));
});
it('ensures no empty errors are thrown', async () => {
sinon.stub(fontLigatures, 'loadFile').callsFake(async () => { throw undefined; });
term.setOption('fontFamily', 'Iosevka');
assert.deepEqual(term.joiner!(input), []);
await delay(500);
assert.isTrue(onRefresh.notCalled);
assert.throws(() => term.joiner!(input), 'Failure while loading font');
(fontLigatures.loadFile as sinon.SinonStub).restore();
});
});
class MockTerminal {
private _options: { [name: string]: string | number } = {
fontFamily: 'Fira Code, monospace',
rows: 50
};
public joiner?: (text: string) => [number, number][];
public refresh: (start: number, end: number) => void;
constructor(onRefresh: (start: number, end: number) => void) {
this.refresh = onRefresh;
}
public registerCharacterJoiner(handler: (text: string) => [number, number][]): number {
this.joiner = handler;
return 1;
}
public deregisterCharacterJoiner(id: number): void {
this.joiner = undefined;
}
public setOption(name: string, value: string | number): void {
this._options[name] = value;
}
public getOption(name: string): string | number {
return this._options[name];
}
}
function delay(delayMs: number): Promise<void> {
return new Promise(resolve => setTimeout(resolve, delayMs));
}
+85
View File
@@ -0,0 +1,85 @@
/**
* Copyright (c) 2018 The xterm.js authors. All rights reserved.
* @license MIT
*/
import { Terminal } from 'xterm';
import { Font } from 'font-ligatures';
import load from './font';
const enum LoadingState {
UNLOADED,
LOADING,
LOADED,
FAILED
}
// Caches 100K characters worth of ligatures. In practice this works out to
// about 650 KB worth of cache, when a moderate number of ligatures are present.
const CACHE_SIZE = 100000;
/**
* Enable ligature support for the provided Terminal instance. To function
* properly, this must be called after `open()` is called on the therminal. If
* the font currently in use supports ligatures, the terminal will automatically
* start to render them.
* @param term Terminal instance from xterm.js
*/
export function enableLigatures(term: Terminal): void {
let currentFontName: string | undefined = undefined;
let font: Font | undefined = undefined;
let loadingState: LoadingState = LoadingState.UNLOADED;
let loadError: any | undefined = undefined;
term.registerCharacterJoiner((text: string): [number, number][] => {
// If the font hasn't been loaded yet, load it and return an empty result
const termFont = term.getOption('fontFamily');
if (
termFont &&
(loadingState === LoadingState.UNLOADED || currentFontName !== termFont)
) {
font = undefined;
loadingState = LoadingState.LOADING;
currentFontName = termFont;
const currentCallFontName = currentFontName;
load(currentCallFontName, CACHE_SIZE)
.then(f => {
// Another request may have come in while we were waiting, so make
// sure our font is still vaild.
if (currentCallFontName === term.getOption('fontFamily')) {
loadingState = LoadingState.LOADED;
font = f;
// Only refresh things if we actually found a font
if (f) {
term.refresh(0, term.getOption('rows') - 1);
}
}
})
.catch(e => {
// Another request may have come in while we were waiting, so make
// sure our font is still vaild.
if (currentCallFontName === term.getOption('fontFamily')) {
loadingState = LoadingState.FAILED;
font = undefined;
loadError = e;
}
});
}
if (font && loadingState === LoadingState.LOADED) {
// We clone the entries to avoid the internal cache of the ligature finder
// getting messed up.
return font.findLigatureRanges(text).map<[number, number]>(
range => [range[0], range[1]]
);
}
if (loadingState === LoadingState.FAILED) {
throw loadError || new Error('Failure while loading font');
}
return [];
});
}
@@ -0,0 +1,75 @@
/**
* Copyright (c) 2018 The xterm.js authors. All rights reserved.
* @license MIT
*/
import { assert } from 'chai';
import parse from './parse';
// TODO: integrate tests from http://test.csswg.org/suites/css-fonts-4_dev/nightly-unstable/
describe('parse', () => {
it('parses individual families', () => {
assert.deepEqual(parse('monospace'), ['monospace']);
});
it('parses multiple families', () => {
assert.deepEqual(parse('Arial, Verdana, serif'), ['Arial', 'Verdana', 'serif']);
});
it('parses quoted families', () => {
assert.deepEqual(parse('"Times New Roman", serif'), ['Times New Roman', 'serif']);
});
it('parses single quoted families', () => {
assert.deepEqual(parse('\'Times New Roman\', serif'), ['Times New Roman', 'serif']);
});
it('parses families with spaces in their names', () => {
assert.deepEqual(parse('Times New Roman, serif'), ['Times New Roman', 'serif']);
});
it('collapses multiple spaces together in identifiers', () => {
assert.deepEqual(parse('Times New Roman, serif'), ['Times New Roman', 'serif']);
});
it('does not collapse multiple spaces together in quoted strings', () => {
assert.deepEqual(parse('"Times New Roman", serif'), ['Times New Roman', 'serif']);
});
it('handles escaped characters in strings', () => {
assert.deepEqual(parse('"quote \\" slash \\\\ slashquote \\\\\\"", serif'), ['quote " slash \\ slashquote \\"', 'serif']);
});
it('fails if a family has an unterminated string', () => {
assert.throws(() => parse('"Unterminated, serif'));
});
it('handles unicode escape sequences', () => {
assert.deepEqual(parse('"space\\20 between", serif'), ['space between', 'serif']);
});
it('swallows only the first space after a unicode escape', () => {
assert.deepEqual(parse('"two-space\\20 between", serif'), ['two-space between', 'serif']);
});
it('automatically ends the unicode escape after six digits', () => {
assert.deepEqual(parse('space\\000020between, serif'), ['space between', 'serif']);
});
it('handles unicode escapes at the end of the family', () => {
assert.deepEqual(parse('endswithbrace \\7b, serif'), ['endswithbrace {', 'serif']);
});
it('handles unicode escapes at the end of the input', () => {
assert.deepEqual(parse('endswithbrace \\7b'), ['endswithbrace {']);
});
it('handles other escaped characters in identifiers', () => {
assert.deepEqual(parse('has\\,comma'), ['has,comma']);
});
it('swallows escaped newlines in strings', () => {
assert.deepEqual(parse('"multi \\\nline", serif'), ['multi line', 'serif']);
});
});
+180
View File
@@ -0,0 +1,180 @@
/**
* Copyright (c) 2018 The xterm.js authors. All rights reserved.
* @license MIT
*/
interface IParseContext {
input: string;
offset: number;
}
/**
* Parses a CSS font family value, returning the component font families
* contained within.
*
* @param family The CSS font family input string to parse
*/
export default function parse(family: string): string[] {
if (typeof family !== 'string') {
throw new Error('Font family must be a string');
}
const context: IParseContext = {
input: family,
offset: 0
};
const families = [];
let currentFamily = '';
// Work through the input character by character until there are none left.
// This lexing and parsing in one pass.
while (context.offset < context.input.length) {
const char = context.input[context.offset++];
switch (char) {
// String
case '\'':
case '"':
currentFamily += parseString(context, char);
break;
// End of family
case ',':
families.push(currentFamily);
currentFamily = '';
break;
default:
// Identifiers (whitespace between families is swallowed)
if (!/\s/.test(char)) {
context.offset--;
currentFamily += parseIdentifier(context);
families.push(currentFamily);
currentFamily = '';
}
}
}
return families;
}
/**
* Parse a CSS string.
*
* @param context Parsing input and offset
* @param quoteChar The quote character for the string (' or ")
*/
function parseString(context: IParseContext, quoteChar: '\'' | '"'): string {
let str = '';
let escaped = false;
while (context.offset < context.input.length) {
const char = context.input[context.offset++];
if (escaped) {
if (/[0-9a-fA-F]/.test(char)) {
// Unicode escape
context.offset--;
str += parseUnicode(context);
} else if (char !== '\n') {
// Newlines are ignored if escaped. Other characters are used as is.
str += char;
}
escaped = false;
} else {
switch (char) {
// Terminated quote
case quoteChar:
return str;
// Begin escape
case '\\':
escaped = true;
break;
// Add character to string
default:
str += char;
}
}
}
throw new Error('Unterminated string');
}
/**
* Parse a CSS custom identifier.
*
* @param context Parsing input and offset
*/
function parseIdentifier(context: IParseContext): string {
let str = '';
let escaped = false;
while (context.offset < context.input.length) {
const char = context.input[context.offset++];
if (escaped) {
if (/[0-9a-fA-F]/.test(char)) {
// Unicode escape
context.offset--;
str += parseUnicode(context);
} else {
// Everything else is used as is
str += char;
}
escaped = false;
} else {
switch (char) {
// Begin escape
case '\\':
escaped = true;
break;
// Terminate identifier
case ',':
return str;
default:
if (/\s/.test(char)) {
// Whitespace is collapsed into a single space within an identifier
if (!str.endsWith(' ')) {
str += ' ';
}
} else {
// Add other characters directly
str += char;
}
}
}
}
return str;
}
/**
* Parse a CSS unicode escape.
*
* @param context Parsing input and offset
*/
function parseUnicode(context: IParseContext): string {
let str = '';
while (context.offset < context.input.length) {
const char = context.input[context.offset++];
if (/\s/.test(char)) {
// The first whitespace character after a unicode escape indicates the end
// of the escape and is swallowed.
return unicodeToString(str);
}
if (str.length >= 6 || !/[0-9a-fA-F]/.test(char)) {
// If the next character is not a valid hex digit or we have reached the
// maximum of 6 digits in the escape, terminate the escape.
context.offset--;
return unicodeToString(str);
}
// Otherwise, just add it to the escape
str += char;
}
return unicodeToString(str);
}
/**
* Convert a unicode code point from a hex string to a utf8 string.
*
* @param codePoint Unicode code point represented as a hex string
*/
function unicodeToString(codePoint: string): string {
return String.fromCodePoint(parseInt(codePoint, 16));
}
@@ -0,0 +1,19 @@
{
"compilerOptions": {
"target": "es2017",
"module": "commonjs",
"sourceMap": true,
"outDir": "../out",
"rootDir": ".",
"strict": true,
"noUnusedLocals": true,
"preserveWatchOutput": true,
"types": [
"../../../node_modules/@types/mocha"
]
},
"include": [
"./**/*",
"../../../typings/xterm.d.ts"
]
}
@@ -0,0 +1,7 @@
{
"files": [],
"include": [],
"references": [
{ "path": "./src" }
]
}
@@ -0,0 +1,34 @@
/**
* Copyright (c) 2018 The xterm.js authors. All rights reserved.
* @license MIT
*
* This contains the type declarations for the xterm-addon-ligatures library.
* Note that some interfaces may differ between this file and the actual
* implementation in src/, that's because this file declares the *public* API
* which is intended to be stable and consumed by external programs.
*/
import { Terminal, ITerminalAddon } from 'xterm';
declare module 'xterm-addon-ligatures' {
/**
* An xterm.js addon that enables web links.
*/
export class LigaturesAddon implements ITerminalAddon {
/**
* Creates a new ligatures addon.
*/
constructor();
/**
* Activates the addon
* @param terminal The terminal the addon is being loaded in.
*/
public activate(terminal: Terminal): void;
/**
* Disposes the addon.
*/
public dispose(): void;
}
}
@@ -0,0 +1,36 @@
/**
* Copyright (c) 2019 The xterm.js authors. All rights reserved.
* @license MIT
*/
const path = require('path');
const addonName = 'LigaturesAddon';
const mainFile = 'xterm-addon-ligatures.js';
module.exports = {
entry: `./out/${addonName}.js`,
devtool: 'source-map',
target: 'electron-renderer',
module: {
rules: [
{
test: /\.js$/,
use: ["source-map-loader"],
enforce: "pre",
exclude: /node_modules/
}
]
},
output: {
filename: mainFile,
path: path.resolve('./lib'),
library: addonName,
libraryTarget: 'umd'
},
mode: 'production',
externals: {
'font-finder':'font-finder',
'font-ligatures':'font-ligatures'
}
};
+244
View File
@@ -0,0 +1,244 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
"@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:
type-detect "4.0.8"
"@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"
dependencies:
follow-redirects "1.5.10"
is-buffer "^2.0.2"
buffer-crc32@~0.2.3:
version "0.2.13"
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
debug@=3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
dependencies:
ms "2.0.0"
diff@^3.5.0:
version "3.5.0"
resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
fd-slicer@~1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
dependencies:
pend "~1.2.0"
follow-redirects@1.5.10:
version "1.5.10"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a"
dependencies:
debug "=3.1.0"
font-finder@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/font-finder/-/font-finder-1.0.4.tgz#2ca944954dd8d0e1b5bdc4c596cc08607761d89b"
dependencies:
get-system-fonts "^2.0.0"
promise-stream-reader "^1.0.1"
font-finder@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/font-finder/-/font-finder-1.1.0.tgz#2bff2b2762acba720239c8bec898a96daae90858"
integrity sha512-wpCL2uIbi6GurJbU7ZlQ3nGd61Ho+dSU6U83/xJT5UPFfN35EeCW/rOtS+5k+IuEZu2SYmHzDIPL9eA5tSYRAw==
dependencies:
get-system-fonts "^2.0.0"
promise-stream-reader "^1.0.1"
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"
opentype.js "^0.8.0"
get-system-fonts@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/get-system-fonts/-/get-system-fonts-2.0.0.tgz#a43b9a33f05c0715a60176d2aad5ce6e98f0a3c6"
has-flag@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
is-buffer@^2.0.2:
version "2.0.3"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725"
isarray@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
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"
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"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c"
dependencies:
pseudomap "^1.0.2"
yallist "^2.1.2"
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.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 "^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.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" "^3.2.1"
"@sinonjs/text-encoding" "^0.7.1"
just-extend "^4.0.2"
lolex "^5.0.1"
path-to-regexp "^1.7.0"
opentype.js@^0.8.0:
version "0.8.0"
resolved "https://registry.yarnpkg.com/opentype.js/-/opentype.js-0.8.0.tgz#acabcfa1642fbe894a3e4d759e43ba694e02bd35"
dependencies:
tiny-inflate "^1.0.2"
path-to-regexp@^1.7.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d"
dependencies:
isarray "0.0.1"
pend@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
promise-stream-reader@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/promise-stream-reader/-/promise-stream-reader-1.0.1.tgz#4e793a79c9d49a73ccd947c6da9c127f12923649"
pseudomap@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
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/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.7.5"
nise "^1.4.5"
supports-color "^5.5.0"
type-detect "^4.0.8"
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"
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:
version "4.0.8"
resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
yallist@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
yauzl@^2.10.0:
version "2.10.0"
resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
dependencies:
buffer-crc32 "~0.2.3"
fd-slicer "~1.1.0"
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "xterm-addon-search",
"version": "0.6.0",
"version": "0.8.0",
"author": {
"name": "The xterm.js authors",
"url": "https://xtermjs.org/"
@@ -10,7 +10,7 @@
"repository": "https://github.com/xtermjs/xterm.js",
"license": "MIT",
"scripts": {
"build": "../../node_modules/.bin/tsc -p src",
"build": "../../node_modules/.bin/tsc -p .",
"prepackage": "npm run build",
"package": "../../node_modules/.bin/webpack",
"prepublishOnly": "npm run package"
+16 -4
View File
@@ -110,8 +110,12 @@ export class SearchAddon implements ITerminalAddon {
}
}
// If there is only one result, return true.
if (!result && currentSelection) return true;
// If there is only one result, wrap back and return selection if it exists.
if (!result && currentSelection) {
searchPosition.startRow = currentSelection.startRow;
searchPosition.startCol = 0;
result = this._findInLine(term, searchPosition, searchOptions);
}
// Set selection and scroll if a result was found
return this._selectResult(result);
@@ -154,8 +158,15 @@ export class SearchAddon implements ITerminalAddon {
};
if (incremental) {
// Try to expand selection to right first.
result = this._findInLine(term, searchPosition, searchOptions, false);
if (!(result && result.row === startRow && result.col === startCol)) {
const isOldResultHighlighted = result && result.row === startRow && result.col === startCol;
if (!isOldResultHighlighted) {
// If selection was not able to be expanded to the right, then try reverse search
if (currentSelection) {
searchPosition.startRow = currentSelection.endRow;
searchPosition.startCol = currentSelection.endColumn;
}
result = this._findInLine(term, searchPosition, searchOptions, true);
}
} else {
@@ -175,7 +186,7 @@ export class SearchAddon implements ITerminalAddon {
}
// If we hit the top and didn't search from the very bottom wrap back down
if (!result && startRow !== (this._terminal.buffer.active.baseY + this._terminal.rows)) {
for (let y = (this._terminal.buffer.active.baseY + this._terminal.rows); y > startRow; y--) {
for (let y = (this._terminal.buffer.active.baseY + this._terminal.rows); y >= startRow; y--) {
searchPosition.startRow = y;
result = this._findInLine(term, searchPosition, searchOptions, isReverseSearch);
if (result) {
@@ -241,6 +252,7 @@ export class SearchAddon implements ITerminalAddon {
* @param term The search term.
* @param position The position to start the search.
* @param searchOptions Search options.
* @param isReverseSearch Whether the search should start from the right side of the terminal and search to the left.
* @return The search result if it was found.
*/
protected _findInLine(term: string, searchPosition: ISearchPosition, searchOptions: ISearchOptions = {}, isReverseSearch: boolean = false): ISearchResult | undefined {
+1 -2
View File
@@ -12,8 +12,7 @@
"removeComments": true,
"strict": true,
"types": [
"../../../node_modules/@types/mocha",
"../../../out-test/api/TestUtils"
"../../../node_modules/@types/mocha"
]
},
"include": [
@@ -7,7 +7,7 @@ import { assert } from 'chai';
import { readFile } from 'fs';
import { resolve } from 'path';
import { openTerminal, writeSync, getBrowserType } from '../../../out-test/api/TestUtils';
import { Browser, Page } from 'playwright-core';
import { Browser, Page } from 'playwright';
const APP = 'http://127.0.0.1:3000/test';
@@ -19,7 +19,7 @@ const height = 600;
describe('Search Tests', function(): void {
before(async function(): Promise<any> {
const browserType = getBrowserType();
browser = await browserType.launch({ dumpio: true,
browser = await browserType.launch({
headless: process.argv.indexOf('--headless') !== -1
});
page = await (await browser.newContext()).newPage();
@@ -111,8 +111,15 @@ describe('Search Tests', function(): void {
let fixture: string;
before(async () => {
const rawFixture = await new Promise<Buffer>(r => readFile(resolve(__dirname, '../fixtures/issue-2444'), (err, data) => r(data)));
fixture = rawFixture.toString()
.replace(/\n/g, '\\n\\r')
if (process.platform === 'win32') {
fixture = rawFixture.toString()
.replace(/\n/g, '\\n')
.replace(/\r/g, '\\r');
} else {
fixture = rawFixture.toString()
.replace(/\n/g, '\\n\\r');
}
fixture = fixture
.replace(/'/g, '\\\'');
});
it('should find all occurrences using findNext', async () => {
@@ -0,0 +1,23 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"lib": [
"es6",
],
"rootDir": ".",
"outDir": "../out-test",
"sourceMap": true,
"removeComments": true,
"strict": true,
"types": [
"../../../node_modules/@types/mocha",
"../../../node_modules/@types/node",
"../../../out-test/api/TestUtils"
]
},
"include": [
"./**/*",
"../../../typings/xterm.d.ts"
]
}
+8
View File
@@ -0,0 +1,8 @@
{
"files": [],
"include": [],
"references": [
{ "path": "./src" },
{ "path": "./test" }
]
}
@@ -7,21 +7,21 @@ import { perfContext, before, ThroughputRuntimeCase } from 'xterm-benchmark';
import { spawn } from 'node-pty';
import { Utf8ToUtf32, stringFromCodePoint } from 'common/input/TextDecoder';
import { Terminal } from 'public/Terminal';
import { Terminal } from 'browser/public/Terminal';
import { SerializeAddon } from 'SerializeAddon';
class TestTerminal extends Terminal {
writeSync(data: string): void {
public writeSync(data: string): void {
(this as any)._core.writeSync(data);
}
}
perfContext('Terminal: sh -c "dd if=/dev/random count=40 bs=1k | hexdump | lolcat -f"', () => {
perfContext('Terminal: sh -c "dd if=/dev/urandom count=40 bs=1k | hexdump | lolcat -f"', () => {
let content = '';
let contentUtf8: Uint8Array;
before(async () => {
const p = spawn('sh', ['-c', 'dd if=/dev/random count=40 bs=1k | hexdump | lolcat -f'], {
const p = spawn('sh', ['-c', 'dd if=/dev/urandom count=40 bs=1k | hexdump | lolcat -f'], {
name: 'xterm-256color',
cols: 80,
rows: 25,
@@ -11,8 +11,6 @@
"paths": {
"common/*": ["../../../src/common/*"],
"browser/*": ["../../../src/browser/*"],
"public/*": ["../../../src/public/*"],
"Terminal": ["../../../src/Terminal"],
"SerializeAddon": ["../src/SerializeAddon"]
}
},
+4 -4
View File
@@ -1,6 +1,6 @@
{
"name": "xterm-addon-serialize",
"version": "0.2.0",
"version": "0.4.0",
"author": {
"name": "The xterm.js authors",
"url": "https://xtermjs.org/"
@@ -9,13 +9,13 @@
"types": "typings/xterm-addon-serialize.d.ts",
"license": "MIT",
"scripts": {
"build": "../../node_modules/.bin/tsc -p src",
"build": "../../node_modules/.bin/tsc -p .",
"prepackage": "npm run build",
"package": "../../node_modules/.bin/webpack",
"prepublishOnly": "npm run package",
"benchmark": "NODE_PATH=../../out:./out:./out-benchmark/ ../../node_modules/.bin/xterm-benchmark -r 5 -c benchmark/benchmark.json",
"benchmark-baseline": "NODE_PATH=../../out:./out:./out-benchmark/ ../../node_modules/.bin/xterm-benchmark -r 5 -c benchmark/benchmark.json --baseline out-benchmark/addons/xterm-addon-serialize/benchmark/*benchmark.js",
"benchmark-eval": "NODE_PATH=../../out:./out:./out-benchmark/ ../../node_modules/.bin/xterm-benchmark -r 5 -c benchmark/benchmark.json --eval out-benchmark/addons/xterm-addon-serialize/benchmark/*benchmark.js"
"benchmark-baseline": "NODE_PATH=../../out:./out:./out-benchmark/ ../../node_modules/.bin/xterm-benchmark -r 5 -c benchmark/benchmark.json --baseline out-benchmark/benchmark/*benchmark.js",
"benchmark-eval": "NODE_PATH=../../out:./out:./out-benchmark/ ../../node_modules/.bin/xterm-benchmark -r 5 -c benchmark/benchmark.json --eval out-benchmark/benchmark/*benchmark.js"
},
"peerDependencies": {
"xterm": "^4.0.0"
@@ -15,7 +15,7 @@ function constrain(value: number, low: number, high: number): number {
abstract class BaseSerializeHandler {
constructor(private _buffer: IBuffer) { }
serialize(startRow: number, endRow: number): string {
public serialize(startRow: number, endRow: number): string {
// we need two of them to flip between old and new cell
const cell1 = this._buffer.getNullCell();
const cell2 = this._buffer.getNullCell();
@@ -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;
@@ -18,8 +18,7 @@
},
"strict": true,
"types": [
"../../../node_modules/@types/mocha",
"../../../out-test/api/TestUtils"
"../../../node_modules/@types/mocha"
]
},
"include": [
@@ -5,7 +5,7 @@
import { assert } from 'chai';
import { openTerminal, writeSync, getBrowserType } from '../../../out-test/api/TestUtils';
import { Browser, Page } from 'playwright-core';
import { Browser, Page } from 'playwright';
const APP = 'http://127.0.0.1:3000/test';
@@ -17,7 +17,7 @@ const height = 600;
describe('SerializeAddon', () => {
before(async function(): Promise<any> {
const browserType = getBrowserType();
browser = await browserType.launch({ dumpio: true,
browser = await browserType.launch({
headless: process.argv.indexOf('--headless') !== -1
});
page = await (await browser.newContext()).newPage();
@@ -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[] {
@@ -0,0 +1,34 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"lib": [
"es2015"
],
"rootDir": ".",
"outDir": "../out-test",
"sourceMap": true,
"removeComments": true,
"baseUrl": ".",
"paths": {
"common/*": [
"../../../src/common/*"
]
},
"strict": true,
"types": [
"../../../node_modules/@types/mocha",
"../../../node_modules/@types/node",
"../../../out-test/api/TestUtils"
]
},
"include": [
"./**/*",
"../../../typings/xterm.d.ts"
],
"references": [
{
"path": "../../../src/common"
}
]
}
@@ -0,0 +1,9 @@
{
"files": [],
"include": [],
"references": [
{ "path": "./src" },
{ "path": "./test" },
{ "path": "./benchmark" }
]
}
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "xterm-addon-unicode11",
"version": "0.1.1",
"version": "0.2.0",
"author": {
"name": "The xterm.js authors",
"url": "https://xtermjs.org/"
@@ -10,7 +10,7 @@
"repository": "https://github.com/xtermjs/xterm.js",
"license": "MIT",
"scripts": {
"build": "../../node_modules/.bin/tsc -p src",
"build": "../../node_modules/.bin/tsc -p .",
"prepackage": "npm run build",
"package": "../../node_modules/.bin/webpack",
"prepublishOnly": "npm run package"
@@ -18,8 +18,7 @@
]
},
"types": [
"../../../node_modules/@types/mocha",
"../../../out-test/api/TestUtils"
"../../../node_modules/@types/mocha"
]
},
"include": [
@@ -5,7 +5,7 @@
import { assert } from 'chai';
import { openTerminal, getBrowserType } from '../../../out-test/api/TestUtils';
import { Browser, Page } from 'playwright-core';
import { Browser, Page } from 'playwright';
const APP = 'http://127.0.0.1:3000/test';
@@ -17,7 +17,7 @@ const height = 600;
describe('Unicode11Addon', () => {
before(async function(): Promise<any> {
const browserType = getBrowserType();
browser = await browserType.launch({ dumpio: true,
browser = await browserType.launch({
headless: process.argv.indexOf('--headless') !== -1
});
page = await (await browser.newContext()).newPage();
@@ -0,0 +1,35 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es2015",
"lib": [
"dom",
"es2015"
],
"rootDir": ".",
"outDir": "../out-test",
"sourceMap": true,
"removeComments": true,
"strict": true,
"baseUrl": ".",
"paths": {
"common/*": [
"../../../src/common/*"
]
},
"types": [
"../../../node_modules/@types/mocha",
"../../../node_modules/@types/node",
"../../../out-test/api/TestUtils"
]
},
"include": [
"./**/*",
"../../../typings/xterm.d.ts"
],
"references": [
{
"path": "../../../src/common"
}
]
}
@@ -0,0 +1,8 @@
{
"files": [],
"include": [],
"references": [
{ "path": "./src" },
{ "path": "./test" }
]
}
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "xterm-addon-web-links",
"version": "0.3.0",
"version": "0.4.0",
"author": {
"name": "The xterm.js authors",
"url": "https://xtermjs.org/"
@@ -10,7 +10,7 @@
"repository": "https://github.com/xtermjs/xterm.js",
"license": "MIT",
"scripts": {
"build": "../../node_modules/.bin/tsc -p src",
"build": "../../node_modules/.bin/tsc -p .",
"prepackage": "npm run build",
"package": "../../node_modules/.bin/webpack",
"prepublishOnly": "npm run package"
@@ -3,7 +3,7 @@
* @license MIT
*/
import { ILinkProvider, IBufferCellPosition, ILink, Terminal, IBuffer } from 'xterm';
import { ILinkProvider, IBufferCellPosition, ILink, Terminal } from 'xterm';
export class WebLinkProvider implements ILinkProvider {
@@ -15,19 +15,20 @@ export class WebLinkProvider implements ILinkProvider {
}
provideLink(position: IBufferCellPosition, callback: (link: ILink | undefined) => void): void {
callback(LinkComputer.computeLink(position, this._regex, this._terminal, this._handler));
public provideLinks(y: number, callback: (links: ILink[] | undefined) => void): void {
callback(LinkComputer.computeLink(y, this._regex, this._terminal, this._handler));
}
}
export class LinkComputer {
public static computeLink(position: IBufferCellPosition, regex: RegExp, terminal: Terminal, handler: (event: MouseEvent, uri: string) => void): ILink | undefined {
public static computeLink(y: number, regex: RegExp, terminal: Terminal, handler: (event: MouseEvent, uri: string) => void): ILink[] {
const rex = new RegExp(regex.source, (regex.flags || '') + 'g');
const [line, startLineIndex] = LinkComputer._translateBufferLineToStringWithWrap(position.y - 1, false, terminal);
const [line, startLineIndex] = LinkComputer._translateBufferLineToStringWithWrap(y - 1, false, terminal);
let match;
let stringIndex = -1;
const result: ILink[] = [];
while ((match = rex.exec(line)) !== null) {
const text = match[1];
@@ -68,8 +69,10 @@ export class LinkComputer {
}
};
return { range, text, activate: handler };
result.push({ range, text, activate: handler });
}
return result;
}
/**
@@ -3,7 +3,7 @@
* @license MIT
*/
import { Terminal, ILinkMatcherOptions, ITerminalAddon, ILinkProvider, IDisposable } from 'xterm';
import { Terminal, ILinkMatcherOptions, ITerminalAddon, IDisposable } from 'xterm';
import { WebLinkProvider } from './WebLinkProvider';
const protocolClause = '(https?:\\/\\/)';
@@ -15,7 +15,7 @@ const ipClause = '((\\d{1,3}\\.){3}\\d{1,3})';
const localHostClause = '(localhost)';
const portClause = '(:\\d{1,5})';
const hostClause = '((' + domainBodyClause + '\\.' + tldClause + ')|' + ipClause + '|' + localHostClause + ')' + portClause + '?';
const pathCharacterSet = '(\\/[\\/\\w\\.\\-%~:+]*)*([^:"\'\\s])';
const pathCharacterSet = '(\\/[\\/\\w\\.\\-%~:+@]*)*([^:"\'\\s])';
const pathClause = '(' + pathCharacterSet + ')?';
const queryStringHashFragmentCharacterSet = '[0-9\\w\\[\\]\\(\\)\\/\\?\\!#@$%&\'*+,:;~\\=\\.\\-]*';
const queryStringClause = '(\\?' + queryStringHashFragmentCharacterSet + ')?';
@@ -12,8 +12,7 @@
"removeComments": true,
"strict": true,
"types": [
"../../../node_modules/@types/mocha",
"../../../out-test/api/TestUtils"
"../../../node_modules/@types/mocha"
]
},
"include": [
@@ -5,7 +5,7 @@
import { assert } from 'chai';
import { openTerminal, pollFor, writeSync, getBrowserType } from '../../../out-test/api/TestUtils';
import { Browser, Page } from 'playwright-core';
import { Browser, Page } from 'playwright';
const APP = 'http://127.0.0.1:3000/test';
@@ -17,7 +17,7 @@ const height = 600;
describe('WebLinksAddon', () => {
before(async function(): Promise<any> {
const browserType = getBrowserType();
browser = await browserType.launch({ dumpio: true,
browser = await browserType.launch({
headless: process.argv.indexOf('--headless') !== -1
});
page = await (await browser.newContext()).newPage();
@@ -0,0 +1,23 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"lib": [
"es2015"
],
"rootDir": ".",
"outDir": "../out-test",
"sourceMap": true,
"removeComments": true,
"strict": true,
"types": [
"../../../node_modules/@types/mocha",
"../../../node_modules/@types/node",
"../../../out-test/api/TestUtils"
]
},
"include": [
"./**/*",
"../../../typings/xterm.d.ts"
]
}
@@ -0,0 +1,8 @@
{
"files": [],
"include": [],
"references": [
{ "path": "./src" },
{ "path": "./test" }
]
}
+2
View File
@@ -3,3 +3,5 @@
tsconfig.json
.yarnrc
webpack.config.js
out-test/
test/
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "xterm-addon-webgl",
"version": "0.6.0",
"version": "0.9.0",
"author": {
"name": "The xterm.js authors",
"url": "https://xtermjs.org/"
@@ -10,7 +10,7 @@
"repository": "https://github.com/xtermjs/xterm.js",
"license": "MIT",
"scripts": {
"build": "../../node_modules/.bin/tsc -p src",
"build": "../../node_modules/.bin/tsc -p .",
"prepackage": "npm run build",
"package": "../../node_modules/.bin/webpack",
"prepublishOnly": "npm run package"
@@ -213,14 +213,14 @@ export class GlyphRenderer {
// a_cellpos only changes on resize
}
public updateSelection(model: IRenderModel, columnSelectMode: boolean): void {
public updateSelection(model: IRenderModel): void {
const terminal = this._terminal;
this._vertices.selectionAttributes = slice(this._vertices.attributes, 0);
const bg = (this._colors.selectionOpaque.rgba >>> 8) | Attributes.CM_RGB;
if (columnSelectMode) {
if (model.selection.columnSelectMode) {
const startCol = model.selection.startCol;
const width = model.selection.endCol - startCol;
const height = model.selection.viewportCappedEndRow - model.selection.viewportCappedStartRow + 1;
@@ -171,7 +171,7 @@ export class RectangleRenderer {
);
}
public updateSelection(model: ISelectionRenderModel, columnSelectMode: boolean): void {
public updateSelection(model: ISelectionRenderModel): void {
const terminal = this._terminal;
if (!model.hasSelection) {
@@ -179,7 +179,7 @@ export class RectangleRenderer {
return;
}
if (columnSelectMode) {
if (model.columnSelectMode) {
const startCol = model.startCol;
const width = model.endCol - startCol;
const height = model.viewportCappedEndRow - model.viewportCappedStartRow + 1;
@@ -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,
+1 -1
View File
@@ -22,6 +22,7 @@ export class RenderModel implements IRenderModel {
this.lineLengths = new Uint32Array(0);
this.selection = {
hasSelection: false,
columnSelectMode: false,
viewportStartRow: 0,
viewportEndRow: 0,
viewportCappedStartRow: 0,
@@ -42,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 {
+1
View File
@@ -56,6 +56,7 @@ export interface IRenderModel {
export interface ISelectionRenderModel {
hasSelection: boolean;
columnSelectMode: boolean;
viewportStartRow: number;
viewportEndRow: number;
viewportCappedStartRow: number;
@@ -40,4 +40,8 @@ export class WebglAddon implements ITerminalAddon {
public get textureAtlas(): HTMLCanvasElement | undefined {
return this._renderer?.textureAtlas;
}
public clearTextureAtlas(): void {
this._renderer?.clearCharAtlas();
}
}
+33 -19
View File
@@ -3,7 +3,6 @@
* @license MIT
*/
import { ITerminal } from '../../../src/Types';
import { GlyphRenderer } from './GlyphRenderer';
import { LinkRenderLayer } from './renderLayer/LinkRenderLayer';
import { CursorRenderLayer } from './renderLayer/CursorRenderLayer';
@@ -16,8 +15,8 @@ import { Disposable } from 'common/Lifecycle';
import { NULL_CELL_CODE } from 'common/buffer/Constants';
import { Terminal, IEvent } from 'xterm';
import { IRenderLayer } from './renderLayer/Types';
import { IRenderDimensions, IRenderer, IRequestRefreshRowsEvent } from 'browser/renderer/Types';
import { IColorSet } from 'browser/Types';
import { IRenderDimensions, IRenderer, IRequestRedrawEvent } from 'browser/renderer/Types';
import { ITerminal, IColorSet } from 'browser/Types';
import { EventEmitter } from 'common/EventEmitter';
import { CellData } from 'common/buffer/CellData';
@@ -39,8 +38,8 @@ export class WebglRenderer extends Disposable implements IRenderer {
private _core: ITerminal;
private _isAttached: boolean;
private _onRequestRefreshRows = new EventEmitter<IRequestRefreshRowsEvent>();
public get onRequestRefreshRows(): IEvent<IRequestRefreshRowsEvent> { return this._onRequestRefreshRows.event; }
private _onRequestRedraw = new EventEmitter<IRequestRedrawEvent>();
public get onRequestRedraw(): IEvent<IRequestRedrawEvent> { return this._onRequestRedraw.event; }
constructor(
private _terminal: Terminal,
@@ -52,8 +51,8 @@ export class WebglRenderer extends Disposable implements IRenderer {
this._core = (this._terminal as any)._core;
this._renderLayers = [
new LinkRenderLayer(this._core.screenElement, 2, this._colors, this._core),
new CursorRenderLayer(this._core.screenElement, 3, this._colors, this._onRequestRefreshRows)
new LinkRenderLayer(this._core.screenElement!, 2, this._colors, this._core),
new CursorRenderLayer(this._core.screenElement!, 3, this._colors, this._onRequestRedraw)
];
this.dimensions = {
scaledCharWidth: 0,
@@ -83,7 +82,7 @@ export class WebglRenderer extends Disposable implements IRenderer {
if (!this._gl) {
throw new Error('WebGL2 not supported ' + this._gl);
}
this._core.screenElement.appendChild(this._canvas);
this._core.screenElement!.appendChild(this._canvas);
this._rectangleRenderer = new RectangleRenderer(this._terminal, this._colors, this._gl, this.dimensions);
this._glyphRenderer = new GlyphRenderer(this._terminal, this._colors, this._gl, this.dimensions);
@@ -91,12 +90,12 @@ export class WebglRenderer extends Disposable implements IRenderer {
// Update dimensions and acquire char atlas
this.onCharSizeChanged();
this._isAttached = document.body.contains(this._core.screenElement);
this._isAttached = document.body.contains(this._core.screenElement!);
}
public dispose(): void {
this._renderLayers.forEach(l => l.dispose());
this._core.screenElement.removeChild(this._canvas);
this._core.screenElement!.removeChild(this._canvas);
super.dispose();
}
@@ -117,8 +116,12 @@ export class WebglRenderer extends Disposable implements IRenderer {
this._refreshCharAtlas();
this._rectangleRenderer.updateSelection(this._model.selection);
this._glyphRenderer.updateSelection(this._model);
// Force a full refresh
this._model.clear();
this._model.clearSelection();
}
public onDevicePixelRatioChange(): void {
@@ -147,8 +150,8 @@ export class WebglRenderer extends Disposable implements IRenderer {
this._canvas.style.height = `${this.dimensions.canvasHeight}px`;
// Resize the screen
this._core.screenElement.style.width = `${this.dimensions.canvasWidth}px`;
this._core.screenElement.style.height = `${this.dimensions.canvasHeight}px`;
this._core.screenElement!.style.width = `${this.dimensions.canvasWidth}px`;
this._core.screenElement!.style.height = `${this.dimensions.canvasHeight}px`;
this._glyphRenderer.setDimensions(this.dimensions);
this._glyphRenderer.onResize();
@@ -156,6 +159,7 @@ export class WebglRenderer extends Disposable implements IRenderer {
// Force a full refresh
this._model.clear();
this._model.clearSelection();
}
public onCharSizeChanged(): void {
@@ -170,15 +174,15 @@ export class WebglRenderer extends Disposable implements IRenderer {
this._renderLayers.forEach(l => l.onFocus(this._terminal));
}
public onSelectionChanged(start: [number, number], end: [number, number], columnSelectMode: boolean): void {
public onSelectionChanged(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {
this._renderLayers.forEach(l => l.onSelectionChanged(this._terminal, start, end, columnSelectMode));
this._updateSelectionModel(start, end);
this._updateSelectionModel(start, end, columnSelectMode);
this._rectangleRenderer.updateSelection(this._model.selection, columnSelectMode);
this._glyphRenderer.updateSelection(this._model, columnSelectMode);
this._rectangleRenderer.updateSelection(this._model.selection);
this._glyphRenderer.updateSelection(this._model);
this._onRequestRefreshRows.fire({ start: 0, end: this._terminal.rows - 1 });
this._onRequestRedraw.fire({ start: 0, end: this._terminal.rows - 1 });
}
public onCursorMove(): void {
@@ -212,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));
}
@@ -226,7 +238,7 @@ export class WebglRenderer extends Disposable implements IRenderer {
public renderRows(start: number, end: number): void {
if (!this._isAttached) {
if (document.body.contains(this._core.screenElement) && (this._core as any)._charSizeService.width && (this._core as any)._charSizeService.height) {
if (document.body.contains(this._core.screenElement!) && (this._core as any)._charSizeService.width && (this._core as any)._charSizeService.height) {
this._updateDimensions();
this._refreshCharAtlas();
this._isAttached = true;
@@ -241,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
@@ -292,7 +305,7 @@ export class WebglRenderer extends Disposable implements IRenderer {
this._rectangleRenderer.updateBackgrounds(this._model);
}
private _updateSelectionModel(start: [number, number], end: [number, number]): void {
private _updateSelectionModel(start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void {
const terminal = this._terminal;
// Selection does not exist
@@ -314,6 +327,7 @@ export class WebglRenderer extends Disposable implements IRenderer {
}
this._model.selection.hasSelection = true;
this._model.selection.columnSelectMode = columnSelectMode;
this._model.selection.viewportStartRow = viewportStartRow;
this._model.selection.viewportEndRow = viewportEndRow;
this._model.selection.viewportCappedStartRow = viewportCappedStartRow;
@@ -20,7 +20,7 @@ export function generateConfig(scaledCharWidth: number, scaledCharHeight: number
background: colors.background,
cursor: NULL_COLOR,
cursorAccent: NULL_COLOR,
selection: NULL_COLOR,
selectionTransparent: NULL_COLOR,
selectionOpaque: NULL_COLOR,
// For the static char atlas, we only use the first 16 colors, but we need all 256 for the
// dynamic character atlas.
@@ -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) {
@@ -349,7 +358,7 @@ export class WebglCharAtlas implements IDisposable {
const fontStyle = italic ? 'italic' : '';
this._tmpCtx.font =
`${fontStyle} ${fontWeight} ${this._config.fontSize * this._config.devicePixelRatio}px ${this._config.fontFamily}`;
this._tmpCtx.textBaseline = 'top';
this._tmpCtx.textBaseline = 'middle';
this._tmpCtx.fillStyle = this._getForegroundCss(bg, bgColorMode, bgColor, fg, fgColorMode, fgColor, inverse, bold);
@@ -359,7 +368,7 @@ export class WebglCharAtlas implements IDisposable {
}
// Draw the character
this._tmpCtx.fillText(chars, TMP_CANVAS_GLYPH_PADDING, TMP_CANVAS_GLYPH_PADDING);
this._tmpCtx.fillText(chars, TMP_CANVAS_GLYPH_PADDING, TMP_CANVAS_GLYPH_PADDING + this._config.scaledCharHeight / 2);
this._tmpCtx.restore();
// clear the background from the character to avoid issues with drawing over the previous
@@ -58,7 +58,7 @@ export abstract class BaseRenderLayer implements IRenderLayer {
public onFocus(terminal: Terminal): void {}
public onCursorMove(terminal: Terminal): void {}
public onGridChanged(terminal: Terminal, startRow: number, endRow: number): void {}
public onSelectionChanged(terminal: Terminal, start: [number, number], end: [number, number], columnSelectMode: boolean = false): void {}
public onSelectionChanged(terminal: Terminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {}
public setColors(terminal: Terminal, colorSet: IColorSet): void {
this._refreshCharAtlas(terminal, colorSet);
@@ -8,7 +8,7 @@ import { BaseRenderLayer } from './BaseRenderLayer';
import { ICellData } from 'common/Types';
import { CellData } from 'common/buffer/CellData';
import { IColorSet } from 'browser/Types';
import { IRenderDimensions, IRequestRefreshRowsEvent } from 'browser/renderer/Types';
import { IRenderDimensions, IRequestRedrawEvent } from 'browser/renderer/Types';
import { IEventEmitter } from 'common/EventEmitter';
interface ICursorState {
@@ -34,7 +34,7 @@ export class CursorRenderLayer extends BaseRenderLayer {
container: HTMLElement,
zIndex: number,
colors: IColorSet,
private _onRequestRefreshRowsEvent: IEventEmitter<IRequestRefreshRowsEvent>
private _onRequestRefreshRowsEvent: IEventEmitter<IRequestRedrawEvent>
) {
super(container, 'cursor', zIndex, true, colors);
this._state = {
@@ -3,24 +3,23 @@
* @license MIT
*/
import { ILinkifierAccessor } from '../../../../src/Types';
import { Terminal } from 'xterm';
import { BaseRenderLayer } from './BaseRenderLayer';
import { INVERTED_DEFAULT_COLOR } from 'browser/renderer/atlas/Constants';
import { is256Color } from '../atlas/CharAtlasUtils';
import { IColorSet, ILinkifierEvent } from 'browser/Types';
import { ITerminal, IColorSet, ILinkifierEvent } from 'browser/Types';
import { IRenderDimensions } from 'browser/renderer/Types';
export class LinkRenderLayer extends BaseRenderLayer {
private _state: ILinkifierEvent | undefined;
constructor(container: HTMLElement, zIndex: number, colors: IColorSet, terminal: ILinkifierAccessor) {
constructor(container: HTMLElement, zIndex: number, colors: IColorSet, terminal: ITerminal) {
super(container, 'link', zIndex, true, colors);
terminal.linkifier.onLinkHover(e => this._onLinkHover(e));
terminal.linkifier.onLinkLeave(e => this._onLinkLeave(e));
terminal.linkifier.onShowLinkUnderline(e => this._onShowLinkUnderline(e));
terminal.linkifier.onHideLinkUnderline(e => this._onHideLinkUnderline(e));
terminal.linkifier2.onLinkHover(e => this._onLinkHover(e));
terminal.linkifier2.onLinkLeave(e => this._onLinkLeave(e));
terminal.linkifier2.onShowLinkUnderline(e => this._onShowLinkUnderline(e));
terminal.linkifier2.onHideLinkUnderline(e => this._onHideLinkUnderline(e));
}
public resize(terminal: Terminal, dim: IRenderDimensions): void {
@@ -45,7 +44,7 @@ export class LinkRenderLayer extends BaseRenderLayer {
}
}
private _onLinkHover(e: ILinkifierEvent): void {
private _onShowLinkUnderline(e: ILinkifierEvent): void {
if (e.fg === INVERTED_DEFAULT_COLOR) {
this._ctx.fillStyle = this._colors.background.css;
} else if (e.fg !== undefined && is256Color(e.fg)) {
@@ -69,7 +68,7 @@ export class LinkRenderLayer extends BaseRenderLayer {
this._state = e;
}
private _onLinkLeave(e: ILinkifierEvent): void {
private _onHideLinkUnderline(e: ILinkifierEvent): void {
this._clearCurrentLink();
}
}
@@ -42,7 +42,7 @@ export interface IRenderLayer extends IDisposable {
/**
* Calls when the selection changes.
*/
onSelectionChanged(terminal: Terminal, start: [number, number], end: [number, number], columnSelectMode: boolean): void;
onSelectionChanged(terminal: Terminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean): void;
/**
* Registers a handler to join characters to render as a group
+1 -2
View File
@@ -21,8 +21,7 @@
},
"strict": true,
"types": [
"../../../node_modules/@types/mocha",
"../../../out-test/api/TestUtils"
"../../../node_modules/@types/mocha"
]
},
"include": [
@@ -3,11 +3,11 @@
* @license MIT
*/
import { ITerminalOptions } from '../../../src/Types';
import { ITerminalOptions } from '../../../src/common/Types';
import { ITheme } from 'xterm';
import { assert } from 'chai';
import { openTerminal, pollFor, writeSync, getBrowserType } from '../../../out-test/api/TestUtils';
import { Browser, Page } from 'playwright-core';
import { Browser, Page } from 'playwright';
const APP = 'http://127.0.0.1:3000/test';
@@ -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();
@@ -341,10 +339,6 @@ describe('WebGL Renderer Integration Tests', async () => {
await writeSync(page, data);
for (let y = 0; y < 240 / 16; y++) {
for (let x = 0; x < 16; x++) {
const cssColor = COLORS_16_TO_255[y * 16 + x];
const r = parseInt(cssColor.substr(1, 2), 16);
const g = parseInt(cssColor.substr(3, 2), 16);
const b = parseInt(cssColor.substr(5, 2), 16);
await pollFor(page, () => getCellColor(x + 1, y + 1), [0, 0, 0, 255]);
}
}
@@ -670,7 +664,6 @@ describe('WebGL Renderer Integration Tests', async () => {
await writeSync(page, data);
for (let y = 0; y < 16; y++) {
for (let x = 0; x < 16; x++) {
const i = y * 16 + x;
await pollFor(page, () => getCellColor(x + 1, y + 1), [0, 0, 0, 255]);
}
}
@@ -899,7 +892,7 @@ async function getCellColor(col: number, row: number): Promise<number[]> {
async function setupBrowser(options: ITerminalOptions = { rendererType: 'dom' }): Promise<void> {
const browserType = getBrowserType();
browser = await browserType.launch({ dumpio: true,
browser = await browserType.launch({
headless: process.argv.indexOf('--headless') !== -1
});
page = await (await browser.newContext()).newPage();
@@ -0,0 +1,40 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"lib": [
"es6",
],
"rootDir": ".",
"outDir": "../out-test",
"sourceMap": true,
"removeComments": true,
"baseUrl": ".",
"paths": {
"common/*": [
"../../../src/common/*"
],
"browser/*": [
"../../../src/browser/*"
]
},
"strict": true,
"types": [
"../../../node_modules/@types/mocha",
"../../../node_modules/@types/node",
"../../../out-test/api/TestUtils"
]
},
"include": [
"./**/*",
"../../../typings/xterm.d.ts"
],
"references": [
{
"path": "../../../src/common"
},
{
"path": "../../../src/browser"
}
]
}
+8
View File
@@ -0,0 +1,8 @@
{
"files": [],
"include": [],
"references": [
{ "path": "./src" },
{ "path": "./test" }
]
}
+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;
}
}
-10
View File
@@ -98,11 +98,6 @@ jobs:
inputs:
versionSpec: '1.x'
displayName: 'Install Yarn'
- task: CacheBeta@1
inputs:
key: yarn2 | $(Agent.OS) | yarn.lock
path: node_modules
displayName: Cache node modules
- script: yarn --frozen-lockfile
displayName: 'Install dependencies and build'
- script: |
@@ -122,11 +117,6 @@ jobs:
inputs:
versionSpec: '10.x'
displayName: 'Install Node.js'
- task: CacheBeta@1
inputs:
key: yarn2 | $(Agent.OS) | yarn.lock
path: node_modules
displayName: Cache node modules
- script: yarn --frozen-lockfile
displayName: 'Install dependencies and build'
- script: |
-23
View File
@@ -1,23 +0,0 @@
/**
* Copyright (c) 2020 The xterm.js authors. All rights reserved.
* @license MIT
*/
const playwright = require('playwright-core');
const fs = require('fs');
// Default to chromium
let browserType = playwright['chromium'];
const index = process.argv.indexOf('--browser');
if (index !== -1 && process.argv.length > index + 1 && typeof process.argv[index + 1] === 'string') {
const string = process.argv[index + 1];
if (string === 'firefox' || string === 'webkit') {
browserType = playwright[string];
}
}
const exists = fs.existsSync(browserType.executablePath());
if (!exists) {
console.log(`Downloading ${browserType.name()}`);
browserType.downloadBrowserIfNeeded().then(() => process.exit(0));
}
+9 -9
View File
@@ -1,7 +1,7 @@
/**
* Copyright (c) 2019 The xterm.js authors. All rights reserved.
* @license MIT
*
*
* Script to extract vt features documented in docstrings.
*/
const fs = require('fs');
@@ -265,7 +265,7 @@ To denote the sequences the tables use the same abbreviations as xterm does:
function hideDetailSections() {
for (let section of document.getElementsByClassName('sequence-details')) section.style.display = 'none';
}
function decorateDetailLinks() {
for (let link of document.getElementsByClassName('link-details')) {
link.addEventListener("click", toggleDetails, false);
@@ -344,11 +344,11 @@ function applyMacros(s) {
return s;
}
function replaceStatus(s) {
if (s === 'supported') return '<span title="supported">✓</span>';
if (s === 'unsupported') return '<span title="unsupported">✗</span>';
return s;
}
// function replaceStatus(s) {
// if (s === 'supported') return '<span title="supported">✓</span>';
// if (s === 'unsupported') return '<span title="unsupported">✗</span>';
// return s;
// }
function createAnchorSlug(s) {
return s.toLowerCase().split(' ').join('-');
@@ -359,7 +359,7 @@ function empty(ar) {
}
function* parseMultiLineGen(filename, s) {
if (!~s.indexOf('@vt:')) {
if (!s.includes('@vt:')) {
return;
}
const lines = s.split('\n').map(el => el.trim().replace(/[*]/, '').replace(/\s/, ''));
@@ -413,7 +413,7 @@ function parseSingleLine(filename, s) {
const line = s.trim();
const match = line.match(REX_VT_LINE);
if (match !== null) {
if (!~TYPES.indexOf(match[2])) {
if (!TYPES.includes(match[2])) {
throw new Error(`unkown vt-command type "${match[2]}" specified in "${filename}"`);
}
return {
+2 -2
View File
@@ -25,7 +25,7 @@ if (fs.existsSync(addonsPath)) {
// walk all addon folders
fs.readdir(addonsPath, (err, files) => {
files.forEach(folder => {
for (const folder of files) {
const addonPath = path.join(addonsPath, folder);
// install only if there are dependencies listed
@@ -51,6 +51,6 @@ if (fs.existsSync(addonsPath)) {
} else {
console.log('Skipped', folder);
}
});
}
});
}
+6 -5
View File
@@ -11,7 +11,7 @@ const path = require('path');
// Setup auth
fs.writeFileSync(`${process.env['HOME']}/.npmrc`, `//registry.npmjs.org/:_authToken=${process.env['NPM_AUTH_TOKEN']}`);
const isDryRun = process.argv.indexOf('--dry') !== -1;
const isDryRun = process.argv.includes('--dry');
if (isDryRun) {
console.log('Publish dry run');
}
@@ -28,6 +28,7 @@ if (changedFiles.some(e => e.search(/^addons\//) === -1)) {
const addonPackageDirs = [
path.resolve(__dirname, '../addons/xterm-addon-attach'),
path.resolve(__dirname, '../addons/xterm-addon-fit'),
path.resolve(__dirname, '../addons/xterm-addon-ligatures'),
path.resolve(__dirname, '../addons/xterm-addon-search'),
path.resolve(__dirname, '../addons/xterm-addon-serialize'),
path.resolve(__dirname, '../addons/xterm-addon-unicode11'),
@@ -35,13 +36,13 @@ const addonPackageDirs = [
path.resolve(__dirname, '../addons/xterm-addon-webgl')
];
console.log(`Checking if addons need to be published`);
addonPackageDirs.forEach(p => {
for (const p of addonPackageDirs) {
const addon = path.basename(p);
if (changedFiles.some(e => e.indexOf(addon) !== -1)) {
if (changedFiles.some(e => e.includes(addon))) {
console.log(`Try publish ${addon}`);
checkAndPublishPackage(p);
}
});
}
// Publish website if it's a stable release
if (isStableRelease) {
@@ -53,7 +54,7 @@ function checkAndPublishPackage(packageDir) {
// Determine if this is a stable or beta release
const publishedVersions = getPublishedVersions(packageJson);
const isStableRelease = publishedVersions.indexOf(packageJson.version) === -1;
const isStableRelease = !publishedVersions.includes(packageJson.version);
// Get the next version
let nextVersion = isStableRelease ? packageJson.version : getNextBetaVersion(packageJson);
-1
View File
@@ -13,7 +13,6 @@ const env = { ...process.env };
env.NODE_PATH = path.resolve(__dirname, '../out');
let testFiles = [
'./out/*test.js',
'./out/**/*test.js',
'./addons/**/out/*test.js',
];
+52
View File
@@ -0,0 +1,52 @@
/**
* Copyright (c) 2019 The xterm.js authors. All rights reserved.
* @license MIT
*/
const cp = require('child_process');
const path = require('path');
// Add `out` to the NODE_PATH so absolute paths can be resolved.
const env = { ...process.env };
env.NODE_PATH = path.resolve(__dirname, '../out');
let testFiles = [
'./addons/**/out-test/*api.js',
'./out-test/**/*api.js',
];
let flagArgs = [];
if (process.argv.length > 2) {
const args = process.argv.slice(2);
flagArgs = args.filter(e => e.startsWith('--')).map(arg => arg.split('=')).reduce((arr, val) => arr.concat([...val], []));
console.info(flagArgs);
// ability to inject particular test files via
// yarn test [testFileA testFileB ...]
files = args.filter(e => !e.startsWith('--'));
if (files.length) {
testFiles = files;
}
}
env.DEBUG = flagArgs.indexOf('--debug') >= 0 ? 'debug' : '';
const run = cp.spawnSync(
npmBinScript('mocha'),
[...testFiles, ...flagArgs],
{
cwd: path.resolve(__dirname, '..'),
env,
stdio: 'inherit'
}
);
function npmBinScript(script) {
return path.resolve(__dirname, `../node_modules/.bin/` + (process.platform === 'win32' ? `${script}.cmd` : script));
}
process.exit(run.status);
+5 -5
View File
@@ -88,19 +88,19 @@ function evalButtonCode(code) {
if (code & 64) {
button |= 4
}
let actionS = 'press';
let action = 'press';
let buttonS = reverseButtons[button];
if (button === 3) {
buttonS = '<none>';
actionS = 'release';
action = 'release';
}
if (move) {
actionS = 'move';
action = 'move';
} else if (4 <= button && button <= 7) {
buttonS = 'wheel';
actionS = button === 4 ? 'up' : button === 5 ? 'down' : button === 6 ? 'left' : 'right';
action = button === 4 ? 'up' : button === 5 ? 'down' : button === 6 ? 'left' : 'right';
}
return {button: buttonS, action: actionS, modifier};
return {button: buttonS, action, modifier};
}
// protocols
+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;
+14 -6
View File
@@ -8,7 +8,7 @@
/// <reference path="../typings/xterm.d.ts"/>
// Use tsc version (yarn watch)
import { Terminal } from '../out/public/Terminal';
import { Terminal } from '../out/browser/public/Terminal';
import { AttachAddon } from '../addons/xterm-addon-attach/out/AttachAddon';
import { FitAddon } from '../addons/xterm-addon-fit/out/FitAddon';
import { SearchAddon, ISearchOptions } from '../addons/xterm-addon-search/out/SearchAddon';
@@ -93,7 +93,7 @@ const paddingElement = <HTMLInputElement>document.getElementById('padding');
function setPadding(): void {
term.element.style.padding = parseInt(paddingElement.value, 10).toString() + 'px';
term.fit();
addons.fit.instance.fit();
}
function getSearchOptions(e: KeyboardEvent): ISearchOptions {
@@ -112,9 +112,15 @@ const disposeRecreateButtonHandler = () => {
term = null;
window.term = null;
socket = null;
addons.attach.instance = undefined;
addons.fit.instance = undefined;
addons.search.instance = undefined;
addons.serialize.instance = undefined;
addons.unicode11.instance = undefined;
addons['web-links'].instance = undefined;
addons.webgl.instance = undefined;
document.getElementById('dispose').innerHTML = 'Recreate Terminal';
}
else {
} else {
createTerminal();
document.getElementById('dispose').innerHTML = 'Dispose terminal';
}
@@ -357,7 +363,7 @@ function initAddons(term: TerminalType): void {
if (!addon.canChange) {
checkbox.disabled = true;
}
checkbox.addEventListener('change', () => {
addDomListener(checkbox, 'change', () => {
if (checkbox.checked) {
addon.instance = new addon.ctor();
term.loadAddon(addon.instance);
@@ -386,7 +392,9 @@ function initAddons(term: TerminalType): void {
wrapper.appendChild(label);
fragment.appendChild(wrapper);
});
document.getElementById('addons-container').appendChild(fragment);
const container = document.getElementById('addons-container');
container.innerHTML = '';
container.appendChild(fragment);
}
function addDomListener(element: HTMLElement, type: string, handler: (...args: any[]) => any): void {
+9 -9
View File
@@ -43,15 +43,15 @@ function startServer() {
const env = Object.assign({}, process.env);
env['COLORTERM'] = 'truecolor';
var cols = parseInt(req.query.cols),
rows = parseInt(req.query.rows),
term = pty.spawn(process.platform === 'win32' ? 'cmd.exe' : 'bash', [], {
name: 'xterm-256color',
cols: cols || 80,
rows: rows || 24,
cwd: env.PWD,
env: env,
encoding: USE_BINARY ? null : 'utf8'
});
rows = parseInt(req.query.rows),
term = pty.spawn(process.platform === 'win32' ? 'cmd.exe' : 'bash', [], {
name: 'xterm-256color',
cols: cols || 80,
rows: rows || 24,
cwd: process.platform === 'win32' ? undefined : env.PWD,
env: env,
encoding: USE_BINARY ? null : 'utf8'
});
console.log('Created terminal with PID: ' + term.pid);
terminals[term.pid] = term;
-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"]
+25 -28
View File
@@ -1,7 +1,7 @@
{
"name": "xterm",
"description": "Full xterm terminal, in your browser",
"version": "4.5.0",
"version": "4.10.0",
"main": "lib/xterm.js",
"style": "css/xterm.css",
"types": "typings/xterm.d.ts",
@@ -11,16 +11,13 @@
"prepackage": "npm run build",
"package": "webpack",
"start": "node demo/start",
"lint": "eslint -c .eslintrc.json --ext .ts src/ addons/",
"lint": "eslint -c .eslintrc.json --max-warnings 0 --ext .ts src/ addons/",
"test": "npm run test-unit",
"posttest": "npm run lint",
"test-api": "npm run test-api-chromium",
"test-api-chromium": "mocha \"**/*.api.js\" --browser chromium --timeout 20000",
"test-api-firefox": "mocha \"**/*.api.js\" --browser firefox --timeout 20000",
"test-api-webkit": "mocha \"**/*.api.js\" --browser webkit --timeout 20000",
"pretest-api-chromium": "node ./bin/download_browser.js --browser chromium",
"pretest-api-firefox": "node ./bin/download_browser.js --browser firefox",
"pretest-api-webkit": "node ./bin/download_browser.js --browser webkit",
"test-api-chromium": "node ./bin/test_api.js --browser=chromium --timeout=20000",
"test-api-firefox": "node ./bin/test_api.js --browser=firefox --timeout=20000",
"test-api-webkit": "node ./bin/test_api.js --browser=webkit --timeout=20000",
"test-unit": "node ./bin/test.js",
"test-unit-coverage": "node ./bin/test.js --coverage",
"build": "tsc -b ./tsconfig.all.json",
@@ -36,37 +33,37 @@
"vtfeatures": "node bin/extract_vtfeatures.js src/**/*.ts src/*.ts"
},
"devDependencies": {
"@types/chai": "^4.2.11",
"@types/chai": "^4.2.14",
"@types/debug": "^4.1.5",
"@types/deep-equal": "^1.0.1",
"@types/glob": "^7.1.1",
"@types/jsdom": "^16.2.0",
"@types/mocha": "^7.0.2",
"@types/glob": "^7.1.3",
"@types/jsdom": "^16.2.5",
"@types/mocha": "^8.0.3",
"@types/node": "^10.17.17",
"@types/utf8": "^2.1.6",
"@types/webpack": "^4.41.10",
"@types/ws": "^7.2.3",
"@typescript-eslint/eslint-plugin": "^2.27.0",
"@typescript-eslint/parser": "^2.27.0",
"@types/webpack": "^4.41.24",
"@types/ws": "^7.2.9",
"@typescript-eslint/eslint-plugin": "^4.0.0",
"@typescript-eslint/parser": "^3.10.1",
"chai": "^4.2.0",
"deep-equal": "^2.0.2",
"eslint": "^6.8.0",
"deep-equal": "^2.0.4",
"eslint": "^7.12.1",
"express": "^4.17.1",
"express-ws": "^4.0.0",
"glob": "^7.0.5",
"jsdom": "^16.2.2",
"mocha": "^7.1.1",
"jsdom": "^16.4.0",
"mocha": "^8.2.1",
"mustache": "^4.0.1",
"node-pty": "^0.9.0",
"nyc": "^15.0.1",
"playwright-core": "^0.11.1",
"source-map-loader": "^0.2.4",
"ts-loader": "^6.0.4",
"typescript": "3.8",
"nyc": "^15.1.0",
"playwright": "^1.5.2",
"source-map-loader": "^1.1.2",
"ts-loader": "^8.0.8",
"typescript": "4.0",
"utf8": "^3.0.0",
"webpack": "^4.35.3",
"webpack-cli": "^3.3.11",
"ws": "^7.0.0",
"webpack": "^5.4.0",
"webpack-cli": "^4.2.0",
"ws": "^7.3.1",
"xterm-benchmark": "^0.1.3"
}
}
File diff suppressed because it is too large Load Diff
-360
View File
@@ -1,360 +0,0 @@
/**
* Copyright (c) 2017 The xterm.js authors. All rights reserved.
* @license MIT
*/
import { IRenderer, IRenderDimensions, CharacterJoinerHandler, IRequestRefreshRowsEvent } from 'browser/renderer/Types';
import { IInputHandlingTerminal, ICompositionHelper, ITerminal, IBrowser, ITerminalOptions } from './Types';
import { IBuffer, IBufferStringIterator, IBufferSet } from 'common/buffer/Types';
import { IBufferLine, ICellData, IAttributeData, ICircularList, XtermListener, ICharset } from 'common/Types';
import { Buffer } from 'common/buffer/Buffer';
import * as Browser from 'common/Platform';
import { IDisposable, IMarker, IEvent, ISelectionPosition, ILinkProvider } from 'xterm';
import { Terminal } from './Terminal';
import { AttributeData } from 'common/buffer/AttributeData';
import { IColorManager, IColorSet, ILinkMatcherOptions, ILinkifier, IViewport, ILinkifier2 } from 'browser/Types';
import { IOptionsService, IUnicodeService } from 'common/services/Services';
import { EventEmitter } from 'common/EventEmitter';
import { IParams, IFunctionIdentifier } from 'common/parser/Types';
import { ISelectionService } from 'browser/services/Services';
export class TestTerminal extends Terminal {
get curAttrData(): IAttributeData { return (this as any)._inputHandler._curAttrData; }
keyDown(ev: any): boolean { return this._keyDown(ev); }
keyPress(ev: any): boolean { return this._keyPress(ev); }
}
export class MockTerminal implements ITerminal {
onBlur: IEvent<void>;
onFocus: IEvent<void>;
onA11yChar: IEvent<string>;
onA11yTab: IEvent<number>;
onCursorMove: IEvent<void>;
onLineFeed: IEvent<void>;
onSelectionChange: IEvent<void>;
onData: IEvent<string>;
onBinary: IEvent<string>;
onTitleChange: IEvent<string>;
onScroll: IEvent<number>;
onKey: IEvent<{ key: string, domEvent: KeyboardEvent }>;
onRender: IEvent<{ start: number, end: number }>;
onResize: IEvent<{ cols: number, rows: number }>;
markers: IMarker[];
optionsService: IOptionsService;
unicodeService: IUnicodeService;
addMarker(cursorYOffset: number): IMarker {
throw new Error('Method not implemented.');
}
selectLines(start: number, end: number): void {
throw new Error('Method not implemented.');
}
scrollToLine(line: number): void {
throw new Error('Method not implemented.');
}
static string: any;
setOption(key: any, value: any): void {
throw new Error('Method not implemented.');
}
blur(): void {
throw new Error('Method not implemented.');
}
focus(): void {
throw new Error('Method not implemented.');
}
resize(columns: number, rows: number): void {
throw new Error('Method not implemented.');
}
writeln(data: string): void {
throw new Error('Method not implemented.');
}
paste(data: string): void {
throw new Error('Method not implemented.');
}
open(parent: HTMLElement): void {
throw new Error('Method not implemented.');
}
attachCustomKeyEventHandler(customKeyEventHandler: (event: KeyboardEvent) => boolean): void {
throw new Error('Method not implemented.');
}
addCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean): IDisposable {
throw new Error('Method not implemented.');
}
addDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean): IDisposable {
throw new Error('Method not implemented.');
}
addEscHandler(id: IFunctionIdentifier, handler: () => boolean): IDisposable {
throw new Error('Method not implemented.');
}
addOscHandler(ident: number, callback: (data: string) => boolean): IDisposable {
throw new Error('Method not implemented.');
}
registerLinkMatcher(regex: RegExp, handler: (event: MouseEvent, uri: string) => boolean | void, options?: ILinkMatcherOptions): number {
throw new Error('Method not implemented.');
}
deregisterLinkMatcher(matcherId: number): void {
throw new Error('Method not implemented.');
}
registerLinkProvider(linkProvider: ILinkProvider): IDisposable {
throw new Error('Method not implemented.');
}
hasSelection(): boolean {
throw new Error('Method not implemented.');
}
getSelection(): string {
throw new Error('Method not implemented.');
}
getSelectionPosition(): ISelectionPosition | undefined {
throw new Error('Method not implemented.');
}
clearSelection(): void {
throw new Error('Method not implemented.');
}
select(column: number, row: number, length: number): void {
throw new Error('Method not implemented.');
}
selectAll(): void {
throw new Error('Method not implemented.');
}
dispose(): void {
throw new Error('Method not implemented.');
}
scrollPages(pageCount: number): void {
throw new Error('Method not implemented.');
}
scrollToTop(): void {
throw new Error('Method not implemented.');
}
scrollToBottom(): void {
throw new Error('Method not implemented.');
}
clear(): void {
throw new Error('Method not implemented.');
}
write(data: string): void {
throw new Error('Method not implemented.');
}
writeUtf8(data: Uint8Array): void {
throw new Error('Method not implemented.');
}
bracketedPasteMode: boolean;
renderer: IRenderer;
linkifier: ILinkifier;
linkifier2: ILinkifier2;
isFocused: boolean;
options: ITerminalOptions = {};
element: HTMLElement;
screenElement: HTMLElement;
rowContainer: HTMLElement;
selectionContainer: HTMLElement;
selectionService: ISelectionService;
textarea: HTMLTextAreaElement;
rows: number;
cols: number;
browser: IBrowser = <any>Browser;
writeBuffer: string[];
children: HTMLElement[];
cursorHidden: boolean;
cursorState: number;
scrollback: number;
buffers: IBufferSet;
buffer: IBuffer;
viewport: IViewport;
applicationCursor: boolean;
handler(data: string): void {
throw new Error('Method not implemented.');
}
on(event: string, callback: (...args: any[]) => void): void {
throw new Error('Method not implemented.');
}
off(type: string, listener: XtermListener): void {
throw new Error('Method not implemented.');
}
addDisposableListener(type: string, handler: XtermListener): IDisposable {
throw new Error('Method not implemented.');
}
scrollLines(disp: number, suppressScrollEvent: boolean): void {
throw new Error('Method not implemented.');
}
scrollToRow(absoluteRow: number): number {
throw new Error('Method not implemented.');
}
cancel(ev: Event, force?: boolean): void {
throw new Error('Method not implemented.');
}
log(text: string): void {
throw new Error('Method not implemented.');
}
emit(event: string, data: any): void {
throw new Error('Method not implemented.');
}
reset(): void {
throw new Error('Method not implemented.');
}
showCursor(): void {
throw new Error('Method not implemented.');
}
refresh(start: number, end: number): void {
throw new Error('Method not implemented.');
}
registerCharacterJoiner(handler: CharacterJoinerHandler): number { return 0; }
deregisterCharacterJoiner(joinerId: number): void { }
}
export class MockInputHandlingTerminal implements IInputHandlingTerminal {
onA11yCharEmitter: EventEmitter<string>;
onA11yTabEmitter: EventEmitter<number>;
insertMode: boolean;
bracketedPasteMode: boolean;
sendFocus: boolean;
buffers: IBufferSet;
buffer: IBuffer = new MockBuffer();
viewport: IViewport;
scroll(eraseAttr: IAttributeData, isWrapped?: boolean): void {
throw new Error('Method not implemented.');
}
is(term: string): boolean {
throw new Error('Method not implemented.');
}
resize(x: number, y: number): void {
throw new Error('Method not implemented.');
}
showCursor(): void {
throw new Error('Method not implemented.');
}
handler(data: string): void {
throw new Error('Method not implemented.');
}
handleTitle(title: string): void {
throw new Error('Method not implemented.');
}
}
export class MockBuffer implements IBuffer {
markers: IMarker[];
addMarker(y: number): IMarker {
throw new Error('Method not implemented.');
}
isCursorInViewport: boolean;
lines: ICircularList<IBufferLine>;
ydisp: number;
ybase: number;
hasScrollback: boolean;
y: number;
x: number;
tabs: any;
scrollBottom: number;
scrollTop: number;
savedY: number;
savedX: number;
savedCharset: ICharset | null;
savedCurAttrData = new AttributeData();
translateBufferLineToString(lineIndex: number, trimRight: boolean, startCol?: number, endCol?: number): string {
return Buffer.prototype.translateBufferLineToString.apply(this, arguments);
}
getWrappedRangeForLine(y: number): { first: number, last: number } {
return Buffer.prototype.getWrappedRangeForLine.apply(this, arguments);
}
nextStop(x?: number): number {
throw new Error('Method not implemented.');
}
prevStop(x?: number): number {
throw new Error('Method not implemented.');
}
setLines(lines: ICircularList<IBufferLine>): void {
this.lines = lines;
}
getBlankLine(attr: IAttributeData, isWrapped?: boolean): IBufferLine {
return Buffer.prototype.getBlankLine.apply(this, arguments);
}
stringIndexToBufferIndex(lineIndex: number, stringIndex: number): number[] {
return Buffer.prototype.stringIndexToBufferIndex.apply(this, arguments);
}
iterator(trimRight: boolean, startIndex?: number, endIndex?: number): IBufferStringIterator {
return Buffer.prototype.iterator.apply(this, arguments);
}
getNullCell(attr?: IAttributeData): ICellData {
throw new Error('Method not implemented.');
}
getWhitespaceCell(attr?: IAttributeData): ICellData {
throw new Error('Method not implemented.');
}
}
export class MockRenderer implements IRenderer {
onRequestRefreshRows: IEvent<IRequestRefreshRowsEvent>;
onCanvasResize: IEvent<{ width: number, height: number }>;
onRender: IEvent<{ start: number, end: number }>;
dispose(): void {
throw new Error('Method not implemented.');
}
colorManager: IColorManager;
on(type: string, listener: XtermListener): void {
throw new Error('Method not implemented.');
}
off(type: string, listener: XtermListener): void {
throw new Error('Method not implemented.');
}
emit(type: string, data?: any): void {
throw new Error('Method not implemented.');
}
addDisposableListener(type: string, handler: XtermListener): IDisposable {
throw new Error('Method not implemented.');
}
dimensions: IRenderDimensions;
setColors(colors: IColorSet): void {
throw new Error('Method not implemented.');
}
onResize(cols: number, rows: number): void { }
onCharSizeChanged(): void { }
onBlur(): void { }
onFocus(): void { }
onSelectionChanged(start: [number, number], end: [number, number]): void { }
onCursorMove(): void { }
onOptionsChanged(): void { }
onDevicePixelRatioChange(): void { }
clear(): void { }
renderRows(start: number, end: number): void { }
registerCharacterJoiner(handler: CharacterJoinerHandler): number { return 0; }
deregisterCharacterJoiner(): boolean { return true; }
}
export class MockViewport implements IViewport {
dispose(): void {
throw new Error('Method not implemented.');
}
scrollBarWidth: number = 0;
onThemeChange(colors: IColorSet): void {
throw new Error('Method not implemented.');
}
onWheel(ev: WheelEvent): boolean {
throw new Error('Method not implemented.');
}
onTouchStart(ev: TouchEvent): void {
throw new Error('Method not implemented.');
}
onTouchMove(ev: TouchEvent): boolean {
throw new Error('Method not implemented.');
}
syncScrollArea(): void { }
getLinesScrolled(ev: WheelEvent): number {
throw new Error('Method not implemented.');
}
}
export class MockCompositionHelper implements ICompositionHelper {
compositionstart(): void {
throw new Error('Method not implemented.');
}
compositionupdate(ev: CompositionEvent): void {
throw new Error('Method not implemented.');
}
compositionend(): void {
throw new Error('Method not implemented.');
}
updateCompositionElements(dontRecurse?: boolean): void {
throw new Error('Method not implemented.');
}
keydown(ev: KeyboardEvent): boolean {
return true;
}
}
-236
View File
@@ -1,236 +0,0 @@
/**
* Copyright (c) 2017 The xterm.js authors. All rights reserved.
* @license MIT
*/
import { ITerminalOptions as IPublicTerminalOptions, IDisposable, IMarker, ISelectionPosition, ILinkProvider } from 'xterm';
import { ICharset, IAttributeData, CharData, CoreMouseEventType } from 'common/Types';
import { IEvent, IEventEmitter } from 'common/EventEmitter';
import { IColorSet, ILinkifier, ILinkMatcherOptions, IViewport, ILinkifier2 } from 'browser/Types';
import { IOptionsService, IUnicodeService } from 'common/services/Services';
import { IBuffer, IBufferSet } from 'common/buffer/Types';
import { IParams, IFunctionIdentifier } from 'common/parser/Types';
export type CustomKeyEventHandler = (event: KeyboardEvent) => boolean;
export type LineData = CharData[];
/**
* This interface encapsulates everything needed from the Terminal by the
* InputHandler. This cleanly separates the large amount of methods needed by
* InputHandler cleanly from the ITerminal interface.
*/
export interface IInputHandlingTerminal {
insertMode: boolean;
bracketedPasteMode: boolean;
sendFocus: boolean;
buffers: IBufferSet;
buffer: IBuffer;
viewport: IViewport;
onA11yCharEmitter: IEventEmitter<string>;
onA11yTabEmitter: IEventEmitter<number>;
scroll(eraseAttr: IAttributeData, isWrapped?: boolean): void;
is(term: string): boolean;
resize(x: number, y: number): void;
showCursor(): void;
handleTitle(title: string): void;
}
export interface ICompositionHelper {
compositionstart(): void;
compositionupdate(ev: CompositionEvent): void;
compositionend(): void;
updateCompositionElements(dontRecurse?: boolean): void;
keydown(ev: KeyboardEvent): boolean;
}
/**
* Calls the parser and handles actions generated by the parser.
*/
export interface IInputHandler {
parse(data: string | Uint8Array): void;
print(data: Uint32Array, start: number, end: number): void;
/** C0 BEL */ bell(): void;
/** C0 LF */ lineFeed(): void;
/** C0 CR */ carriageReturn(): void;
/** C0 BS */ backspace(): void;
/** C0 HT */ tab(): void;
/** C0 SO */ shiftOut(): void;
/** C0 SI */ shiftIn(): void;
/** CSI @ */ insertChars(params: IParams): void;
/** CSI SP @ */ scrollLeft(params: IParams): void;
/** CSI A */ cursorUp(params: IParams): void;
/** CSI SP A */ scrollRight(params: IParams): void;
/** CSI B */ cursorDown(params: IParams): void;
/** CSI C */ cursorForward(params: IParams): void;
/** CSI D */ cursorBackward(params: IParams): void;
/** CSI E */ cursorNextLine(params: IParams): void;
/** CSI F */ cursorPrecedingLine(params: IParams): void;
/** CSI G */ cursorCharAbsolute(params: IParams): void;
/** CSI H */ cursorPosition(params: IParams): void;
/** CSI I */ cursorForwardTab(params: IParams): void;
/** CSI J */ eraseInDisplay(params: IParams): void;
/** CSI K */ eraseInLine(params: IParams): void;
/** CSI L */ insertLines(params: IParams): void;
/** CSI M */ deleteLines(params: IParams): void;
/** CSI P */ deleteChars(params: IParams): void;
/** CSI S */ scrollUp(params: IParams): void;
/** CSI T */ scrollDown(params: IParams, collect?: string): void;
/** CSI X */ eraseChars(params: IParams): void;
/** CSI Z */ cursorBackwardTab(params: IParams): void;
/** CSI ` */ charPosAbsolute(params: IParams): void;
/** CSI a */ hPositionRelative(params: IParams): void;
/** CSI b */ repeatPrecedingCharacter(params: IParams): void;
/** CSI c */ sendDeviceAttributesPrimary(params: IParams): void;
/** CSI > c */ sendDeviceAttributesSecondary(params: IParams): void;
/** CSI d */ linePosAbsolute(params: IParams): void;
/** CSI e */ vPositionRelative(params: IParams): void;
/** CSI f */ hVPosition(params: IParams): void;
/** CSI g */ tabClear(params: IParams): void;
/** CSI h */ setMode(params: IParams, collect?: string): void;
/** CSI l */ resetMode(params: IParams, collect?: string): void;
/** CSI m */ charAttributes(params: IParams): void;
/** CSI n */ deviceStatus(params: IParams, collect?: string): void;
/** CSI p */ softReset(params: IParams, collect?: string): void;
/** CSI q */ setCursorStyle(params: IParams, collect?: string): void;
/** CSI r */ setScrollRegion(params: IParams, collect?: string): void;
/** CSI s */ saveCursor(params: IParams): void;
/** CSI u */ restoreCursor(params: IParams): void;
/** CSI ' } */ insertColumns(params: IParams): void;
/** CSI ' ~ */ deleteColumns(params: IParams): void;
/** OSC 0
OSC 2 */ setTitle(data: string): void;
/** ESC E */ nextLine(): void;
/** ESC = */ keypadApplicationMode(): void;
/** ESC > */ keypadNumericMode(): void;
/** ESC % G
ESC % @ */ selectDefaultCharset(): void;
/** ESC ( C
ESC ) C
ESC * C
ESC + C
ESC - C
ESC . C
ESC / C */ selectCharset(collectAndFlag: string): void;
/** ESC D */ index(): void;
/** ESC H */ tabSet(): void;
/** ESC M */ reverseIndex(): void;
/** ESC c */ fullReset(): void;
/** ESC n
ESC o
ESC |
ESC }
ESC ~ */ setgLevel(level: number): void;
/** ESC # 8 */ screenAlignmentPattern(): void;
}
export interface ITerminal extends IPublicTerminal, IElementAccessor, IBufferAccessor, ILinkifierAccessor {
screenElement: HTMLElement;
browser: IBrowser;
buffer: IBuffer;
buffers: IBufferSet;
viewport: IViewport;
bracketedPasteMode: boolean;
optionsService: IOptionsService;
// TODO: We should remove options once components adopt optionsService
options: ITerminalOptions;
unicodeService: IUnicodeService;
onBlur: IEvent<void>;
onFocus: IEvent<void>;
onA11yChar: IEvent<string>;
onA11yTab: IEvent<number>;
scrollLines(disp: number, suppressScrollEvent?: boolean): void;
cancel(ev: Event, force?: boolean): boolean | void;
showCursor(): void;
}
// Portions of the public API that are required by the internal Terminal
export interface IPublicTerminal extends IDisposable {
textarea: HTMLTextAreaElement | undefined;
rows: number;
cols: number;
buffer: IBuffer;
markers: IMarker[];
onCursorMove: IEvent<void>;
onData: IEvent<string>;
onBinary: IEvent<string>;
onKey: IEvent<{ key: string, domEvent: KeyboardEvent }>;
onLineFeed: IEvent<void>;
onScroll: IEvent<number>;
onSelectionChange: IEvent<void>;
onRender: IEvent<{ start: number, end: number }>;
onResize: IEvent<{ cols: number, rows: number }>;
onTitleChange: IEvent<string>;
blur(): void;
focus(): void;
resize(columns: number, rows: number): void;
open(parent: HTMLElement): void;
attachCustomKeyEventHandler(customKeyEventHandler: (event: KeyboardEvent) => boolean): void;
addCsiHandler(id: IFunctionIdentifier, callback: (params: IParams) => boolean): IDisposable;
addDcsHandler(id: IFunctionIdentifier, callback: (data: string, param: IParams) => boolean): IDisposable;
addEscHandler(id: IFunctionIdentifier, callback: () => boolean): IDisposable;
addOscHandler(ident: number, callback: (data: string) => boolean): IDisposable;
registerLinkMatcher(regex: RegExp, handler: (event: MouseEvent, uri: string) => void, options?: ILinkMatcherOptions): number;
deregisterLinkMatcher(matcherId: number): void;
registerLinkProvider(linkProvider: ILinkProvider): IDisposable;
registerCharacterJoiner(handler: (text: string) => [number, number][]): number;
deregisterCharacterJoiner(joinerId: number): void;
addMarker(cursorYOffset: number): IMarker;
hasSelection(): boolean;
getSelection(): string;
getSelectionPosition(): ISelectionPosition | undefined;
clearSelection(): void;
select(column: number, row: number, length: number): void;
selectAll(): void;
selectLines(start: number, end: number): void;
dispose(): void;
scrollLines(amount: number): void;
scrollPages(pageCount: number): void;
scrollToTop(): void;
scrollToBottom(): void;
scrollToLine(line: number): void;
clear(): void;
write(data: string | Uint8Array, callback?: () => void): void;
paste(data: string): void;
refresh(start: number, end: number): void;
reset(): void;
}
export interface IBufferAccessor {
buffer: IBuffer;
}
export interface IElementAccessor {
readonly element: HTMLElement | undefined;
}
export interface ILinkifierAccessor {
linkifier: ILinkifier;
linkifier2: ILinkifier2;
}
// TODO: The options that are not in the public API should be reviewed
export interface ITerminalOptions extends IPublicTerminalOptions {
[key: string]: any;
cancelEvents?: boolean;
convertEol?: boolean;
termName?: string;
}
export interface IBrowser {
isNode: boolean;
userAgent: string;
platform: string;
isFirefox: boolean;
isMac: boolean;
isIpad: boolean;
isIphone: boolean;
isWindows: boolean;
}
@@ -3,8 +3,8 @@
* @license MIT
*/
import * as Strings from './browser/LocalizableStrings';
import { ITerminal } from './Types';
import * as Strings from 'browser/LocalizableStrings';
import { ITerminal } from 'browser/Types';
import { IBuffer } from 'common/buffer/Types';
import { isMac } from 'common/Platform';
import { RenderDebouncer } from 'browser/RenderDebouncer';
@@ -12,6 +12,7 @@ import { addDisposableDomListener } from 'browser/Lifecycle';
import { Disposable } from 'common/Lifecycle';
import { ScreenDprMonitor } from 'browser/ScreenDprMonitor';
import { IRenderService } from 'browser/services/Services';
import { removeElementFromParent } from 'browser/Dom';
const MAX_ROWS_TO_READ = 20;
@@ -55,8 +56,8 @@ export class AccessibilityManager extends Disposable {
this._accessibilityTreeRoot.classList.add('xterm-accessibility');
this._rowContainer = document.createElement('div');
this._rowContainer.classList.add('xterm-accessibility-tree');
this._rowContainer.setAttribute('role', 'list');
this._rowContainer.classList.add('xterm-accessibility-tree');
this._rowElements = [];
for (let i = 0; i < this._terminal.rows; i++) {
this._rowElements[i] = this._createAccessibilityTreeNode();
@@ -79,6 +80,9 @@ export class AccessibilityManager extends Disposable {
this._liveRegion.setAttribute('aria-live', 'assertive');
this._accessibilityTreeRoot.appendChild(this._liveRegion);
if (!this._terminal.element) {
throw new Error('Cannot enable accessibility before Terminal.open');
}
this._terminal.element.insertAdjacentElement('afterbegin', this._accessibilityTreeRoot);
this.register(this._renderRowsDebouncer);
@@ -103,7 +107,7 @@ export class AccessibilityManager extends Disposable {
public dispose(): void {
super.dispose();
this._terminal.element.removeChild(this._accessibilityTreeRoot);
removeElementFromParent(this._accessibilityTreeRoot);
this._rowElements.length = 0;
}
@@ -237,9 +241,7 @@ export class AccessibilityManager extends Disposable {
// Only detach/attach on mac as otherwise messages can go unaccounced
if (isMac) {
if (this._liveRegion.parentNode) {
this._accessibilityTreeRoot.removeChild(this._liveRegion);
}
removeElementFromParent(this._liveRegion);
}
}
@@ -261,7 +263,7 @@ export class AccessibilityManager extends Disposable {
const element = this._rowElements[i];
if (element) {
if (lineData.length === 0) {
element.innerHTML = '&nbsp;';
element.innerText = '\u00a0';
} else {
element.textContent = lineData;
}
+6 -18
View File
@@ -42,17 +42,17 @@ export function copyHandler(ev: ClipboardEvent, selectionService: ISelectionServ
* @param ev The original paste event to be handled
* @param term The terminal on which to apply the handled paste event
*/
export function handlePasteEvent(ev: ClipboardEvent, textarea: HTMLTextAreaElement, bracketedPasteMode: boolean, coreService: ICoreService): void {
export function handlePasteEvent(ev: ClipboardEvent, textarea: HTMLTextAreaElement, coreService: ICoreService): void {
ev.stopPropagation();
if (ev.clipboardData) {
const text = ev.clipboardData.getData('text/plain');
paste(text, textarea, bracketedPasteMode, coreService);
paste(text, textarea, coreService);
}
}
export function paste(text: string, textarea: HTMLTextAreaElement, bracketedPasteMode: boolean, coreService: ICoreService): void {
export function paste(text: string, textarea: HTMLTextAreaElement, coreService: ICoreService): void {
text = prepareTextForTerminal(text);
text = bracketTextForPaste(text, bracketedPasteMode);
text = bracketTextForPaste(text, coreService.decPrivateModes.bracketedPasteMode);
coreService.triggerDataEvent(text, true);
textarea.value = '';
}
@@ -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);
}
/**
@@ -101,8 +89,8 @@ export function moveTextAreaUnderMouseCursor(ev: MouseEvent, textarea: HTMLTextA
export function rightClickHandler(ev: MouseEvent, textarea: HTMLTextAreaElement, screenElement: HTMLElement, selectionService: ISelectionService, shouldSelectWord: boolean): void {
moveTextAreaUnderMouseCursor(ev, textarea, screenElement);
if (shouldSelectWord && !selectionService.isClickInSelection(ev)) {
selectionService.selectWordAtCursor(ev);
if (shouldSelectWord) {
selectionService.rightClickSelect(ev);
}
// Get textarea ready to copy from the context menu
+52 -1
View File
@@ -117,11 +117,43 @@ describe('Color', () => {
assert.deepEqual(color.opaque({ css: '#ffffffff', rgba: 0xffffffff }), { css: '#ffffff', rgba: 0xffffffFF });
});
});
describe('isOpaque', () => {
it('should return true for opaque colors', () => {
assert.ok(color.isOpaque(css.toColor('#000000')));
assert.ok(color.isOpaque(css.toColor('#000000ff')));
assert.ok(color.isOpaque(css.toColor('#808080')));
assert.ok(color.isOpaque(css.toColor('#808080ff')));
assert.ok(color.isOpaque(css.toColor('#ffffff')));
assert.ok(color.isOpaque(css.toColor('#ffffffff')));
});
it('should return false for transparent colors', () => {
assert.ok(!color.isOpaque(css.toColor('#00000000')));
assert.ok(!color.isOpaque(css.toColor('#00000080')));
assert.ok(!color.isOpaque(css.toColor('#000000fe')));
assert.ok(!color.isOpaque(css.toColor('#80808000')));
assert.ok(!color.isOpaque(css.toColor('#80808080')));
assert.ok(!color.isOpaque(css.toColor('#808080fe')));
assert.ok(!color.isOpaque(css.toColor('#ffffff00')));
assert.ok(!color.isOpaque(css.toColor('#ffffff80')));
assert.ok(!color.isOpaque(css.toColor('#fffffffe')));
});
});
describe('opacity', () => {
it('should make the color transparent', () => {
assert.deepEqual(color.opacity(css.toColor('#000000'), 0), { css: '#00000000', rgba: 0x00000000 });
assert.deepEqual(color.opacity(css.toColor('#000000'), 0.25), { css: '#00000040', rgba: 0x00000040 });
assert.deepEqual(color.opacity(css.toColor('#000000'), 0.5), { css: '#00000080', rgba: 0x00000080 });
assert.deepEqual(color.opacity(css.toColor('#000000'), 0.75), { css: '#000000bf', rgba: 0x000000bf });
assert.deepEqual(color.opacity(css.toColor('#000000'), 1), { css: '#000000ff', rgba: 0x000000ff });
});
});
});
describe('css', () => {
describe('toColor', () => {
it('should covert a CSS string to an IColor', () => {
it('should convert the #rrggbb format to an IColor', () => {
assert.deepEqual(css.toColor('#000000'), { css: '#000000', rgba: 0x000000FF });
assert.deepEqual(css.toColor('#101010'), { css: '#101010', rgba: 0x101010FF });
assert.deepEqual(css.toColor('#202020'), { css: '#202020', rgba: 0x202020FF });
@@ -140,6 +172,25 @@ describe('Color', () => {
assert.deepEqual(css.toColor('#f0f0f0'), { css: '#f0f0f0', rgba: 0xf0f0f0FF });
assert.deepEqual(css.toColor('#ffffff'), { css: '#ffffff', rgba: 0xffffffFF });
});
it('should convert the #rrggbbaa format to an IColor', () => {
assert.deepEqual(css.toColor('#00000000'), { css: '#00000000', rgba: 0x00000000 });
assert.deepEqual(css.toColor('#10101010'), { css: '#10101010', rgba: 0x10101010 });
assert.deepEqual(css.toColor('#20202020'), { css: '#20202020', rgba: 0x20202020 });
assert.deepEqual(css.toColor('#30303030'), { css: '#30303030', rgba: 0x30303030 });
assert.deepEqual(css.toColor('#40404040'), { css: '#40404040', rgba: 0x40404040 });
assert.deepEqual(css.toColor('#50505050'), { css: '#50505050', rgba: 0x50505050 });
assert.deepEqual(css.toColor('#60606060'), { css: '#60606060', rgba: 0x60606060 });
assert.deepEqual(css.toColor('#70707070'), { css: '#70707070', rgba: 0x70707070 });
assert.deepEqual(css.toColor('#80808080'), { css: '#80808080', rgba: 0x80808080 });
assert.deepEqual(css.toColor('#90909090'), { css: '#90909090', rgba: 0x90909090 });
assert.deepEqual(css.toColor('#a0a0a0a0'), { css: '#a0a0a0a0', rgba: 0xa0a0a0a0 });
assert.deepEqual(css.toColor('#b0b0b0b0'), { css: '#b0b0b0b0', rgba: 0xb0b0b0b0 });
assert.deepEqual(css.toColor('#c0c0c0c0'), { css: '#c0c0c0c0', rgba: 0xc0c0c0c0 });
assert.deepEqual(css.toColor('#d0d0d0d0'), { css: '#d0d0d0d0', rgba: 0xd0d0d0d0 });
assert.deepEqual(css.toColor('#e0e0e0e0'), { css: '#e0e0e0e0', rgba: 0xe0e0e0e0 });
assert.deepEqual(css.toColor('#f0f0f0f0'), { css: '#f0f0f0f0', rgba: 0xf0f0f0f0 });
assert.deepEqual(css.toColor('#ffffffff'), { css: '#ffffffff', rgba: 0xffffffff });
});
});
});
+26 -4
View File
@@ -48,6 +48,10 @@ export namespace color {
return { css, rgba };
}
export function isOpaque(color: IColor): boolean {
return (color.rgba & 0xFF) === 0xFF;
}
export function ensureContrastRatio(bg: IColor, fg: IColor, ratio: number): IColor | undefined {
const result = rgba.ensureContrastRatio(bg.rgba, fg.rgba, ratio);
if (!result) {
@@ -68,6 +72,15 @@ export namespace color {
rgba: rgbaColor
};
}
export function opacity(color: IColor, opacity: number): IColor {
const a = Math.round(opacity * 0xFF);
const [r, g, b] = rgba.toChannels(color.rgba);
return {
css: channels.toCss(r, g, b, a),
rgba: channels.toRgba(r, g, b, a)
};
}
}
/**
@@ -75,10 +88,19 @@ export namespace color {
*/
export namespace css {
export function toColor(css: string): IColor {
return {
css,
rgba: (parseInt(css.slice(1), 16) << 8 | 0xFF) >>> 0
};
switch (css.length) {
case 7: // #rrggbb
return {
css,
rgba: (parseInt(css.slice(1), 16) << 8 | 0xFF) >>> 0
};
case 9: // #rrggbbaa
return {
css,
rgba: parseInt(css.slice(1), 16) >>> 0
};
}
throw new Error('css.toColor: Unsupported css format');
}
}
+14 -7
View File
@@ -17,9 +17,8 @@ const DEFAULT_SELECTION = {
rgba: 0xFFFFFF4D
};
// An IIFE to generate DEFAULT_ANSI_COLORS. Do not mutate DEFAULT_ANSI_COLORS, instead make a copy
// and mutate that.
export const DEFAULT_ANSI_COLORS = (() => {
// An IIFE to generate DEFAULT_ANSI_COLORS.
export const DEFAULT_ANSI_COLORS = Object.freeze((() => {
const colors = [
// dark:
css.toColor('#2e3436'),
@@ -64,7 +63,7 @@ export const DEFAULT_ANSI_COLORS = (() => {
}
return colors;
})();
})());
/**
* Manages the source of truth for a terminal's colors.
@@ -92,7 +91,7 @@ export class ColorManager implements IColorManager {
background: DEFAULT_BACKGROUND,
cursor: DEFAULT_CURSOR,
cursorAccent: DEFAULT_CURSOR_ACCENT,
selection: DEFAULT_SELECTION,
selectionTransparent: DEFAULT_SELECTION,
selectionOpaque: color.blend(DEFAULT_BACKGROUND, DEFAULT_SELECTION),
ansi: DEFAULT_ANSI_COLORS.slice(),
contrastCache: this._contrastCache
@@ -115,8 +114,16 @@ export class ColorManager implements IColorManager {
this.colors.background = this._parseColor(theme.background, DEFAULT_BACKGROUND);
this.colors.cursor = this._parseColor(theme.cursor, DEFAULT_CURSOR, true);
this.colors.cursorAccent = this._parseColor(theme.cursorAccent, DEFAULT_CURSOR_ACCENT, true);
this.colors.selection = this._parseColor(theme.selection, DEFAULT_SELECTION, true);
this.colors.selectionOpaque = color.blend(this.colors.background, this.colors.selection);
this.colors.selectionTransparent = this._parseColor(theme.selection, DEFAULT_SELECTION, true);
this.colors.selectionOpaque = color.blend(this.colors.background, this.colors.selectionTransparent);
/**
* If selection color is opaque, blend it with background with 0.3 opacity
* Issue #2737
*/
if (color.isOpaque(this.colors.selectionTransparent)) {
const opacity = 0.3;
this.colors.selectionTransparent = color.opacity(this.colors.selectionTransparent, opacity);
}
this.colors.ansi[0] = this._parseColor(theme.black, DEFAULT_ANSI_COLORS[0]);
this.colors.ansi[1] = this._parseColor(theme.red, DEFAULT_ANSI_COLORS[1]);
this.colors.ansi[2] = this._parseColor(theme.green, DEFAULT_ANSI_COLORS[2]);
+41
View File
@@ -0,0 +1,41 @@
/**
* Copyright (c) 2020 The xterm.js authors. All rights reserved.
* @license MIT
*/
import jsdom = require('jsdom');
import { removeElementFromParent } from 'browser/Dom';
import { strictEqual, doesNotThrow } from 'assert';
describe('Dom', () => {
const dom = new jsdom.JSDOM();
const document = dom.window.document;
describe('removeElementFromParent', () => {
it('should remove single child', () => {
const e = document.createElement('div');
document.body.appendChild(e);
strictEqual(e.parentElement, document.body);
removeElementFromParent(e);
strictEqual(e.parentElement, null);
});
it('should remove multiple elements', () => {
const e1 = document.createElement('div');
const e2 = document.createElement('div');
document.body.appendChild(e1);
document.body.appendChild(e2);
strictEqual(e1.parentElement, document.body);
strictEqual(e2.parentElement, document.body);
removeElementFromParent(e1, e2);
strictEqual(e1.parentElement, null);
strictEqual(e2.parentElement, null);
});
it('should not throw on undefined', () => {
const e = document.createElement('div');
document.body.appendChild(e);
strictEqual(e.parentElement, document.body);
doesNotThrow(() => removeElementFromParent(undefined, e));
strictEqual(e.parentElement, null);
});
});
});
+10
View File
@@ -0,0 +1,10 @@
/**
* Copyright (c) 2020 The xterm.js authors. All rights reserved.
* @license MIT
*/
export function removeElementFromParent(...elements: (HTMLElement | undefined)[]): void {
for (const e of elements) {
e?.parentElement?.removeChild(e);
}
}

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