@xterm/xterm 5.6.0-beta.8 → 5.6.0-beta.80

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/README.md +6 -3
  2. package/css/xterm.css +71 -4
  3. package/lib/xterm.js +1 -1
  4. package/lib/xterm.js.map +1 -1
  5. package/lib/xterm.mjs +53 -0
  6. package/lib/xterm.mjs.map +7 -0
  7. package/package.json +43 -33
  8. package/src/browser/AccessibilityManager.ts +53 -25
  9. package/src/browser/{Terminal.ts → CoreBrowserTerminal.ts} +139 -148
  10. package/src/browser/Linkifier.ts +26 -14
  11. package/src/browser/LocalizableStrings.ts +15 -4
  12. package/src/browser/{Types.d.ts → Types.ts} +67 -15
  13. package/src/browser/Viewport.ts +143 -370
  14. package/src/browser/decorations/BufferDecorationRenderer.ts +14 -9
  15. package/src/browser/decorations/OverviewRulerRenderer.ts +40 -44
  16. package/src/browser/public/Terminal.ts +25 -19
  17. package/src/browser/renderer/dom/DomRenderer.ts +22 -19
  18. package/src/browser/renderer/dom/DomRendererRowFactory.ts +35 -15
  19. package/src/browser/renderer/shared/CharAtlasUtils.ts +4 -0
  20. package/src/browser/renderer/shared/CustomGlyphs.ts +6 -0
  21. package/src/browser/renderer/shared/DevicePixelObserver.ts +1 -2
  22. package/src/browser/renderer/shared/TextureAtlas.ts +3 -3
  23. package/src/browser/renderer/shared/{Types.d.ts → Types.ts} +4 -4
  24. package/src/browser/services/CharSizeService.ts +6 -6
  25. package/src/browser/services/CoreBrowserService.ts +15 -15
  26. package/src/browser/services/LinkProviderService.ts +2 -2
  27. package/src/browser/services/RenderService.ts +20 -20
  28. package/src/browser/services/SelectionService.ts +8 -8
  29. package/src/browser/services/Services.ts +13 -13
  30. package/src/browser/services/ThemeService.ts +19 -58
  31. package/src/browser/shared/Constants.ts +8 -0
  32. package/src/common/CircularList.ts +5 -5
  33. package/src/common/CoreTerminal.ts +35 -41
  34. package/src/common/InputHandler.ts +63 -51
  35. package/src/common/{Types.d.ts → Types.ts} +13 -17
  36. package/src/common/buffer/Buffer.ts +15 -7
  37. package/src/common/buffer/BufferReflow.ts +9 -6
  38. package/src/common/buffer/BufferSet.ts +5 -5
  39. package/src/common/buffer/Marker.ts +4 -4
  40. package/src/common/buffer/{Types.d.ts → Types.ts} +2 -2
  41. package/src/common/input/WriteBuffer.ts +3 -3
  42. package/src/common/parser/EscapeSequenceParser.ts +4 -4
  43. package/src/common/public/BufferNamespaceApi.ts +3 -3
  44. package/src/common/services/BufferService.ts +7 -7
  45. package/src/common/services/CoreMouseService.ts +5 -3
  46. package/src/common/services/CoreService.ts +8 -6
  47. package/src/common/services/DecorationService.ts +8 -9
  48. package/src/common/services/InstantiationService.ts +1 -1
  49. package/src/common/services/LogService.ts +2 -2
  50. package/src/common/services/OptionsService.ts +6 -5
  51. package/src/common/services/ServiceRegistry.ts +1 -1
  52. package/src/common/services/Services.ts +26 -17
  53. package/src/common/services/UnicodeService.ts +2 -2
  54. package/src/vs/base/browser/browser.ts +141 -0
  55. package/src/vs/base/browser/canIUse.ts +49 -0
  56. package/src/vs/base/browser/dom.ts +2369 -0
  57. package/src/vs/base/browser/fastDomNode.ts +316 -0
  58. package/src/vs/base/browser/globalPointerMoveMonitor.ts +112 -0
  59. package/src/vs/base/browser/iframe.ts +135 -0
  60. package/src/vs/base/browser/keyboardEvent.ts +213 -0
  61. package/src/vs/base/browser/mouseEvent.ts +229 -0
  62. package/src/vs/base/browser/touch.ts +372 -0
  63. package/src/vs/base/browser/ui/scrollbar/abstractScrollbar.ts +303 -0
  64. package/src/vs/base/browser/ui/scrollbar/horizontalScrollbar.ts +114 -0
  65. package/src/vs/base/browser/ui/scrollbar/scrollableElement.ts +720 -0
  66. package/src/vs/base/browser/ui/scrollbar/scrollableElementOptions.ts +165 -0
  67. package/src/vs/base/browser/ui/scrollbar/scrollbarArrow.ts +114 -0
  68. package/src/vs/base/browser/ui/scrollbar/scrollbarState.ts +243 -0
  69. package/src/vs/base/browser/ui/scrollbar/scrollbarVisibilityController.ts +118 -0
  70. package/src/vs/base/browser/ui/scrollbar/verticalScrollbar.ts +116 -0
  71. package/src/vs/base/browser/ui/widget.ts +57 -0
  72. package/src/vs/base/browser/window.ts +14 -0
  73. package/src/vs/base/common/arrays.ts +887 -0
  74. package/src/vs/base/common/arraysFind.ts +202 -0
  75. package/src/vs/base/common/assert.ts +71 -0
  76. package/src/vs/base/common/async.ts +1992 -0
  77. package/src/vs/base/common/cancellation.ts +148 -0
  78. package/src/vs/base/common/charCode.ts +450 -0
  79. package/src/vs/base/common/collections.ts +140 -0
  80. package/src/vs/base/common/decorators.ts +130 -0
  81. package/src/vs/base/common/equals.ts +146 -0
  82. package/src/vs/base/common/errors.ts +303 -0
  83. package/src/vs/base/common/event.ts +1778 -0
  84. package/src/vs/base/common/functional.ts +32 -0
  85. package/src/vs/base/common/hash.ts +316 -0
  86. package/src/vs/base/common/iterator.ts +159 -0
  87. package/src/vs/base/common/keyCodes.ts +526 -0
  88. package/src/vs/base/common/keybindings.ts +284 -0
  89. package/src/vs/base/common/lazy.ts +47 -0
  90. package/src/vs/base/common/lifecycle.ts +801 -0
  91. package/src/vs/base/common/linkedList.ts +142 -0
  92. package/src/vs/base/common/map.ts +202 -0
  93. package/src/vs/base/common/numbers.ts +98 -0
  94. package/src/vs/base/common/observable.ts +76 -0
  95. package/src/vs/base/common/observableInternal/api.ts +31 -0
  96. package/src/vs/base/common/observableInternal/autorun.ts +281 -0
  97. package/src/vs/base/common/observableInternal/base.ts +489 -0
  98. package/src/vs/base/common/observableInternal/debugName.ts +145 -0
  99. package/src/vs/base/common/observableInternal/derived.ts +428 -0
  100. package/src/vs/base/common/observableInternal/lazyObservableValue.ts +146 -0
  101. package/src/vs/base/common/observableInternal/logging.ts +328 -0
  102. package/src/vs/base/common/observableInternal/promise.ts +209 -0
  103. package/src/vs/base/common/observableInternal/utils.ts +610 -0
  104. package/src/vs/base/common/platform.ts +281 -0
  105. package/src/vs/base/common/scrollable.ts +522 -0
  106. package/src/vs/base/common/sequence.ts +34 -0
  107. package/src/vs/base/common/stopwatch.ts +43 -0
  108. package/src/vs/base/common/strings.ts +557 -0
  109. package/src/vs/base/common/symbols.ts +9 -0
  110. package/src/vs/base/common/uint.ts +59 -0
  111. package/src/vs/patches/nls.ts +90 -0
  112. package/src/vs/typings/base-common.d.ts +20 -0
  113. package/src/vs/typings/require.d.ts +42 -0
  114. package/src/vs/typings/thenable.d.ts +12 -0
  115. package/src/vs/typings/vscode-globals-nls.d.ts +36 -0
  116. package/src/vs/typings/vscode-globals-product.d.ts +33 -0
  117. package/typings/xterm.d.ts +66 -15
  118. package/src/browser/Lifecycle.ts +0 -33
  119. package/src/common/EventEmitter.ts +0 -78
  120. package/src/common/Lifecycle.ts +0 -108
  121. /package/src/browser/selection/{Types.d.ts → Types.ts} +0 -0
  122. /package/src/common/parser/{Types.d.ts → Types.ts} +0 -0
