@xterm/xterm 6.1.0-beta.21 → 6.1.0-beta.210
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/README.md +61 -38
- package/css/xterm.css +29 -22
- package/lib/xterm.js +1 -1
- package/lib/xterm.js.map +1 -1
- package/lib/xterm.mjs +8 -34
- package/lib/xterm.mjs.map +4 -4
- package/package.json +24 -13
- package/src/browser/AccessibilityManager.ts +6 -3
- package/src/browser/Clipboard.ts +6 -3
- package/src/browser/CoreBrowserTerminal.ts +147 -318
- package/src/browser/Dom.ts +178 -0
- package/src/browser/Linkifier.ts +11 -11
- package/src/browser/OscLinkProvider.ts +3 -1
- package/src/browser/RenderDebouncer.ts +2 -2
- package/src/browser/TimeBasedDebouncer.ts +2 -2
- package/src/browser/Types.ts +12 -11
- package/src/browser/Viewport.ts +55 -20
- package/src/browser/decorations/BufferDecorationRenderer.ts +1 -1
- package/src/browser/decorations/OverviewRulerRenderer.ts +33 -17
- package/src/browser/input/CompositionHelper.ts +44 -8
- package/src/browser/public/Terminal.ts +25 -28
- package/src/browser/renderer/dom/DomRenderer.ts +205 -41
- package/src/browser/renderer/dom/DomRendererRowFactory.ts +19 -13
- package/src/browser/renderer/dom/WidthCache.ts +54 -52
- package/src/browser/renderer/shared/Constants.ts +7 -0
- package/src/browser/renderer/shared/TextBlinkStateManager.ts +97 -0
- package/src/browser/renderer/shared/Types.ts +8 -2
- package/src/browser/scrollable/abstractScrollbar.ts +300 -0
- package/src/browser/scrollable/fastDomNode.ts +126 -0
- package/src/browser/scrollable/globalPointerMoveMonitor.ts +90 -0
- package/src/browser/scrollable/horizontalScrollbar.ts +85 -0
- package/src/browser/scrollable/mouseEvent.ts +292 -0
- package/src/browser/scrollable/scrollable.ts +486 -0
- package/src/browser/scrollable/scrollableElement.ts +579 -0
- package/src/browser/scrollable/scrollableElementOptions.ts +161 -0
- package/src/browser/scrollable/scrollbarArrow.ts +110 -0
- package/src/browser/scrollable/scrollbarState.ts +246 -0
- package/src/browser/scrollable/scrollbarVisibilityController.ts +113 -0
- package/src/browser/scrollable/touch.ts +485 -0
- package/src/browser/scrollable/verticalScrollbar.ts +143 -0
- package/src/browser/scrollable/widget.ts +23 -0
- package/src/browser/services/CharSizeService.ts +2 -2
- package/src/browser/services/CoreBrowserService.ts +7 -5
- package/src/browser/services/KeyboardService.ts +67 -0
- package/src/browser/services/LinkProviderService.ts +1 -1
- package/src/browser/services/MouseCoordsService.ts +47 -0
- package/src/browser/services/MouseService.ts +518 -25
- package/src/browser/services/RenderService.ts +22 -15
- package/src/browser/services/SelectionService.ts +16 -8
- package/src/browser/services/Services.ts +40 -17
- package/src/browser/services/ThemeService.ts +2 -2
- package/src/common/Async.ts +105 -0
- package/src/common/CircularList.ts +2 -2
- package/src/common/Color.ts +8 -0
- package/src/common/CoreTerminal.ts +28 -18
- package/src/common/Event.ts +118 -0
- package/src/common/InputHandler.ts +263 -43
- package/src/common/Lifecycle.ts +113 -0
- package/src/common/Platform.ts +13 -3
- package/src/common/SortedList.ts +7 -3
- package/src/common/TaskQueue.ts +14 -5
- package/src/common/Types.ts +35 -15
- package/src/common/Version.ts +9 -0
- package/src/common/buffer/Buffer.ts +20 -14
- package/src/common/buffer/BufferLine.ts +4 -5
- package/src/common/buffer/BufferSet.ts +7 -6
- package/src/common/buffer/CellData.ts +57 -0
- package/src/common/buffer/Marker.ts +2 -2
- package/src/common/buffer/Types.ts +6 -2
- package/src/common/data/EscapeSequences.ts +71 -70
- package/src/common/input/Keyboard.ts +14 -7
- package/src/common/input/KittyKeyboard.ts +519 -0
- package/src/common/input/Win32InputMode.ts +297 -0
- package/src/common/input/WriteBuffer.ts +34 -2
- package/src/common/input/XParseColor.ts +2 -2
- package/src/common/parser/ApcParser.ts +245 -0
- package/src/common/parser/Constants.ts +22 -4
- package/src/common/parser/DcsParser.ts +5 -5
- package/src/common/parser/EscapeSequenceParser.ts +167 -57
- package/src/common/parser/OscParser.ts +5 -5
- package/src/common/parser/Params.ts +13 -0
- package/src/common/parser/Types.ts +36 -2
- package/src/common/public/BufferLineApiView.ts +2 -2
- package/src/common/public/BufferNamespaceApi.ts +2 -2
- package/src/common/public/ParserApi.ts +3 -0
- package/src/common/services/BufferService.ts +8 -5
- package/src/common/services/CharsetService.ts +4 -0
- package/src/common/services/CoreService.ts +18 -4
- package/src/common/services/DecorationService.ts +24 -8
- package/src/common/services/LogService.ts +1 -31
- package/src/common/services/{CoreMouseService.ts → MouseStateService.ts} +21 -132
- package/src/common/services/OptionsService.ts +13 -4
- package/src/common/services/Services.ts +47 -40
- package/src/common/services/UnicodeService.ts +1 -1
- package/typings/xterm.d.ts +316 -32
- package/src/common/TypedArrayUtils.ts +0 -17
- package/src/vs/base/browser/browser.ts +0 -141
- package/src/vs/base/browser/canIUse.ts +0 -49
- package/src/vs/base/browser/dom.ts +0 -2369
- package/src/vs/base/browser/fastDomNode.ts +0 -316
- package/src/vs/base/browser/globalPointerMoveMonitor.ts +0 -112
- package/src/vs/base/browser/iframe.ts +0 -135
- package/src/vs/base/browser/keyboardEvent.ts +0 -213
- package/src/vs/base/browser/mouseEvent.ts +0 -229
- package/src/vs/base/browser/touch.ts +0 -372
- package/src/vs/base/browser/ui/scrollbar/abstractScrollbar.ts +0 -303
- package/src/vs/base/browser/ui/scrollbar/horizontalScrollbar.ts +0 -114
- package/src/vs/base/browser/ui/scrollbar/scrollableElement.ts +0 -720
- package/src/vs/base/browser/ui/scrollbar/scrollableElementOptions.ts +0 -165
- package/src/vs/base/browser/ui/scrollbar/scrollbarArrow.ts +0 -114
- package/src/vs/base/browser/ui/scrollbar/scrollbarState.ts +0 -243
- package/src/vs/base/browser/ui/scrollbar/scrollbarVisibilityController.ts +0 -118
- package/src/vs/base/browser/ui/scrollbar/verticalScrollbar.ts +0 -116
- package/src/vs/base/browser/ui/widget.ts +0 -57
- package/src/vs/base/browser/window.ts +0 -14
- package/src/vs/base/common/arrays.ts +0 -887
- package/src/vs/base/common/arraysFind.ts +0 -202
- package/src/vs/base/common/assert.ts +0 -71
- package/src/vs/base/common/async.ts +0 -1992
- package/src/vs/base/common/cancellation.ts +0 -148
- package/src/vs/base/common/charCode.ts +0 -450
- package/src/vs/base/common/collections.ts +0 -140
- package/src/vs/base/common/decorators.ts +0 -130
- package/src/vs/base/common/equals.ts +0 -146
- package/src/vs/base/common/errors.ts +0 -303
- package/src/vs/base/common/event.ts +0 -1778
- package/src/vs/base/common/functional.ts +0 -32
- package/src/vs/base/common/hash.ts +0 -316
- package/src/vs/base/common/iterator.ts +0 -159
- package/src/vs/base/common/keyCodes.ts +0 -526
- package/src/vs/base/common/keybindings.ts +0 -284
- package/src/vs/base/common/lazy.ts +0 -47
- package/src/vs/base/common/lifecycle.ts +0 -801
- package/src/vs/base/common/linkedList.ts +0 -142
- package/src/vs/base/common/map.ts +0 -202
- package/src/vs/base/common/numbers.ts +0 -98
- package/src/vs/base/common/observable.ts +0 -76
- package/src/vs/base/common/observableInternal/api.ts +0 -31
- package/src/vs/base/common/observableInternal/autorun.ts +0 -281
- package/src/vs/base/common/observableInternal/base.ts +0 -489
- package/src/vs/base/common/observableInternal/debugName.ts +0 -145
- package/src/vs/base/common/observableInternal/derived.ts +0 -428
- package/src/vs/base/common/observableInternal/lazyObservableValue.ts +0 -146
- package/src/vs/base/common/observableInternal/logging.ts +0 -328
- package/src/vs/base/common/observableInternal/promise.ts +0 -209
- package/src/vs/base/common/observableInternal/utils.ts +0 -610
- package/src/vs/base/common/platform.ts +0 -281
- package/src/vs/base/common/scrollable.ts +0 -522
- package/src/vs/base/common/sequence.ts +0 -34
- package/src/vs/base/common/stopwatch.ts +0 -43
- package/src/vs/base/common/strings.ts +0 -557
- package/src/vs/base/common/symbols.ts +0 -9
- package/src/vs/base/common/uint.ts +0 -59
- package/src/vs/patches/nls.ts +0 -90
- package/src/vs/typings/base-common.d.ts +0 -20
- package/src/vs/typings/require.d.ts +0 -42
- package/src/vs/typings/vscode-globals-nls.d.ts +0 -36
- package/src/vs/typings/vscode-globals-product.d.ts +0 -33
|
@@ -3,13 +3,14 @@
|
|
|
3
3
|
* @license MIT
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { IParsingState, IDcsHandler, IEscapeSequenceParser, IParams, IOscHandler, IHandlerCollection, CsiHandlerType, OscFallbackHandlerType, IOscParser, EscHandlerType, IDcsParser, DcsFallbackHandlerType, IFunctionIdentifier, ExecuteFallbackHandlerType, CsiFallbackHandlerType, EscFallbackHandlerType, PrintHandlerType, PrintFallbackHandlerType, ExecuteHandlerType, IParserStackState, ParserStackType, ResumableHandlersType } from 'common/parser/Types';
|
|
6
|
+
import { IParsingState, IDcsHandler, IEscapeSequenceParser, IParams, IOscHandler, IHandlerCollection, CsiHandlerType, OscFallbackHandlerType, IOscParser, EscHandlerType, IDcsParser, DcsFallbackHandlerType, IFunctionIdentifier, ExecuteFallbackHandlerType, CsiFallbackHandlerType, EscFallbackHandlerType, PrintHandlerType, PrintFallbackHandlerType, ExecuteHandlerType, IParserStackState, ParserStackType, ResumableHandlersType, IApcHandler, IApcParser, ApcFallbackHandlerType } from 'common/parser/Types';
|
|
7
7
|
import { ParserState, ParserAction } from 'common/parser/Constants';
|
|
8
|
-
import { Disposable, toDisposable } from '
|
|
8
|
+
import { Disposable, toDisposable } from 'common/Lifecycle';
|
|
9
9
|
import { IDisposable } from 'common/Types';
|
|
10
10
|
import { Params } from 'common/parser/Params';
|
|
11
11
|
import { OscParser } from 'common/parser/OscParser';
|
|
12
12
|
import { DcsParser } from 'common/parser/DcsParser';
|
|
13
|
+
import { ApcParser } from 'common/parser/ApcParser';
|
|
13
14
|
|
|
14
15
|
/**
|
|
15
16
|
* Table values are generated like this:
|
|
@@ -17,8 +18,8 @@ import { DcsParser } from 'common/parser/DcsParser';
|
|
|
17
18
|
* value: action << TableValue.TRANSITION_ACTION_SHIFT | nextState
|
|
18
19
|
*/
|
|
19
20
|
const enum TableAccess {
|
|
20
|
-
TRANSITION_ACTION_SHIFT =
|
|
21
|
-
TRANSITION_STATE_MASK =
|
|
21
|
+
TRANSITION_ACTION_SHIFT = 8,
|
|
22
|
+
TRANSITION_STATE_MASK = 255,
|
|
22
23
|
INDEX_STATE_SHIFT = 8
|
|
23
24
|
}
|
|
24
25
|
|
|
@@ -26,10 +27,10 @@ const enum TableAccess {
|
|
|
26
27
|
* Transition table for EscapeSequenceParser.
|
|
27
28
|
*/
|
|
28
29
|
export class TransitionTable {
|
|
29
|
-
public table:
|
|
30
|
+
public table: Uint16Array;
|
|
30
31
|
|
|
31
32
|
constructor(length: number) {
|
|
32
|
-
this.table = new
|
|
33
|
+
this.table = new Uint16Array(length);
|
|
33
34
|
}
|
|
34
35
|
|
|
35
36
|
/**
|
|
@@ -89,22 +90,22 @@ export const VT500_TRANSITION_TABLE = (function (): TransitionTable {
|
|
|
89
90
|
EXECUTABLES.push(0x19);
|
|
90
91
|
EXECUTABLES.push.apply(EXECUTABLES, r(0x1c, 0x20));
|
|
91
92
|
|
|
92
|
-
const states: number[] = r(ParserState.GROUND, ParserState.
|
|
93
|
-
let state: any;
|
|
93
|
+
const states: number[] = r(ParserState.GROUND, ParserState.STATE_LENGTH);
|
|
94
94
|
|
|
95
95
|
// set default transition
|
|
96
96
|
table.setDefault(ParserAction.ERROR, ParserState.GROUND);
|
|
97
97
|
// printables
|
|
98
98
|
table.addMany(PRINTABLES, ParserState.GROUND, ParserAction.PRINT, ParserState.GROUND);
|
|
99
99
|
// global anywhere rules
|
|
100
|
-
for (state
|
|
100
|
+
for (const state of states) {
|
|
101
101
|
table.addMany([0x18, 0x1a, 0x99, 0x9a], state, ParserAction.EXECUTE, ParserState.GROUND);
|
|
102
102
|
table.addMany(r(0x80, 0x90), state, ParserAction.EXECUTE, ParserState.GROUND);
|
|
103
103
|
table.addMany(r(0x90, 0x98), state, ParserAction.EXECUTE, ParserState.GROUND);
|
|
104
104
|
table.add(0x9c, state, ParserAction.IGNORE, ParserState.GROUND); // ST as terminator
|
|
105
105
|
table.add(0x1b, state, ParserAction.CLEAR, ParserState.ESCAPE); // ESC
|
|
106
106
|
table.add(0x9d, state, ParserAction.OSC_START, ParserState.OSC_STRING); // OSC
|
|
107
|
-
table.addMany([0x98, 0x9e
|
|
107
|
+
table.addMany([0x98, 0x9e], state, ParserAction.IGNORE, ParserState.SOS_PM_STRING); // SOS, PM
|
|
108
|
+
table.add(0x9f, state, ParserAction.APC_START, ParserState.APC_STRING); // APC
|
|
108
109
|
table.add(0x9b, state, ParserAction.CLEAR, ParserState.CSI_ENTRY); // CSI
|
|
109
110
|
table.add(0x90, state, ParserAction.CLEAR, ParserState.DCS_ENTRY); // DCS
|
|
110
111
|
}
|
|
@@ -128,12 +129,18 @@ export const VT500_TRANSITION_TABLE = (function (): TransitionTable {
|
|
|
128
129
|
table.add(0x7f, ParserState.OSC_STRING, ParserAction.OSC_PUT, ParserState.OSC_STRING);
|
|
129
130
|
table.addMany([0x9c, 0x1b, 0x18, 0x1a, 0x07], ParserState.OSC_STRING, ParserAction.OSC_END, ParserState.GROUND);
|
|
130
131
|
table.addMany(r(0x1c, 0x20), ParserState.OSC_STRING, ParserAction.IGNORE, ParserState.OSC_STRING);
|
|
131
|
-
// sos/pm
|
|
132
|
-
table.addMany([0x58, 0x5e
|
|
133
|
-
table.addMany(PRINTABLES, ParserState.
|
|
134
|
-
table.addMany(EXECUTABLES, ParserState.
|
|
135
|
-
table.add(0x9c, ParserState.
|
|
136
|
-
table.add(0x7f, ParserState.
|
|
132
|
+
// sos/pm
|
|
133
|
+
table.addMany([0x58, 0x5e], ParserState.ESCAPE, ParserAction.IGNORE, ParserState.SOS_PM_STRING);
|
|
134
|
+
table.addMany(PRINTABLES, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.SOS_PM_STRING);
|
|
135
|
+
table.addMany(EXECUTABLES, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.SOS_PM_STRING);
|
|
136
|
+
table.add(0x9c, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.GROUND);
|
|
137
|
+
table.add(0x7f, ParserState.SOS_PM_STRING, ParserAction.IGNORE, ParserState.SOS_PM_STRING);
|
|
138
|
+
// apc
|
|
139
|
+
table.add(0x5f, ParserState.ESCAPE, ParserAction.APC_START, ParserState.APC_STRING);
|
|
140
|
+
table.addMany(PRINTABLES, ParserState.APC_STRING, ParserAction.APC_PUT, ParserState.APC_STRING);
|
|
141
|
+
table.addMany(EXECUTABLES, ParserState.APC_STRING, ParserAction.IGNORE, ParserState.APC_STRING);
|
|
142
|
+
table.add(0x7f, ParserState.APC_STRING, ParserAction.IGNORE, ParserState.APC_STRING);
|
|
143
|
+
table.addMany([0x1b, 0x9c, 0x18, 0x1a], ParserState.APC_STRING, ParserAction.APC_END, ParserState.GROUND);
|
|
137
144
|
// csi entries
|
|
138
145
|
table.add(0x5b, ParserState.ESCAPE, ParserAction.CLEAR, ParserState.CSI_ENTRY);
|
|
139
146
|
table.addMany(r(0x40, 0x7f), ParserState.CSI_ENTRY, ParserAction.CSI_DISPATCH, ParserState.GROUND);
|
|
@@ -193,6 +200,7 @@ export const VT500_TRANSITION_TABLE = (function (): TransitionTable {
|
|
|
193
200
|
table.add(NON_ASCII_PRINTABLE, ParserState.CSI_IGNORE, ParserAction.IGNORE, ParserState.CSI_IGNORE);
|
|
194
201
|
table.add(NON_ASCII_PRINTABLE, ParserState.DCS_IGNORE, ParserAction.IGNORE, ParserState.DCS_IGNORE);
|
|
195
202
|
table.add(NON_ASCII_PRINTABLE, ParserState.DCS_PASSTHROUGH, ParserAction.DCS_PUT, ParserState.DCS_PASSTHROUGH);
|
|
203
|
+
table.add(NON_ASCII_PRINTABLE, ParserState.APC_STRING, ParserAction.APC_PUT, ParserState.APC_STRING);
|
|
196
204
|
return table;
|
|
197
205
|
})();
|
|
198
206
|
|
|
@@ -239,10 +247,13 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
|
|
|
239
247
|
// handler lookup containers
|
|
240
248
|
protected _printHandler: PrintHandlerType;
|
|
241
249
|
protected _executeHandlers: { [flag: number]: ExecuteHandlerType };
|
|
250
|
+
// fast path for EXE bytes < 0x18
|
|
251
|
+
protected _executeHandlersArr: (ExecuteHandlerType | undefined)[];
|
|
242
252
|
protected _csiHandlers: IHandlerCollection<CsiHandlerType>;
|
|
243
253
|
protected _escHandlers: IHandlerCollection<EscHandlerType>;
|
|
244
254
|
protected readonly _oscParser: IOscParser;
|
|
245
255
|
protected readonly _dcsParser: IDcsParser;
|
|
256
|
+
protected readonly _apcParser: IApcParser;
|
|
246
257
|
protected _errorHandler: (state: IParsingState) => IParsingState;
|
|
247
258
|
|
|
248
259
|
// fallback handlers
|
|
@@ -281,15 +292,18 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
|
|
|
281
292
|
this._errorHandlerFb = (state: IParsingState): IParsingState => state;
|
|
282
293
|
this._printHandler = this._printHandlerFb;
|
|
283
294
|
this._executeHandlers = Object.create(null);
|
|
295
|
+
this._executeHandlersArr = new Array(0x18).fill(undefined);
|
|
284
296
|
this._csiHandlers = Object.create(null);
|
|
285
297
|
this._escHandlers = Object.create(null);
|
|
286
298
|
this._register(toDisposable(() => {
|
|
287
299
|
this._csiHandlers = Object.create(null);
|
|
288
300
|
this._executeHandlers = Object.create(null);
|
|
301
|
+
this._executeHandlersArr = new Array(0x18).fill(undefined);
|
|
289
302
|
this._escHandlers = Object.create(null);
|
|
290
303
|
}));
|
|
291
304
|
this._oscParser = this._register(new OscParser());
|
|
292
305
|
this._dcsParser = this._register(new DcsParser());
|
|
306
|
+
this._apcParser = this._register(new ApcParser());
|
|
293
307
|
this._errorHandler = this._errorHandlerFb;
|
|
294
308
|
|
|
295
309
|
// swallow 7bit ST (ESC+\)
|
|
@@ -351,9 +365,7 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
|
|
|
351
365
|
|
|
352
366
|
public registerEscHandler(id: IFunctionIdentifier, handler: EscHandlerType): IDisposable {
|
|
353
367
|
const ident = this._identifier(id, [0x30, 0x7e]);
|
|
354
|
-
|
|
355
|
-
this._escHandlers[ident] = [];
|
|
356
|
-
}
|
|
368
|
+
this._escHandlers[ident] ??= [];
|
|
357
369
|
const handlerList = this._escHandlers[ident];
|
|
358
370
|
handlerList.push(handler);
|
|
359
371
|
return {
|
|
@@ -373,10 +385,14 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
|
|
|
373
385
|
}
|
|
374
386
|
|
|
375
387
|
public setExecuteHandler(flag: string, handler: ExecuteHandlerType): void {
|
|
376
|
-
|
|
388
|
+
const code = flag.charCodeAt(0);
|
|
389
|
+
this._executeHandlers[code] = handler;
|
|
390
|
+
if (code < 0x18) this._executeHandlersArr[code] = handler;
|
|
377
391
|
}
|
|
378
392
|
public clearExecuteHandler(flag: string): void {
|
|
379
|
-
|
|
393
|
+
const code = flag.charCodeAt(0);
|
|
394
|
+
if (this._executeHandlers[code]) delete this._executeHandlers[code];
|
|
395
|
+
if (code < 0x18) this._executeHandlersArr[code] = undefined;
|
|
380
396
|
}
|
|
381
397
|
public setExecuteHandlerFallback(handler: ExecuteFallbackHandlerType): void {
|
|
382
398
|
this._executeHandlerFb = handler;
|
|
@@ -384,9 +400,7 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
|
|
|
384
400
|
|
|
385
401
|
public registerCsiHandler(id: IFunctionIdentifier, handler: CsiHandlerType): IDisposable {
|
|
386
402
|
const ident = this._identifier(id);
|
|
387
|
-
|
|
388
|
-
this._csiHandlers[ident] = [];
|
|
389
|
-
}
|
|
403
|
+
this._csiHandlers[ident] ??= [];
|
|
390
404
|
const handlerList = this._csiHandlers[ident];
|
|
391
405
|
handlerList.push(handler);
|
|
392
406
|
return {
|
|
@@ -425,6 +439,16 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
|
|
|
425
439
|
this._oscParser.setHandlerFallback(handler);
|
|
426
440
|
}
|
|
427
441
|
|
|
442
|
+
public registerApcHandler(ident: number, handler: IApcHandler): IDisposable {
|
|
443
|
+
return this._apcParser.registerHandler(ident, handler);
|
|
444
|
+
}
|
|
445
|
+
public clearApcHandler(ident: number): void {
|
|
446
|
+
this._apcParser.clearHandler(ident);
|
|
447
|
+
}
|
|
448
|
+
public setApcHandlerFallback(handler: ApcFallbackHandlerType): void {
|
|
449
|
+
this._apcParser.setHandlerFallback(handler);
|
|
450
|
+
}
|
|
451
|
+
|
|
428
452
|
public setErrorHandler(callback: (state: IParsingState) => IParsingState): void {
|
|
429
453
|
this._errorHandler = callback;
|
|
430
454
|
}
|
|
@@ -445,8 +469,8 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
|
|
|
445
469
|
this.currentState = this.initialState;
|
|
446
470
|
this._oscParser.reset();
|
|
447
471
|
this._dcsParser.reset();
|
|
448
|
-
this.
|
|
449
|
-
this._params.
|
|
472
|
+
this._apcParser.reset();
|
|
473
|
+
this._params.resetZdm();
|
|
450
474
|
this._collect = 0;
|
|
451
475
|
this.precedingJoinState = 0;
|
|
452
476
|
// abort pending continuation from async handler
|
|
@@ -489,6 +513,10 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
|
|
|
489
513
|
* - OSC_STRING:OSC_PUT
|
|
490
514
|
* - DCS_PASSTHROUGH:DCS_PUT
|
|
491
515
|
*
|
|
516
|
+
* Additionally the following fast paths exist before the table lookup:
|
|
517
|
+
* - EXE bytes < 0x18 in non-payload states (avoids table lookup entirely)
|
|
518
|
+
* - 7-bit CSI sequences without intermediates (ESC [ params final)
|
|
519
|
+
*
|
|
492
520
|
* Note on asynchronous handler support:
|
|
493
521
|
* Any handler returning a promise will be treated as asynchronous.
|
|
494
522
|
* To keep the in-band blocking working for async handlers, `parse` pauses execution,
|
|
@@ -591,8 +619,7 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
|
|
|
591
619
|
return handlerResult;
|
|
592
620
|
}
|
|
593
621
|
if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;
|
|
594
|
-
this._params.
|
|
595
|
-
this._params.addParam(0); // ZDM
|
|
622
|
+
this._params.resetZdm();
|
|
596
623
|
this._collect = 0;
|
|
597
624
|
break;
|
|
598
625
|
case ParserStackType.OSC:
|
|
@@ -602,8 +629,17 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
|
|
|
602
629
|
return handlerResult;
|
|
603
630
|
}
|
|
604
631
|
if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;
|
|
605
|
-
this._params.
|
|
606
|
-
this.
|
|
632
|
+
this._params.resetZdm();
|
|
633
|
+
this._collect = 0;
|
|
634
|
+
break;
|
|
635
|
+
case ParserStackType.APC:
|
|
636
|
+
code = data[this._parseStack.chunkPos];
|
|
637
|
+
handlerResult = this._apcParser.end(code !== 0x18 && code !== 0x1a, promiseResult);
|
|
638
|
+
if (handlerResult) {
|
|
639
|
+
return handlerResult;
|
|
640
|
+
}
|
|
641
|
+
if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;
|
|
642
|
+
this._params.resetZdm();
|
|
607
643
|
this._collect = 0;
|
|
608
644
|
break;
|
|
609
645
|
}
|
|
@@ -621,34 +657,87 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
|
|
|
621
657
|
for (let i = start; i < length; ++i) {
|
|
622
658
|
code = data[i];
|
|
623
659
|
|
|
660
|
+
// EXE fast-path: common control bytes (0x00-0x17) in non-payload states
|
|
661
|
+
if (code < 0x18 && this.currentState <= ParserState.CSI_IGNORE) {
|
|
662
|
+
(this._executeHandlersArr[code] ?? this._executeHandlerFb)(code);
|
|
663
|
+
this.precedingJoinState = 0;
|
|
664
|
+
continue;
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
// CSI fast-path: collapse ESC [ into a single entry, parse params+final in a tight loop
|
|
668
|
+
if (code === 0x1b
|
|
669
|
+
&& this.currentState < ParserState.OSC_STRING
|
|
670
|
+
&& i + 2 < length && data[i + 1] === 0x5b
|
|
671
|
+
) {
|
|
672
|
+
this._params.resetZdm();
|
|
673
|
+
this._collect = 0;
|
|
674
|
+
let k = i + 2;
|
|
675
|
+
let ch = data[k];
|
|
676
|
+
if (ch >= 0x3c && ch <= 0x3f) {
|
|
677
|
+
this._collect = ch;
|
|
678
|
+
k++;
|
|
679
|
+
}
|
|
680
|
+
let csiDone = false;
|
|
681
|
+
for (; k < length; k++) {
|
|
682
|
+
ch = data[k];
|
|
683
|
+
if (ch >= 0x30 && ch <= 0x39) {
|
|
684
|
+
this._params.addDigit(ch - 48);
|
|
685
|
+
} else if (ch === 0x3b) {
|
|
686
|
+
this._params.addParam(0);
|
|
687
|
+
} else if (ch === 0x3a) {
|
|
688
|
+
this._params.addSubParam(-1);
|
|
689
|
+
} else if (ch >= 0x40 && ch <= 0x7e) {
|
|
690
|
+
const handlers = this._csiHandlers[this._collect << 8 | ch];
|
|
691
|
+
let j = handlers ? handlers.length - 1 : -1;
|
|
692
|
+
for (; j >= 0; j--) {
|
|
693
|
+
handlerResult = handlers[j](this._params);
|
|
694
|
+
if (handlerResult === true) {
|
|
695
|
+
break;
|
|
696
|
+
} else if (handlerResult instanceof Promise) {
|
|
697
|
+
transition = ParserAction.CSI_DISPATCH << TableAccess.TRANSITION_ACTION_SHIFT | ParserState.GROUND;
|
|
698
|
+
this._preserveStack(ParserStackType.CSI, handlers, j, transition, k);
|
|
699
|
+
return handlerResult;
|
|
700
|
+
}
|
|
701
|
+
}
|
|
702
|
+
if (j < 0) {
|
|
703
|
+
this._csiHandlerFb(this._collect << 8 | ch, this._params);
|
|
704
|
+
}
|
|
705
|
+
this.precedingJoinState = 0;
|
|
706
|
+
i = k;
|
|
707
|
+
this.currentState = ParserState.GROUND;
|
|
708
|
+
csiDone = true;
|
|
709
|
+
break;
|
|
710
|
+
} else {
|
|
711
|
+
break;
|
|
712
|
+
}
|
|
713
|
+
}
|
|
714
|
+
if (!csiDone) {
|
|
715
|
+
i = k - 1;
|
|
716
|
+
this.currentState = ParserState.CSI_PARAM;
|
|
717
|
+
}
|
|
718
|
+
continue;
|
|
719
|
+
}
|
|
720
|
+
|
|
624
721
|
// normal transition & action lookup
|
|
625
722
|
transition = this._transitions.table[this.currentState << TableAccess.INDEX_STATE_SHIFT | (code < 0xa0 ? code : NON_ASCII_PRINTABLE)];
|
|
626
723
|
switch (transition >> TableAccess.TRANSITION_ACTION_SHIFT) {
|
|
627
724
|
case ParserAction.PRINT:
|
|
628
|
-
// read ahead with loop unrolling
|
|
629
725
|
// Note: 0x20 (SP) is included, 0x7F (DEL) is excluded
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
if (++j >= length || (code = data[j]) < 0x20 || (code > 0x7e && code < NON_ASCII_PRINTABLE)) {
|
|
642
|
-
this._printHandler(data, i, j);
|
|
643
|
-
i = j - 1;
|
|
644
|
-
break;
|
|
645
|
-
}
|
|
646
|
-
if (++j >= length || (code = data[j]) < 0x20 || (code > 0x7e && code < NON_ASCII_PRINTABLE)) {
|
|
647
|
-
this._printHandler(data, i, j);
|
|
648
|
-
i = j - 1;
|
|
649
|
-
break;
|
|
726
|
+
let c = i;
|
|
727
|
+
const l4 = length - 4;
|
|
728
|
+
while (c < l4
|
|
729
|
+
&& data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)
|
|
730
|
+
&& data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)
|
|
731
|
+
&& data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)
|
|
732
|
+
&& data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)
|
|
733
|
+
) {}
|
|
734
|
+
if (c >= l4) {
|
|
735
|
+
while (c < length && data[c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)) {
|
|
736
|
+
c++;
|
|
650
737
|
}
|
|
651
738
|
}
|
|
739
|
+
this._printHandler(data, i, c);
|
|
740
|
+
i = c - 1;
|
|
652
741
|
break;
|
|
653
742
|
case ParserAction.EXECUTE:
|
|
654
743
|
if (this._executeHandlers[code]) this._executeHandlers[code]();
|
|
@@ -730,8 +819,7 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
|
|
|
730
819
|
this.precedingJoinState = 0;
|
|
731
820
|
break;
|
|
732
821
|
case ParserAction.CLEAR:
|
|
733
|
-
this._params.
|
|
734
|
-
this._params.addParam(0); // ZDM
|
|
822
|
+
this._params.resetZdm();
|
|
735
823
|
this._collect = 0;
|
|
736
824
|
break;
|
|
737
825
|
case ParserAction.DCS_HOOK:
|
|
@@ -755,8 +843,7 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
|
|
|
755
843
|
return handlerResult;
|
|
756
844
|
}
|
|
757
845
|
if (code === 0x1b) transition |= ParserState.ESCAPE;
|
|
758
|
-
this._params.
|
|
759
|
-
this._params.addParam(0); // ZDM
|
|
846
|
+
this._params.resetZdm();
|
|
760
847
|
this._collect = 0;
|
|
761
848
|
this.precedingJoinState = 0;
|
|
762
849
|
break;
|
|
@@ -780,8 +867,31 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
|
|
|
780
867
|
return handlerResult;
|
|
781
868
|
}
|
|
782
869
|
if (code === 0x1b) transition |= ParserState.ESCAPE;
|
|
783
|
-
this._params.
|
|
784
|
-
this.
|
|
870
|
+
this._params.resetZdm();
|
|
871
|
+
this._collect = 0;
|
|
872
|
+
this.precedingJoinState = 0;
|
|
873
|
+
break;
|
|
874
|
+
case ParserAction.APC_START:
|
|
875
|
+
this._apcParser.start();
|
|
876
|
+
break;
|
|
877
|
+
case ParserAction.APC_PUT:
|
|
878
|
+
// inner loop - exit APC_PUT: 0x18, 0x1a, 0x1b, 0x9c
|
|
879
|
+
for (let j = i + 1; ; ++j) {
|
|
880
|
+
if (j >= length || (code = data[j]) === 0x18 || code === 0x1a || code === 0x1b || code === 0x9c || (code > 0x7f && code < NON_ASCII_PRINTABLE)) {
|
|
881
|
+
this._apcParser.put(data, i, j);
|
|
882
|
+
i = j - 1;
|
|
883
|
+
break;
|
|
884
|
+
}
|
|
885
|
+
}
|
|
886
|
+
break;
|
|
887
|
+
case ParserAction.APC_END:
|
|
888
|
+
handlerResult = this._apcParser.end(code !== 0x18 && code !== 0x1a);
|
|
889
|
+
if (handlerResult) {
|
|
890
|
+
this._preserveStack(ParserStackType.APC, [], 0, transition, i);
|
|
891
|
+
return handlerResult;
|
|
892
|
+
}
|
|
893
|
+
if (code === 0x1b) transition |= ParserState.ESCAPE;
|
|
894
|
+
this._params.resetZdm();
|
|
785
895
|
this._collect = 0;
|
|
786
896
|
this.precedingJoinState = 0;
|
|
787
897
|
break;
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { IOscHandler, IHandlerCollection, OscFallbackHandlerType, IOscParser, ISubParserStackState } from 'common/parser/Types';
|
|
7
|
-
import { OscState,
|
|
7
|
+
import { OscState, ParserConstants } from 'common/parser/Constants';
|
|
8
8
|
import { utf32ToString } from 'common/input/TextDecoder';
|
|
9
9
|
import { IDisposable } from 'common/Types';
|
|
10
10
|
|
|
@@ -23,9 +23,7 @@ export class OscParser implements IOscParser {
|
|
|
23
23
|
};
|
|
24
24
|
|
|
25
25
|
public registerHandler(ident: number, handler: IOscHandler): IDisposable {
|
|
26
|
-
|
|
27
|
-
this._handlers[ident] = [];
|
|
28
|
-
}
|
|
26
|
+
this._handlers[ident] ??= [];
|
|
29
27
|
const handlerList = this._handlers[ident];
|
|
30
28
|
handlerList.push(handler);
|
|
31
29
|
return {
|
|
@@ -194,6 +192,8 @@ export class OscParser implements IOscParser {
|
|
|
194
192
|
* as OSC handlers.
|
|
195
193
|
*/
|
|
196
194
|
export class OscHandler implements IOscHandler {
|
|
195
|
+
private static _payloadLimit = ParserConstants.PAYLOAD_LIMIT;
|
|
196
|
+
|
|
197
197
|
private _data = '';
|
|
198
198
|
private _hitLimit: boolean = false;
|
|
199
199
|
|
|
@@ -209,7 +209,7 @@ export class OscHandler implements IOscHandler {
|
|
|
209
209
|
return;
|
|
210
210
|
}
|
|
211
211
|
this._data += utf32ToString(data, start, end);
|
|
212
|
-
if (this._data.length >
|
|
212
|
+
if (this._data.length > OscHandler._payloadLimit) {
|
|
213
213
|
this._data = '';
|
|
214
214
|
this._hitLimit = true;
|
|
215
215
|
}
|
|
@@ -129,6 +129,19 @@ export class Params implements IParams {
|
|
|
129
129
|
this._digitIsSub = false;
|
|
130
130
|
}
|
|
131
131
|
|
|
132
|
+
/**
|
|
133
|
+
* Reset and add 0 as first param (ZDM).
|
|
134
|
+
*/
|
|
135
|
+
public resetZdm(): void {
|
|
136
|
+
this.length = 1;
|
|
137
|
+
this._subParamsLength = 0;
|
|
138
|
+
this._rejectDigits = false;
|
|
139
|
+
this._rejectSubDigits = false;
|
|
140
|
+
this._digitIsSub = false;
|
|
141
|
+
this._subParamsIdx[0] = 0;
|
|
142
|
+
this.params[0] = 0;
|
|
143
|
+
}
|
|
144
|
+
|
|
132
145
|
/**
|
|
133
146
|
* Add a parameter value.
|
|
134
147
|
* `Params` only stores up to `maxLength` parameters, any later
|
|
@@ -32,6 +32,7 @@ export interface IParams {
|
|
|
32
32
|
clone(): IParams;
|
|
33
33
|
toArray(): ParamsArray;
|
|
34
34
|
reset(): void;
|
|
35
|
+
resetZdm(): void;
|
|
35
36
|
addParam(value: number): void;
|
|
36
37
|
addSubParam(value: number): void;
|
|
37
38
|
hasSubParams(idx: number): boolean;
|
|
@@ -107,7 +108,7 @@ export type EscFallbackHandlerType = (identifier: number) => void;
|
|
|
107
108
|
/**
|
|
108
109
|
* EXECUTE handler types.
|
|
109
110
|
*/
|
|
110
|
-
export type ExecuteHandlerType = () => boolean;
|
|
111
|
+
export type ExecuteHandlerType = (ident?: number) => boolean;
|
|
111
112
|
export type ExecuteFallbackHandlerType = (ident: number) => void;
|
|
112
113
|
|
|
113
114
|
/**
|
|
@@ -134,6 +135,29 @@ export interface IOscHandler {
|
|
|
134
135
|
}
|
|
135
136
|
export type OscFallbackHandlerType = (ident: number, action: 'START' | 'PUT' | 'END', payload?: any) => void;
|
|
136
137
|
|
|
138
|
+
/**
|
|
139
|
+
* APC handler types.
|
|
140
|
+
*/
|
|
141
|
+
export interface IApcHandler {
|
|
142
|
+
/**
|
|
143
|
+
* Announces start of this APC command.
|
|
144
|
+
* Prepare needed data structures here.
|
|
145
|
+
*/
|
|
146
|
+
start(): void;
|
|
147
|
+
/**
|
|
148
|
+
* Incoming data chunk.
|
|
149
|
+
*/
|
|
150
|
+
put(data: Uint32Array, start: number, end: number): void;
|
|
151
|
+
/**
|
|
152
|
+
* End of APC command. `success` indicates whether the
|
|
153
|
+
* command finished normally or got aborted, thus final
|
|
154
|
+
* execution of the command should depend on `success`.
|
|
155
|
+
* To save memory also cleanup data structures here.
|
|
156
|
+
*/
|
|
157
|
+
end(success: boolean): boolean | Promise<boolean>;
|
|
158
|
+
}
|
|
159
|
+
export type ApcFallbackHandlerType = (ident: number, action: 'START' | 'PUT' | 'END', payload?: any) => void;
|
|
160
|
+
|
|
137
161
|
/**
|
|
138
162
|
* PRINT handler types.
|
|
139
163
|
*/
|
|
@@ -196,6 +220,10 @@ export interface IEscapeSequenceParser extends IDisposable {
|
|
|
196
220
|
clearOscHandler(ident: number): void;
|
|
197
221
|
setOscHandlerFallback(handler: OscFallbackHandlerType): void;
|
|
198
222
|
|
|
223
|
+
registerApcHandler(ident: number, handler: IApcHandler): IDisposable;
|
|
224
|
+
clearApcHandler(ident: number): void;
|
|
225
|
+
setApcHandlerFallback(handler: ApcFallbackHandlerType): void;
|
|
226
|
+
|
|
199
227
|
setErrorHandler(handler: (state: IParsingState) => IParsingState): void;
|
|
200
228
|
clearErrorHandler(): void;
|
|
201
229
|
}
|
|
@@ -223,6 +251,11 @@ export interface IDcsParser extends ISubParser<IDcsHandler, DcsFallbackHandlerTy
|
|
|
223
251
|
unhook(success: boolean, promiseResult?: boolean): void | Promise<boolean>;
|
|
224
252
|
}
|
|
225
253
|
|
|
254
|
+
export interface IApcParser extends ISubParser<IApcHandler, ApcFallbackHandlerType> {
|
|
255
|
+
start(): void;
|
|
256
|
+
end(success: boolean, promiseResult?: boolean): void | Promise<boolean>;
|
|
257
|
+
}
|
|
258
|
+
|
|
226
259
|
/**
|
|
227
260
|
* Interface to denote a specific ESC, CSI or DCS handler slot.
|
|
228
261
|
* The values are used to create an integer respresentation during handler
|
|
@@ -252,7 +285,8 @@ export const enum ParserStackType {
|
|
|
252
285
|
CSI,
|
|
253
286
|
ESC,
|
|
254
287
|
OSC,
|
|
255
|
-
DCS
|
|
288
|
+
DCS,
|
|
289
|
+
APC
|
|
256
290
|
}
|
|
257
291
|
|
|
258
292
|
// aggregate of resumable handler lists
|
|
@@ -18,10 +18,10 @@ export class BufferLineApiView implements IBufferLineApi {
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
if (cell) {
|
|
21
|
-
this._line.loadCell(x, cell as ICellData);
|
|
21
|
+
this._line.loadCell(x, cell as unknown as ICellData);
|
|
22
22
|
return cell;
|
|
23
23
|
}
|
|
24
|
-
return this._line.loadCell(x, new CellData());
|
|
24
|
+
return this._line.loadCell(x, new CellData()) as unknown as IBufferCellApi;
|
|
25
25
|
}
|
|
26
26
|
public translateToString(trimRight?: boolean, startColumn?: number, endColumn?: number): string {
|
|
27
27
|
return this._line.translateToString(trimRight, startColumn, endColumn);
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
import { IBuffer as IBufferApi, IBufferNamespace as IBufferNamespaceApi } from '@xterm/xterm';
|
|
7
7
|
import { BufferApiView } from 'common/public/BufferApiView';
|
|
8
8
|
import { ICoreTerminal } from 'common/Types';
|
|
9
|
-
import { Disposable } from '
|
|
10
|
-
import { Emitter } from '
|
|
9
|
+
import { Disposable } from 'common/Lifecycle';
|
|
10
|
+
import { Emitter } from 'common/Event';
|
|
11
11
|
|
|
12
12
|
export class BufferNamespaceApi extends Disposable implements IBufferNamespaceApi {
|
|
13
13
|
private _normal: BufferApiView;
|
|
@@ -34,4 +34,7 @@ export class ParserApi implements IParser {
|
|
|
34
34
|
public addOscHandler(ident: number, callback: (data: string) => boolean | Promise<boolean>): IDisposable {
|
|
35
35
|
return this.registerOscHandler(ident, callback);
|
|
36
36
|
}
|
|
37
|
+
public registerApcHandler(ident: number, callback: (data: string) => boolean | Promise<boolean>): IDisposable {
|
|
38
|
+
return this._core.registerApcHandler(ident, callback);
|
|
39
|
+
}
|
|
37
40
|
}
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
* @license MIT
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { Disposable } from '
|
|
6
|
+
import { Disposable } from 'common/Lifecycle';
|
|
7
7
|
import { IAttributeData, IBufferLine } from 'common/Types';
|
|
8
8
|
import { BufferSet } from 'common/buffer/BufferSet';
|
|
9
9
|
import { IBuffer, IBufferSet } from 'common/buffer/Types';
|
|
10
|
-
import { IBufferService, IOptionsService, type IBufferResizeEvent } from 'common/services/Services';
|
|
11
|
-
import { Emitter } from '
|
|
10
|
+
import { IBufferService, ILogService, IOptionsService, type IBufferResizeEvent } from 'common/services/Services';
|
|
11
|
+
import { Emitter } from 'common/Event';
|
|
12
12
|
|
|
13
13
|
export const MINIMUM_COLS = 2; // Less than 2 can mess with wide chars
|
|
14
14
|
export const MINIMUM_ROWS = 1;
|
|
@@ -32,11 +32,14 @@ export class BufferService extends Disposable implements IBufferService {
|
|
|
32
32
|
/** An IBufferline to clone/copy from for new blank lines */
|
|
33
33
|
private _cachedBlankLine: IBufferLine | undefined;
|
|
34
34
|
|
|
35
|
-
constructor(
|
|
35
|
+
constructor(
|
|
36
|
+
@IOptionsService optionsService: IOptionsService,
|
|
37
|
+
@ILogService logService: ILogService
|
|
38
|
+
) {
|
|
36
39
|
super();
|
|
37
40
|
this.cols = Math.max(optionsService.rawOptions.cols || 0, MINIMUM_COLS);
|
|
38
41
|
this.rows = Math.max(optionsService.rawOptions.rows || 0, MINIMUM_ROWS);
|
|
39
|
-
this.buffers = this._register(new BufferSet(optionsService, this));
|
|
42
|
+
this.buffers = this._register(new BufferSet(optionsService, this, logService));
|
|
40
43
|
this._register(this.buffers.onBufferActivate(e => {
|
|
41
44
|
this._onScroll.fire(e.activeBuffer.ydisp);
|
|
42
45
|
}));
|
|
@@ -14,6 +14,10 @@ export class CharsetService implements ICharsetService {
|
|
|
14
14
|
|
|
15
15
|
private _charsets: (ICharset | undefined)[] = [];
|
|
16
16
|
|
|
17
|
+
public get charsets(): (ICharset | undefined)[] {
|
|
18
|
+
return this._charsets;
|
|
19
|
+
}
|
|
20
|
+
|
|
17
21
|
public reset(): void {
|
|
18
22
|
this.charset = undefined;
|
|
19
23
|
this._charsets = [];
|