@xterm/xterm 5.4.0-beta.1
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.
- package/LICENSE +21 -0
- package/README.md +235 -0
- package/css/xterm.css +209 -0
- package/lib/xterm.js +2 -0
- package/lib/xterm.js.map +1 -0
- package/package.json +101 -0
- package/src/browser/AccessibilityManager.ts +278 -0
- package/src/browser/Clipboard.ts +93 -0
- package/src/browser/ColorContrastCache.ts +34 -0
- package/src/browser/Lifecycle.ts +33 -0
- package/src/browser/Linkifier2.ts +416 -0
- package/src/browser/LocalizableStrings.ts +12 -0
- package/src/browser/OscLinkProvider.ts +128 -0
- package/src/browser/RenderDebouncer.ts +83 -0
- package/src/browser/Terminal.ts +1317 -0
- package/src/browser/TimeBasedDebouncer.ts +86 -0
- package/src/browser/Types.d.ts +181 -0
- package/src/browser/Viewport.ts +401 -0
- package/src/browser/decorations/BufferDecorationRenderer.ts +134 -0
- package/src/browser/decorations/ColorZoneStore.ts +117 -0
- package/src/browser/decorations/OverviewRulerRenderer.ts +218 -0
- package/src/browser/input/CompositionHelper.ts +246 -0
- package/src/browser/input/Mouse.ts +54 -0
- package/src/browser/input/MoveToCell.ts +249 -0
- package/src/browser/public/Terminal.ts +260 -0
- package/src/browser/renderer/dom/DomRenderer.ts +509 -0
- package/src/browser/renderer/dom/DomRendererRowFactory.ts +526 -0
- package/src/browser/renderer/dom/WidthCache.ts +160 -0
- package/src/browser/renderer/shared/CellColorResolver.ts +137 -0
- package/src/browser/renderer/shared/CharAtlasCache.ts +96 -0
- package/src/browser/renderer/shared/CharAtlasUtils.ts +75 -0
- package/src/browser/renderer/shared/Constants.ts +14 -0
- package/src/browser/renderer/shared/CursorBlinkStateManager.ts +146 -0
- package/src/browser/renderer/shared/CustomGlyphs.ts +687 -0
- package/src/browser/renderer/shared/DevicePixelObserver.ts +41 -0
- package/src/browser/renderer/shared/README.md +1 -0
- package/src/browser/renderer/shared/RendererUtils.ts +58 -0
- package/src/browser/renderer/shared/SelectionRenderModel.ts +91 -0
- package/src/browser/renderer/shared/TextureAtlas.ts +1082 -0
- package/src/browser/renderer/shared/Types.d.ts +173 -0
- package/src/browser/selection/SelectionModel.ts +144 -0
- package/src/browser/selection/Types.d.ts +15 -0
- package/src/browser/services/CharSizeService.ts +102 -0
- package/src/browser/services/CharacterJoinerService.ts +339 -0
- package/src/browser/services/CoreBrowserService.ts +137 -0
- package/src/browser/services/MouseService.ts +46 -0
- package/src/browser/services/RenderService.ts +279 -0
- package/src/browser/services/SelectionService.ts +1031 -0
- package/src/browser/services/Services.ts +147 -0
- package/src/browser/services/ThemeService.ts +237 -0
- package/src/common/CircularList.ts +241 -0
- package/src/common/Clone.ts +23 -0
- package/src/common/Color.ts +357 -0
- package/src/common/CoreTerminal.ts +284 -0
- package/src/common/EventEmitter.ts +78 -0
- package/src/common/InputHandler.ts +3461 -0
- package/src/common/Lifecycle.ts +108 -0
- package/src/common/MultiKeyMap.ts +42 -0
- package/src/common/Platform.ts +44 -0
- package/src/common/SortedList.ts +118 -0
- package/src/common/TaskQueue.ts +166 -0
- package/src/common/TypedArrayUtils.ts +17 -0
- package/src/common/Types.d.ts +553 -0
- package/src/common/WindowsMode.ts +27 -0
- package/src/common/buffer/AttributeData.ts +196 -0
- package/src/common/buffer/Buffer.ts +654 -0
- package/src/common/buffer/BufferLine.ts +524 -0
- package/src/common/buffer/BufferRange.ts +13 -0
- package/src/common/buffer/BufferReflow.ts +223 -0
- package/src/common/buffer/BufferSet.ts +134 -0
- package/src/common/buffer/CellData.ts +94 -0
- package/src/common/buffer/Constants.ts +149 -0
- package/src/common/buffer/Marker.ts +43 -0
- package/src/common/buffer/Types.d.ts +52 -0
- package/src/common/data/Charsets.ts +256 -0
- package/src/common/data/EscapeSequences.ts +153 -0
- package/src/common/input/Keyboard.ts +398 -0
- package/src/common/input/TextDecoder.ts +346 -0
- package/src/common/input/UnicodeV6.ts +145 -0
- package/src/common/input/WriteBuffer.ts +246 -0
- package/src/common/input/XParseColor.ts +80 -0
- package/src/common/parser/Constants.ts +58 -0
- package/src/common/parser/DcsParser.ts +192 -0
- package/src/common/parser/EscapeSequenceParser.ts +792 -0
- package/src/common/parser/OscParser.ts +238 -0
- package/src/common/parser/Params.ts +229 -0
- package/src/common/parser/Types.d.ts +275 -0
- package/src/common/public/AddonManager.ts +53 -0
- package/src/common/public/BufferApiView.ts +35 -0
- package/src/common/public/BufferLineApiView.ts +29 -0
- package/src/common/public/BufferNamespaceApi.ts +36 -0
- package/src/common/public/ParserApi.ts +37 -0
- package/src/common/public/UnicodeApi.ts +27 -0
- package/src/common/services/BufferService.ts +151 -0
- package/src/common/services/CharsetService.ts +34 -0
- package/src/common/services/CoreMouseService.ts +318 -0
- package/src/common/services/CoreService.ts +87 -0
- package/src/common/services/DecorationService.ts +140 -0
- package/src/common/services/InstantiationService.ts +85 -0
- package/src/common/services/LogService.ts +124 -0
- package/src/common/services/OptionsService.ts +202 -0
- package/src/common/services/OscLinkService.ts +115 -0
- package/src/common/services/ServiceRegistry.ts +49 -0
- package/src/common/services/Services.ts +373 -0
- package/src/common/services/UnicodeService.ts +111 -0
- package/src/headless/Terminal.ts +136 -0
- package/src/headless/public/Terminal.ts +195 -0
- package/typings/xterm.d.ts +1857 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2022 The xterm.js authors. All rights reserved.
|
|
3
|
+
* @license MIT
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { toDisposable } from 'common/Lifecycle';
|
|
7
|
+
import { IDisposable } from 'common/Types';
|
|
8
|
+
|
|
9
|
+
export function observeDevicePixelDimensions(element: HTMLElement, parentWindow: Window & typeof globalThis, callback: (deviceWidth: number, deviceHeight: number) => void): IDisposable {
|
|
10
|
+
// Observe any resizes to the element and extract the actual pixel size of the element if the
|
|
11
|
+
// devicePixelContentBoxSize API is supported. This allows correcting rounding errors when
|
|
12
|
+
// converting between CSS pixels and device pixels which causes blurry rendering when device
|
|
13
|
+
// pixel ratio is not a round number.
|
|
14
|
+
let observer: ResizeObserver | undefined = new parentWindow.ResizeObserver((entries) => {
|
|
15
|
+
const entry = entries.find((entry) => entry.target === element);
|
|
16
|
+
if (!entry) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// Disconnect if devicePixelContentBoxSize isn't supported by the browser
|
|
21
|
+
if (!('devicePixelContentBoxSize' in entry)) {
|
|
22
|
+
observer?.disconnect();
|
|
23
|
+
observer = undefined;
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Fire the callback, ignore events where the dimensions are 0x0 as the canvas is likely hidden
|
|
28
|
+
const width = entry.devicePixelContentBoxSize[0].inlineSize;
|
|
29
|
+
const height = entry.devicePixelContentBoxSize[0].blockSize;
|
|
30
|
+
if (width > 0 && height > 0) {
|
|
31
|
+
callback(width, height);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
try {
|
|
35
|
+
observer.observe(element, { box: ['device-pixel-content-box'] } as any);
|
|
36
|
+
} catch {
|
|
37
|
+
observer.disconnect();
|
|
38
|
+
observer = undefined;
|
|
39
|
+
}
|
|
40
|
+
return toDisposable(() => observer?.disconnect());
|
|
41
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
This folder contains files that are shared between the renderer addons, but not necessarily bundled into the `xterm` module.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2019 The xterm.js authors. All rights reserved.
|
|
3
|
+
* @license MIT
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { IDimensions, IRenderDimensions } from 'browser/renderer/shared/Types';
|
|
7
|
+
|
|
8
|
+
export function throwIfFalsy<T>(value: T | undefined | null): T {
|
|
9
|
+
if (!value) {
|
|
10
|
+
throw new Error('value must not be falsy');
|
|
11
|
+
}
|
|
12
|
+
return value;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function isPowerlineGlyph(codepoint: number): boolean {
|
|
16
|
+
// Only return true for Powerline symbols which require
|
|
17
|
+
// different padding and should be excluded from minimum contrast
|
|
18
|
+
// ratio standards
|
|
19
|
+
return 0xE0A4 <= codepoint && codepoint <= 0xE0D6;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function isRestrictedPowerlineGlyph(codepoint: number): boolean {
|
|
23
|
+
return 0xE0B0 <= codepoint && codepoint <= 0xE0B7;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function isBoxOrBlockGlyph(codepoint: number): boolean {
|
|
27
|
+
return 0x2500 <= codepoint && codepoint <= 0x259F;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function excludeFromContrastRatioDemands(codepoint: number): boolean {
|
|
31
|
+
return isPowerlineGlyph(codepoint) || isBoxOrBlockGlyph(codepoint);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function createRenderDimensions(): IRenderDimensions {
|
|
35
|
+
return {
|
|
36
|
+
css: {
|
|
37
|
+
canvas: createDimension(),
|
|
38
|
+
cell: createDimension()
|
|
39
|
+
},
|
|
40
|
+
device: {
|
|
41
|
+
canvas: createDimension(),
|
|
42
|
+
cell: createDimension(),
|
|
43
|
+
char: {
|
|
44
|
+
width: 0,
|
|
45
|
+
height: 0,
|
|
46
|
+
left: 0,
|
|
47
|
+
top: 0
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function createDimension(): IDimensions {
|
|
54
|
+
return {
|
|
55
|
+
width: 0,
|
|
56
|
+
height: 0
|
|
57
|
+
};
|
|
58
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2022 The xterm.js authors. All rights reserved.
|
|
3
|
+
* @license MIT
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { ISelectionRenderModel } from 'browser/renderer/shared/Types';
|
|
7
|
+
import { Terminal } from '@xterm/xterm';
|
|
8
|
+
|
|
9
|
+
class SelectionRenderModel implements ISelectionRenderModel {
|
|
10
|
+
public hasSelection!: boolean;
|
|
11
|
+
public columnSelectMode!: boolean;
|
|
12
|
+
public viewportStartRow!: number;
|
|
13
|
+
public viewportEndRow!: number;
|
|
14
|
+
public viewportCappedStartRow!: number;
|
|
15
|
+
public viewportCappedEndRow!: number;
|
|
16
|
+
public startCol!: number;
|
|
17
|
+
public endCol!: number;
|
|
18
|
+
public selectionStart: [number, number] | undefined;
|
|
19
|
+
public selectionEnd: [number, number] | undefined;
|
|
20
|
+
|
|
21
|
+
constructor() {
|
|
22
|
+
this.clear();
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
public clear(): void {
|
|
26
|
+
this.hasSelection = false;
|
|
27
|
+
this.columnSelectMode = false;
|
|
28
|
+
this.viewportStartRow = 0;
|
|
29
|
+
this.viewportEndRow = 0;
|
|
30
|
+
this.viewportCappedStartRow = 0;
|
|
31
|
+
this.viewportCappedEndRow = 0;
|
|
32
|
+
this.startCol = 0;
|
|
33
|
+
this.endCol = 0;
|
|
34
|
+
this.selectionStart = undefined;
|
|
35
|
+
this.selectionEnd = undefined;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
public update(terminal: Terminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {
|
|
39
|
+
this.selectionStart = start;
|
|
40
|
+
this.selectionEnd = end;
|
|
41
|
+
// Selection does not exist
|
|
42
|
+
if (!start || !end || (start[0] === end[0] && start[1] === end[1])) {
|
|
43
|
+
this.clear();
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Translate from buffer position to viewport position
|
|
48
|
+
const viewportStartRow = start[1] - terminal.buffer.active.viewportY;
|
|
49
|
+
const viewportEndRow = end[1] - terminal.buffer.active.viewportY;
|
|
50
|
+
const viewportCappedStartRow = Math.max(viewportStartRow, 0);
|
|
51
|
+
const viewportCappedEndRow = Math.min(viewportEndRow, terminal.rows - 1);
|
|
52
|
+
|
|
53
|
+
// No need to draw the selection
|
|
54
|
+
if (viewportCappedStartRow >= terminal.rows || viewportCappedEndRow < 0) {
|
|
55
|
+
this.clear();
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
this.hasSelection = true;
|
|
60
|
+
this.columnSelectMode = columnSelectMode;
|
|
61
|
+
this.viewportStartRow = viewportStartRow;
|
|
62
|
+
this.viewportEndRow = viewportEndRow;
|
|
63
|
+
this.viewportCappedStartRow = viewportCappedStartRow;
|
|
64
|
+
this.viewportCappedEndRow = viewportCappedEndRow;
|
|
65
|
+
this.startCol = start[0];
|
|
66
|
+
this.endCol = end[0];
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
public isCellSelected(terminal: Terminal, x: number, y: number): boolean {
|
|
70
|
+
if (!this.hasSelection) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
y -= terminal.buffer.active.viewportY;
|
|
74
|
+
if (this.columnSelectMode) {
|
|
75
|
+
if (this.startCol <= this.endCol) {
|
|
76
|
+
return x >= this.startCol && y >= this.viewportCappedStartRow &&
|
|
77
|
+
x < this.endCol && y <= this.viewportCappedEndRow;
|
|
78
|
+
}
|
|
79
|
+
return x < this.startCol && y >= this.viewportCappedStartRow &&
|
|
80
|
+
x >= this.endCol && y <= this.viewportCappedEndRow;
|
|
81
|
+
}
|
|
82
|
+
return (y > this.viewportStartRow && y < this.viewportEndRow) ||
|
|
83
|
+
(this.viewportStartRow === this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol && x < this.endCol) ||
|
|
84
|
+
(this.viewportStartRow < this.viewportEndRow && y === this.viewportEndRow && x < this.endCol) ||
|
|
85
|
+
(this.viewportStartRow < this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export function createSelectionRenderModel(): ISelectionRenderModel {
|
|
90
|
+
return new SelectionRenderModel();
|
|
91
|
+
}
|