@xterm/xterm 6.1.0-beta.20 → 6.1.0-beta.201
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 +60 -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 +25 -14
- 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 +256 -36
- 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 +158 -55
- package/src/common/parser/OscParser.ts +5 -5
- package/src/common/parser/Params.ts +13 -0
- package/src/common/parser/Types.ts +35 -1
- 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
|
|
|
@@ -243,6 +251,7 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
|
|
|
243
251
|
protected _escHandlers: IHandlerCollection<EscHandlerType>;
|
|
244
252
|
protected readonly _oscParser: IOscParser;
|
|
245
253
|
protected readonly _dcsParser: IDcsParser;
|
|
254
|
+
protected readonly _apcParser: IApcParser;
|
|
246
255
|
protected _errorHandler: (state: IParsingState) => IParsingState;
|
|
247
256
|
|
|
248
257
|
// fallback handlers
|
|
@@ -290,6 +299,7 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
|
|
|
290
299
|
}));
|
|
291
300
|
this._oscParser = this._register(new OscParser());
|
|
292
301
|
this._dcsParser = this._register(new DcsParser());
|
|
302
|
+
this._apcParser = this._register(new ApcParser());
|
|
293
303
|
this._errorHandler = this._errorHandlerFb;
|
|
294
304
|
|
|
295
305
|
// swallow 7bit ST (ESC+\)
|
|
@@ -351,9 +361,7 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
|
|
|
351
361
|
|
|
352
362
|
public registerEscHandler(id: IFunctionIdentifier, handler: EscHandlerType): IDisposable {
|
|
353
363
|
const ident = this._identifier(id, [0x30, 0x7e]);
|
|
354
|
-
|
|
355
|
-
this._escHandlers[ident] = [];
|
|
356
|
-
}
|
|
364
|
+
this._escHandlers[ident] ??= [];
|
|
357
365
|
const handlerList = this._escHandlers[ident];
|
|
358
366
|
handlerList.push(handler);
|
|
359
367
|
return {
|
|
@@ -384,9 +392,7 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
|
|
|
384
392
|
|
|
385
393
|
public registerCsiHandler(id: IFunctionIdentifier, handler: CsiHandlerType): IDisposable {
|
|
386
394
|
const ident = this._identifier(id);
|
|
387
|
-
|
|
388
|
-
this._csiHandlers[ident] = [];
|
|
389
|
-
}
|
|
395
|
+
this._csiHandlers[ident] ??= [];
|
|
390
396
|
const handlerList = this._csiHandlers[ident];
|
|
391
397
|
handlerList.push(handler);
|
|
392
398
|
return {
|
|
@@ -425,6 +431,16 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
|
|
|
425
431
|
this._oscParser.setHandlerFallback(handler);
|
|
426
432
|
}
|
|
427
433
|
|
|
434
|
+
public registerApcHandler(ident: number, handler: IApcHandler): IDisposable {
|
|
435
|
+
return this._apcParser.registerHandler(ident, handler);
|
|
436
|
+
}
|
|
437
|
+
public clearApcHandler(ident: number): void {
|
|
438
|
+
this._apcParser.clearHandler(ident);
|
|
439
|
+
}
|
|
440
|
+
public setApcHandlerFallback(handler: ApcFallbackHandlerType): void {
|
|
441
|
+
this._apcParser.setHandlerFallback(handler);
|
|
442
|
+
}
|
|
443
|
+
|
|
428
444
|
public setErrorHandler(callback: (state: IParsingState) => IParsingState): void {
|
|
429
445
|
this._errorHandler = callback;
|
|
430
446
|
}
|
|
@@ -445,8 +461,8 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
|
|
|
445
461
|
this.currentState = this.initialState;
|
|
446
462
|
this._oscParser.reset();
|
|
447
463
|
this._dcsParser.reset();
|
|
448
|
-
this.
|
|
449
|
-
this._params.
|
|
464
|
+
this._apcParser.reset();
|
|
465
|
+
this._params.resetZdm();
|
|
450
466
|
this._collect = 0;
|
|
451
467
|
this.precedingJoinState = 0;
|
|
452
468
|
// abort pending continuation from async handler
|
|
@@ -489,6 +505,10 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
|
|
|
489
505
|
* - OSC_STRING:OSC_PUT
|
|
490
506
|
* - DCS_PASSTHROUGH:DCS_PUT
|
|
491
507
|
*
|
|
508
|
+
* Additionally the following fast paths exist before the table lookup:
|
|
509
|
+
* - EXE bytes < 0x18 in non-payload states (avoids table lookup entirely)
|
|
510
|
+
* - 7-bit CSI sequences without intermediates (ESC [ params final)
|
|
511
|
+
*
|
|
492
512
|
* Note on asynchronous handler support:
|
|
493
513
|
* Any handler returning a promise will be treated as asynchronous.
|
|
494
514
|
* To keep the in-band blocking working for async handlers, `parse` pauses execution,
|
|
@@ -591,8 +611,7 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
|
|
|
591
611
|
return handlerResult;
|
|
592
612
|
}
|
|
593
613
|
if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;
|
|
594
|
-
this._params.
|
|
595
|
-
this._params.addParam(0); // ZDM
|
|
614
|
+
this._params.resetZdm();
|
|
596
615
|
this._collect = 0;
|
|
597
616
|
break;
|
|
598
617
|
case ParserStackType.OSC:
|
|
@@ -602,8 +621,17 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
|
|
|
602
621
|
return handlerResult;
|
|
603
622
|
}
|
|
604
623
|
if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;
|
|
605
|
-
this._params.
|
|
606
|
-
this.
|
|
624
|
+
this._params.resetZdm();
|
|
625
|
+
this._collect = 0;
|
|
626
|
+
break;
|
|
627
|
+
case ParserStackType.APC:
|
|
628
|
+
code = data[this._parseStack.chunkPos];
|
|
629
|
+
handlerResult = this._apcParser.end(code !== 0x18 && code !== 0x1a, promiseResult);
|
|
630
|
+
if (handlerResult) {
|
|
631
|
+
return handlerResult;
|
|
632
|
+
}
|
|
633
|
+
if (code === 0x1b) this._parseStack.transition |= ParserState.ESCAPE;
|
|
634
|
+
this._params.resetZdm();
|
|
607
635
|
this._collect = 0;
|
|
608
636
|
break;
|
|
609
637
|
}
|
|
@@ -621,34 +649,88 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
|
|
|
621
649
|
for (let i = start; i < length; ++i) {
|
|
622
650
|
code = data[i];
|
|
623
651
|
|
|
652
|
+
// EXE fast-path: common control bytes (0x00-0x17) in non-payload states
|
|
653
|
+
if (code < 0x18 && this.currentState <= ParserState.CSI_IGNORE) {
|
|
654
|
+
if (this._executeHandlers[code]) this._executeHandlers[code]();
|
|
655
|
+
else this._executeHandlerFb(code);
|
|
656
|
+
this.precedingJoinState = 0;
|
|
657
|
+
continue;
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
// CSI fast-path: collapse ESC [ into a single entry, parse params+final in a tight loop
|
|
661
|
+
if (code === 0x1b
|
|
662
|
+
&& this.currentState < ParserState.OSC_STRING
|
|
663
|
+
&& i + 2 < length && data[i + 1] === 0x5b
|
|
664
|
+
) {
|
|
665
|
+
this._params.resetZdm();
|
|
666
|
+
this._collect = 0;
|
|
667
|
+
let k = i + 2;
|
|
668
|
+
let ch = data[k];
|
|
669
|
+
if (ch >= 0x3c && ch <= 0x3f) {
|
|
670
|
+
this._collect = ch;
|
|
671
|
+
k++;
|
|
672
|
+
}
|
|
673
|
+
let csiDone = false;
|
|
674
|
+
for (; k < length; k++) {
|
|
675
|
+
ch = data[k];
|
|
676
|
+
if (ch >= 0x30 && ch <= 0x39) {
|
|
677
|
+
this._params.addDigit(ch - 48);
|
|
678
|
+
} else if (ch === 0x3b) {
|
|
679
|
+
this._params.addParam(0);
|
|
680
|
+
} else if (ch === 0x3a) {
|
|
681
|
+
this._params.addSubParam(-1);
|
|
682
|
+
} else if (ch >= 0x40 && ch <= 0x7e) {
|
|
683
|
+
const handlers = this._csiHandlers[this._collect << 8 | ch];
|
|
684
|
+
let j = handlers ? handlers.length - 1 : -1;
|
|
685
|
+
for (; j >= 0; j--) {
|
|
686
|
+
handlerResult = handlers[j](this._params);
|
|
687
|
+
if (handlerResult === true) {
|
|
688
|
+
break;
|
|
689
|
+
} else if (handlerResult instanceof Promise) {
|
|
690
|
+
transition = ParserAction.CSI_DISPATCH << TableAccess.TRANSITION_ACTION_SHIFT | ParserState.GROUND;
|
|
691
|
+
this._preserveStack(ParserStackType.CSI, handlers, j, transition, k);
|
|
692
|
+
return handlerResult;
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
if (j < 0) {
|
|
696
|
+
this._csiHandlerFb(this._collect << 8 | ch, this._params);
|
|
697
|
+
}
|
|
698
|
+
this.precedingJoinState = 0;
|
|
699
|
+
i = k;
|
|
700
|
+
this.currentState = ParserState.GROUND;
|
|
701
|
+
csiDone = true;
|
|
702
|
+
break;
|
|
703
|
+
} else {
|
|
704
|
+
break;
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
if (!csiDone) {
|
|
708
|
+
i = k - 1;
|
|
709
|
+
this.currentState = ParserState.CSI_PARAM;
|
|
710
|
+
}
|
|
711
|
+
continue;
|
|
712
|
+
}
|
|
713
|
+
|
|
624
714
|
// normal transition & action lookup
|
|
625
715
|
transition = this._transitions.table[this.currentState << TableAccess.INDEX_STATE_SHIFT | (code < 0xa0 ? code : NON_ASCII_PRINTABLE)];
|
|
626
716
|
switch (transition >> TableAccess.TRANSITION_ACTION_SHIFT) {
|
|
627
717
|
case ParserAction.PRINT:
|
|
628
|
-
// read ahead with loop unrolling
|
|
629
718
|
// 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;
|
|
719
|
+
let c = i;
|
|
720
|
+
const l4 = length - 4;
|
|
721
|
+
while (c < l4
|
|
722
|
+
&& data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)
|
|
723
|
+
&& data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)
|
|
724
|
+
&& data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)
|
|
725
|
+
&& data[++c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)
|
|
726
|
+
) {}
|
|
727
|
+
if (c >= l4) {
|
|
728
|
+
while (c < length && data[c] >= 0x20 && (data[c] <= 0x7e || data[c] >= NON_ASCII_PRINTABLE)) {
|
|
729
|
+
c++;
|
|
650
730
|
}
|
|
651
731
|
}
|
|
732
|
+
this._printHandler(data, i, c);
|
|
733
|
+
i = c - 1;
|
|
652
734
|
break;
|
|
653
735
|
case ParserAction.EXECUTE:
|
|
654
736
|
if (this._executeHandlers[code]) this._executeHandlers[code]();
|
|
@@ -730,8 +812,7 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
|
|
|
730
812
|
this.precedingJoinState = 0;
|
|
731
813
|
break;
|
|
732
814
|
case ParserAction.CLEAR:
|
|
733
|
-
this._params.
|
|
734
|
-
this._params.addParam(0); // ZDM
|
|
815
|
+
this._params.resetZdm();
|
|
735
816
|
this._collect = 0;
|
|
736
817
|
break;
|
|
737
818
|
case ParserAction.DCS_HOOK:
|
|
@@ -755,8 +836,7 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
|
|
|
755
836
|
return handlerResult;
|
|
756
837
|
}
|
|
757
838
|
if (code === 0x1b) transition |= ParserState.ESCAPE;
|
|
758
|
-
this._params.
|
|
759
|
-
this._params.addParam(0); // ZDM
|
|
839
|
+
this._params.resetZdm();
|
|
760
840
|
this._collect = 0;
|
|
761
841
|
this.precedingJoinState = 0;
|
|
762
842
|
break;
|
|
@@ -780,8 +860,31 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
|
|
|
780
860
|
return handlerResult;
|
|
781
861
|
}
|
|
782
862
|
if (code === 0x1b) transition |= ParserState.ESCAPE;
|
|
783
|
-
this._params.
|
|
784
|
-
this.
|
|
863
|
+
this._params.resetZdm();
|
|
864
|
+
this._collect = 0;
|
|
865
|
+
this.precedingJoinState = 0;
|
|
866
|
+
break;
|
|
867
|
+
case ParserAction.APC_START:
|
|
868
|
+
this._apcParser.start();
|
|
869
|
+
break;
|
|
870
|
+
case ParserAction.APC_PUT:
|
|
871
|
+
// inner loop - exit APC_PUT: 0x18, 0x1a, 0x1b, 0x9c
|
|
872
|
+
for (let j = i + 1; ; ++j) {
|
|
873
|
+
if (j >= length || (code = data[j]) === 0x18 || code === 0x1a || code === 0x1b || code === 0x9c || (code > 0x7f && code < NON_ASCII_PRINTABLE)) {
|
|
874
|
+
this._apcParser.put(data, i, j);
|
|
875
|
+
i = j - 1;
|
|
876
|
+
break;
|
|
877
|
+
}
|
|
878
|
+
}
|
|
879
|
+
break;
|
|
880
|
+
case ParserAction.APC_END:
|
|
881
|
+
handlerResult = this._apcParser.end(code !== 0x18 && code !== 0x1a);
|
|
882
|
+
if (handlerResult) {
|
|
883
|
+
this._preserveStack(ParserStackType.APC, [], 0, transition, i);
|
|
884
|
+
return handlerResult;
|
|
885
|
+
}
|
|
886
|
+
if (code === 0x1b) transition |= ParserState.ESCAPE;
|
|
887
|
+
this._params.resetZdm();
|
|
785
888
|
this._collect = 0;
|
|
786
889
|
this.precedingJoinState = 0;
|
|
787
890
|
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;
|
|
@@ -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 = [];
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { clone } from 'common/Clone';
|
|
7
|
-
import { Disposable } from '
|
|
8
|
-
import { IDecPrivateModes, IModes } from 'common/Types';
|
|
7
|
+
import { Disposable } from 'common/Lifecycle';
|
|
8
|
+
import { IDecPrivateModes, IKittyKeyboardState, IModes } from 'common/Types';
|
|
9
9
|
import { IBufferService, ICoreService, ILogService, IOptionsService } from 'common/services/Services';
|
|
10
|
-
import { Emitter } from '
|
|
10
|
+
import { Emitter } from 'common/Event';
|
|
11
11
|
|
|
12
12
|
const DEFAULT_MODES: IModes = Object.freeze({
|
|
13
13
|
insertMode: false
|
|
@@ -17,22 +17,33 @@ const DEFAULT_DEC_PRIVATE_MODES: IDecPrivateModes = Object.freeze({
|
|
|
17
17
|
applicationCursorKeys: false,
|
|
18
18
|
applicationKeypad: false,
|
|
19
19
|
bracketedPasteMode: false,
|
|
20
|
+
colorSchemeUpdates: false,
|
|
20
21
|
cursorBlink: undefined,
|
|
21
22
|
cursorStyle: undefined,
|
|
22
23
|
origin: false,
|
|
23
24
|
reverseWraparound: false,
|
|
24
25
|
sendFocus: false,
|
|
25
26
|
synchronizedOutput: false,
|
|
27
|
+
win32InputMode: false,
|
|
26
28
|
wraparound: true // defaults: xterm - true, vt100 - false
|
|
27
29
|
});
|
|
28
30
|
|
|
31
|
+
const DEFAULT_KITTY_KEYBOARD_STATE = (): IKittyKeyboardState => ({
|
|
32
|
+
flags: 0,
|
|
33
|
+
mainFlags: 0,
|
|
34
|
+
altFlags: 0,
|
|
35
|
+
mainStack: [],
|
|
36
|
+
altStack: []
|
|
37
|
+
});
|
|
38
|
+
|
|
29
39
|
export class CoreService extends Disposable implements ICoreService {
|
|
30
40
|
public serviceBrand: any;
|
|
31
41
|
|
|
32
|
-
public isCursorInitialized: boolean
|
|
42
|
+
public isCursorInitialized: boolean;
|
|
33
43
|
public isCursorHidden: boolean = false;
|
|
34
44
|
public modes: IModes;
|
|
35
45
|
public decPrivateModes: IDecPrivateModes;
|
|
46
|
+
public kittyKeyboard: IKittyKeyboardState;
|
|
36
47
|
|
|
37
48
|
private readonly _onData = this._register(new Emitter<string>());
|
|
38
49
|
public readonly onData = this._onData.event;
|
|
@@ -49,13 +60,16 @@ export class CoreService extends Disposable implements ICoreService {
|
|
|
49
60
|
@IOptionsService private readonly _optionsService: IOptionsService
|
|
50
61
|
) {
|
|
51
62
|
super();
|
|
63
|
+
this.isCursorInitialized = _optionsService.rawOptions.showCursorImmediately ?? false;
|
|
52
64
|
this.modes = clone(DEFAULT_MODES);
|
|
53
65
|
this.decPrivateModes = clone(DEFAULT_DEC_PRIVATE_MODES);
|
|
66
|
+
this.kittyKeyboard = DEFAULT_KITTY_KEYBOARD_STATE();
|
|
54
67
|
}
|
|
55
68
|
|
|
56
69
|
public reset(): void {
|
|
57
70
|
this.modes = clone(DEFAULT_MODES);
|
|
58
71
|
this.decPrivateModes = clone(DEFAULT_DEC_PRIVATE_MODES);
|
|
72
|
+
this.kittyKeyboard = DEFAULT_KITTY_KEYBOARD_STATE();
|
|
59
73
|
}
|
|
60
74
|
|
|
61
75
|
public triggerDataEvent(data: string, wasUserInput: boolean = false): void {
|