@@ -3,13 +3,13 @@
3
3
  * @license MIT
4
4
  */
5
5
 
6
- import { addDisposableDomListener } from 'browser/Lifecycle';
7
6
  import { IBufferCellPosition, ILink, ILinkDecorations, ILinkWithState, ILinkifier2, ILinkifierEvent } from 'browser/Types';
8
- import { EventEmitter } from 'common/EventEmitter';
9
- import { Disposable, disposeArray, getDisposeArrayDisposable, toDisposable } from 'common/Lifecycle';
7
+ import { Disposable, dispose, toDisposable } from 'vs/base/common/lifecycle';
10
8
  import { IDisposable } from 'common/Types';
11
9
  import { IBufferService } from 'common/services/Services';
12
10
  import { ILinkProviderService, IMouseService, IRenderService } from './services/Services';
11
+ import { Emitter } from 'vs/base/common/event';
12
+ import { addDisposableListener } from 'vs/base/browser/dom';
13
13
 
14
14
  export class Linkifier extends Disposable implements ILinkifier2 {
15
15
  public get currentLink(): ILinkWithState | undefined { return this._currentLink; }
@@ -23,9 +23,9 @@ export class Linkifier extends Disposable implements ILinkifier2 {
23
23
  private _activeProviderReplies: Map<Number, ILinkWithState[] | undefined> | undefined;
24
24
  private _activeLine: number = -1;
25
25
 
26
- private readonly _onShowLinkUnderline = this.register(new EventEmitter<ILinkifierEvent>());
26
+ private readonly _onShowLinkUnderline = this._register(new Emitter<ILinkifierEvent>());
27
27
  public readonly onShowLinkUnderline = this._onShowLinkUnderline.event;
28
- private readonly _onHideLinkUnderline = this.register(new EventEmitter<ILinkifierEvent>());
28
+ private readonly _onHideLinkUnderline = this._register(new Emitter<ILinkifierEvent>());
29
29
  public readonly onHideLinkUnderline = this._onHideLinkUnderline.event;
30
30
 
31
31
  constructor(
@@ -36,24 +36,25 @@ export class Linkifier extends Disposable implements ILinkifier2 {
36
36
  @ILinkProviderService private readonly _linkProviderService: ILinkProviderService
37
37
  ) {
38
38
  super();
39
- this.register(getDisposeArrayDisposable(this._linkCacheDisposables));
40
- this.register(toDisposable(() => {
39
+ this._register(toDisposable(() => {
40
+ dispose(this._linkCacheDisposables);
41
+ this._linkCacheDisposables.length = 0;
41
42
  this._lastMouseEvent = undefined;
42
43
  // Clear out link providers as they could easily cause an embedder memory leak
43
44
  this._activeProviderReplies?.clear();
44
45
  }));
45
46
  // Listen to resize to catch the case where it's resized and the cursor is out of the viewport.
46
- this.register(this._bufferService.onResize(() => {
47
+ this._register(this._bufferService.onResize(() => {
47
48
  this._clearCurrentLink();
48
49
  this._wasResized = true;
49
50
  }));
50
- this.register(addDisposableDomListener(this._element, 'mouseleave', () => {
51
+ this._register(addDisposableListener(this._element, 'mouseleave', () => {
51
52
  this._isMouseOut = true;
52
53
  this._clearCurrentLink();
53
54
  }));
54
- this.register(addDisposableDomListener(this._element, 'mousemove', this._handleMouseMove.bind(this)));
55
- this.register(addDisposableDomListener(this._element, 'mousedown', this._handleMouseDown.bind(this)));
56
- this.register(addDisposableDomListener(this._element, 'mouseup', this._handleMouseUp.bind(this)));
55
+ this._register(addDisposableListener(this._element, 'mousemove', this._handleMouseMove.bind(this)));
56
+ this._register(addDisposableListener(this._element, 'mousedown', this._handleMouseDown.bind(this)));
57
+ this._register(addDisposableListener(this._element, 'mouseup', this._handleMouseUp.bind(this)));
57
58
  }
58
59
 
59
60
  private _handleMouseMove(event: MouseEvent): void {
@@ -226,7 +227,7 @@ export class Linkifier extends Disposable implements ILinkifier2 {
226
227
  return;
227
228
  }
228
229
 
229
- if (this._mouseDownLink === this._currentLink && this._linkAtPosition(this._currentLink.link, position)) {
230
+ if (this._mouseDownLink && linkEquals(this._mouseDownLink.link, this._currentLink.link) && this._linkAtPosition(this._currentLink.link, position)) {
230
231
  this._currentLink.link.activate(event, this._currentLink.link.text);
231
232
  }
232
233
  }
@@ -240,7 +241,8 @@ export class Linkifier extends Disposable implements ILinkifier2 {
240
241
  if (!startRow || !endRow || (this._currentLink.link.range.start.y >= startRow && this._currentLink.link.range.end.y <= endRow)) {
241
242
  this._linkLeave(this._element, this._currentLink.link, this._lastMouseEvent);
242
243
  this._currentLink = undefined;
243
- disposeArray(this._linkCacheDisposables);
244
+ dispose(this._linkCacheDisposables);
245
+ this._linkCacheDisposables.length = 0;
244
246
  }
245
247
  }
246
248
 
@@ -389,3 +391,13 @@ export class Linkifier extends Disposable implements ILinkifier2 {
389
391
  return { x1, y1, x2, y2, cols: this._bufferService.cols, fg };
390
392
  }
391
393
  }
394
+
395
+ function linkEquals(a: ILink, b: ILink): boolean {
396
+ return (
397
+ a.text === b.text &&
398
+ a.range.start.x === b.range.start.x &&
399
+ a.range.start.y === b.range.start.y &&
400
+ a.range.end.x === b.range.end.x &&
401
+ a.range.end.y === b.range.end.y
402
+ );
403
+ }
@@ -5,8 +5,19 @@
5
5
 
6
6
  // This file contains strings that get exported in the API so they can be localized
7
7
 
8
- // eslint-disable-next-line prefer-const
9
- export let promptLabel = 'Terminal input';
8
+ let promptLabelInternal = 'Terminal input';
9
+ const promptLabel = {
10
+ get: () => promptLabelInternal,
11
+ set: (value: string) => promptLabelInternal = value
12
+ };
10
13
 
11
- // eslint-disable-next-line prefer-const
12
- export let tooMuchOutput = 'Too much output to announce, navigate to rows manually to read';
14
+ let tooMuchOutputInternal = 'Too much output to announce, navigate to rows manually to read';
15
+ const tooMuchOutput = {
16
+ get: () => tooMuchOutputInternal,
17
+ set: (value: string) => tooMuchOutputInternal = value
18
+ };
19
+
20
+ export {
21
+ promptLabel,
22
+ tooMuchOutput
23
+ };
@@ -3,10 +3,11 @@
3
3
  * @license MIT
4
4
  */
5
5
 
6
- import { IEvent } from 'common/EventEmitter';
7
6
  import { CharData, IColor, ICoreTerminal, ITerminalOptions } from 'common/Types';
8
7
  import { IBuffer } from 'common/buffer/Types';
9
8
  import { IDisposable, Terminal as ITerminalApi } from '@xterm/xterm';
9
+ import { channels, css } from 'common/Color';
10
+ import type { Event } from 'vs/base/common/event';
10
11
 
11
12
  /**
12
13
  * A portion of the public API that are implemented identially internally and simply passed through.
@@ -18,16 +19,15 @@ export interface ITerminal extends InternalPassthroughApis, ICoreTerminal {
18
19
  browser: IBrowser;
19
20
  buffer: IBuffer;
20
21
  linkifier: ILinkifier2 | undefined;
21
- viewport: IViewport | undefined;
22
22
  options: Required<ITerminalOptions>;
23
23
 
24
- onBlur: IEvent<void>;
25
- onFocus: IEvent<void>;
26
- onA11yChar: IEvent<string>;
27
- onA11yTab: IEvent<number>;
28
- onWillOpen: IEvent<HTMLElement>;
24
+ onBlur: Event<void>;
25
+ onFocus: Event<void>;
26
+ onA11yChar: Event<string>;
27
+ onA11yTab: Event<number>;
28
+ onWillOpen: Event<HTMLElement>;
29
29
 
30
- cancel(ev: Event, force?: boolean): boolean | void;
30
+ cancel(ev: MouseEvent | WheelEvent | KeyboardEvent | InputEvent, force?: boolean): boolean | void;
31
31
  }
32
32
 
33
33
  export type CustomKeyEventHandler = (event: KeyboardEvent) => boolean;
@@ -66,6 +66,10 @@ export interface IColorSet {
66
66
  selectionBackgroundOpaque: IColor;
67
67
  selectionInactiveBackgroundTransparent: IColor;
68
68
  selectionInactiveBackgroundOpaque: IColor;
69
+ scrollbarSliderBackground: IColor;
70
+ scrollbarSliderHoverBackground: IColor;
71
+ scrollbarSliderActiveBackground: IColor;
72
+ overviewRulerBorder: IColor;
69
73
  ansi: IColor[];
70
74
  /** Maps original colors to colors that respect minimum contrast ratio. */
71
75
  contrastCache: IColorContrastCache;
@@ -94,7 +98,7 @@ export interface IPartialColorSet {
94
98
 
95
99
  export interface IViewport extends IDisposable {
96
100
  scrollBarWidth: number;
97
- readonly onRequestScrollLines: IEvent<{ amount: number, suppressScrollEvent: boolean }>;
101
+ readonly onRequestScrollLines: Event<{ amount: number, suppressScrollEvent: boolean }>;
98
102
  syncScrollArea(immediate?: boolean, force?: boolean): void;
99
103
  getLinesScrolled(ev: WheelEvent): number;
100
104
  getBufferElements(startLine: number, endLine?: number): { bufferElements: HTMLElement[], cursorElement?: HTMLElement };
@@ -124,12 +128,12 @@ export interface ILinkWithState {
124
128
  }
125
129
 
126
130
  export interface ILinkifier2 extends IDisposable {
127
- onShowLinkUnderline: IEvent<ILinkifierEvent>;
128
- onHideLinkUnderline: IEvent<ILinkifierEvent>;
131
+ onShowLinkUnderline: Event<ILinkifierEvent>;
132
+ onHideLinkUnderline: Event<ILinkifierEvent>;
129
133
  readonly currentLink: ILinkWithState | undefined;
130
134
  }
131
135
 
132
- interface ILink {
136
+ export interface ILink {
133
137
  range: IBufferRange;
134
138
  text: string;
135
139
  decorations?: ILinkDecorations;
@@ -139,17 +143,17 @@ interface ILink {
139
143
  dispose?(): void;
140
144
  }
141
145
 
142
- interface ILinkDecorations {
146
+ export interface ILinkDecorations {
143
147
  pointerCursor: boolean;
144
148
  underline: boolean;
145
149
  }
146
150
 
147
- interface IBufferRange {
151
+ export interface IBufferRange {
148
152
  start: IBufferCellPosition;
149
153
  end: IBufferCellPosition;
150
154
  }
151
155
 
152
- interface IBufferCellPosition {
156
+ export interface IBufferCellPosition {
153
157
  x: number;
154
158
  y: number;
155
159
  }
@@ -172,3 +176,51 @@ export interface IRenderDebouncerWithCallback extends IRenderDebouncer {
172
176
  export interface IBufferElementProvider {
173
177
  provideBufferElements(): DocumentFragment | HTMLElement;
174
178
  }
179
+
180
+ // An IIFE to generate DEFAULT_ANSI_COLORS.
181
+ export const DEFAULT_ANSI_COLORS = Object.freeze((() => {
182
+ const colors = [
183
+ // dark:
184
+ css.toColor('#2e3436'),
185
+ css.toColor('#cc0000'),
186
+ css.toColor('#4e9a06'),
187
+ css.toColor('#c4a000'),
188
+ css.toColor('#3465a4'),
189
+ css.toColor('#75507b'),
190
+ css.toColor('#06989a'),
191
+ css.toColor('#d3d7cf'),
192
+ // bright:
193
+ css.toColor('#555753'),
194
+ css.toColor('#ef2929'),
195
+ css.toColor('#8ae234'),
196
+ css.toColor('#fce94f'),
197
+ css.toColor('#729fcf'),
198
+ css.toColor('#ad7fa8'),
199
+ css.toColor('#34e2e2'),
200
+ css.toColor('#eeeeec')
201
+ ];
202
+
203
+ // Fill in the remaining 240 ANSI colors.
204
+ // Generate colors (16-231)
205
+ const v = [0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff];
206
+ for (let i = 0; i < 216; i++) {
207
+ const r = v[(i / 36) % 6 | 0];
208
+ const g = v[(i / 6) % 6 | 0];
209
+ const b = v[i % 6];
210
+ colors.push({
211
+ css: channels.toCss(r, g, b),
212
+ rgba: channels.toRgba(r, g, b)
213
+ });
214
+ }
215
+
216
+ // Generate greys (232-255)
217
+ for (let i = 0; i < 24; i++) {
218
+ const c = 8 + i * 10;
219
+ colors.push({
220
+ css: channels.toCss(c, c, c),
221
+ rgba: channels.toRgba(c, c, c)
222
+ });
223
+ }
224
+
225
+ return colors;
226
+ })());