groove-dev 0.16.1 → 0.16.2
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/node_modules/@groove-dev/daemon/src/index.js +25 -7
- package/node_modules/@groove-dev/daemon/src/terminal-pty.js +129 -0
- package/node_modules/@groove-dev/gui/dist/assets/{index-Gfb8Zxy9.css → index-BhjOFLBc.css} +32 -1
- package/node_modules/@groove-dev/gui/dist/assets/index-DeXW9EFU.js +153 -0
- package/node_modules/@groove-dev/gui/dist/index.html +2 -2
- package/node_modules/@groove-dev/gui/package.json +3 -0
- package/node_modules/@groove-dev/gui/src/components/EditorTabs.jsx +1 -1
- package/node_modules/@groove-dev/gui/src/components/FileTree.jsx +0 -14
- package/node_modules/@groove-dev/gui/src/components/Terminal.jsx +154 -0
- package/node_modules/@groove-dev/gui/src/views/FileEditor.jsx +100 -39
- package/node_modules/@xterm/addon-fit/LICENSE +19 -0
- package/node_modules/@xterm/addon-fit/README.md +24 -0
- package/node_modules/@xterm/addon-fit/lib/addon-fit.js +2 -0
- package/node_modules/@xterm/addon-fit/lib/addon-fit.js.map +1 -0
- package/node_modules/@xterm/addon-fit/lib/addon-fit.mjs +18 -0
- package/node_modules/@xterm/addon-fit/lib/addon-fit.mjs.map +7 -0
- package/node_modules/@xterm/addon-fit/package.json +26 -0
- package/node_modules/@xterm/addon-fit/src/FitAddon.ts +92 -0
- package/node_modules/@xterm/addon-fit/typings/addon-fit.d.ts +55 -0
- package/node_modules/@xterm/addon-web-links/LICENSE +19 -0
- package/node_modules/@xterm/addon-web-links/README.md +21 -0
- package/node_modules/@xterm/addon-web-links/lib/addon-web-links.js +2 -0
- package/node_modules/@xterm/addon-web-links/lib/addon-web-links.js.map +1 -0
- package/node_modules/@xterm/addon-web-links/lib/addon-web-links.mjs +18 -0
- package/node_modules/@xterm/addon-web-links/lib/addon-web-links.mjs.map +7 -0
- package/node_modules/@xterm/addon-web-links/package.json +26 -0
- package/node_modules/@xterm/addon-web-links/src/WebLinkProvider.ts +199 -0
- package/node_modules/@xterm/addon-web-links/src/WebLinksAddon.ts +58 -0
- package/node_modules/@xterm/addon-web-links/typings/addon-web-links.d.ts +57 -0
- package/node_modules/@xterm/xterm/LICENSE +21 -0
- package/node_modules/@xterm/xterm/README.md +243 -0
- package/node_modules/@xterm/xterm/css/xterm.css +285 -0
- package/node_modules/@xterm/xterm/lib/xterm.js +2 -0
- package/node_modules/@xterm/xterm/lib/xterm.js.map +1 -0
- package/node_modules/@xterm/xterm/lib/xterm.mjs +53 -0
- package/node_modules/@xterm/xterm/lib/xterm.mjs.map +7 -0
- package/node_modules/@xterm/xterm/package.json +111 -0
- package/node_modules/@xterm/xterm/src/browser/AccessibilityManager.ts +435 -0
- package/node_modules/@xterm/xterm/src/browser/Clipboard.ts +93 -0
- package/node_modules/@xterm/xterm/src/browser/ColorContrastCache.ts +34 -0
- package/node_modules/@xterm/xterm/src/browser/CoreBrowserTerminal.ts +1339 -0
- package/node_modules/@xterm/xterm/src/browser/Linkifier.ts +403 -0
- package/node_modules/@xterm/xterm/src/browser/LocalizableStrings.ts +23 -0
- package/node_modules/@xterm/xterm/src/browser/OscLinkProvider.ts +129 -0
- package/node_modules/@xterm/xterm/src/browser/RenderDebouncer.ts +84 -0
- package/node_modules/@xterm/xterm/src/browser/TimeBasedDebouncer.ts +86 -0
- package/node_modules/@xterm/xterm/src/browser/Types.ts +226 -0
- package/node_modules/@xterm/xterm/src/browser/Viewport.ts +192 -0
- package/node_modules/@xterm/xterm/src/browser/decorations/BufferDecorationRenderer.ts +139 -0
- package/node_modules/@xterm/xterm/src/browser/decorations/ColorZoneStore.ts +117 -0
- package/node_modules/@xterm/xterm/src/browser/decorations/OverviewRulerRenderer.ts +214 -0
- package/node_modules/@xterm/xterm/src/browser/input/CompositionHelper.ts +248 -0
- package/node_modules/@xterm/xterm/src/browser/input/Mouse.ts +54 -0
- package/node_modules/@xterm/xterm/src/browser/input/MoveToCell.ts +251 -0
- package/node_modules/@xterm/xterm/src/browser/public/Terminal.ts +275 -0
- package/node_modules/@xterm/xterm/src/browser/renderer/dom/DomRenderer.ts +542 -0
- package/node_modules/@xterm/xterm/src/browser/renderer/dom/DomRendererRowFactory.ts +546 -0
- package/node_modules/@xterm/xterm/src/browser/renderer/dom/WidthCache.ts +167 -0
- package/node_modules/@xterm/xterm/src/browser/renderer/shared/Constants.ts +6 -0
- package/node_modules/@xterm/xterm/src/browser/renderer/shared/RendererUtils.ts +95 -0
- package/node_modules/@xterm/xterm/src/browser/renderer/shared/SelectionRenderModel.ts +93 -0
- package/node_modules/@xterm/xterm/src/browser/renderer/shared/Types.ts +84 -0
- package/node_modules/@xterm/xterm/src/browser/selection/SelectionModel.ts +144 -0
- package/node_modules/@xterm/xterm/src/browser/selection/Types.ts +15 -0
- package/node_modules/@xterm/xterm/src/browser/services/CharSizeService.ts +127 -0
- package/node_modules/@xterm/xterm/src/browser/services/CharacterJoinerService.ts +339 -0
- package/node_modules/@xterm/xterm/src/browser/services/CoreBrowserService.ts +137 -0
- package/node_modules/@xterm/xterm/src/browser/services/LinkProviderService.ts +28 -0
- package/node_modules/@xterm/xterm/src/browser/services/MouseService.ts +46 -0
- package/node_modules/@xterm/xterm/src/browser/services/RenderService.ts +376 -0
- package/node_modules/@xterm/xterm/src/browser/services/SelectionService.ts +1039 -0
- package/node_modules/@xterm/xterm/src/browser/services/Services.ts +158 -0
- package/node_modules/@xterm/xterm/src/browser/services/ThemeService.ts +198 -0
- package/node_modules/@xterm/xterm/src/browser/shared/Constants.ts +8 -0
- package/node_modules/@xterm/xterm/src/common/CircularList.ts +241 -0
- package/node_modules/@xterm/xterm/src/common/Clone.ts +23 -0
- package/node_modules/@xterm/xterm/src/common/Color.ts +376 -0
- package/node_modules/@xterm/xterm/src/common/CoreTerminal.ts +283 -0
- package/node_modules/@xterm/xterm/src/common/InputHandler.ts +3495 -0
- package/node_modules/@xterm/xterm/src/common/MultiKeyMap.ts +42 -0
- package/node_modules/@xterm/xterm/src/common/Platform.ts +44 -0
- package/node_modules/@xterm/xterm/src/common/SortedList.ts +194 -0
- package/node_modules/@xterm/xterm/src/common/TaskQueue.ts +166 -0
- package/node_modules/@xterm/xterm/src/common/TypedArrayUtils.ts +17 -0
- package/node_modules/@xterm/xterm/src/common/Types.ts +552 -0
- package/node_modules/@xterm/xterm/src/common/WindowsMode.ts +27 -0
- package/node_modules/@xterm/xterm/src/common/buffer/AttributeData.ts +211 -0
- package/node_modules/@xterm/xterm/src/common/buffer/Buffer.ts +662 -0
- package/node_modules/@xterm/xterm/src/common/buffer/BufferLine.ts +551 -0
- package/node_modules/@xterm/xterm/src/common/buffer/BufferRange.ts +13 -0
- package/node_modules/@xterm/xterm/src/common/buffer/BufferReflow.ts +226 -0
- package/node_modules/@xterm/xterm/src/common/buffer/BufferSet.ts +134 -0
- package/node_modules/@xterm/xterm/src/common/buffer/CellData.ts +94 -0
- package/node_modules/@xterm/xterm/src/common/buffer/Constants.ts +157 -0
- package/node_modules/@xterm/xterm/src/common/buffer/Marker.ts +43 -0
- package/node_modules/@xterm/xterm/src/common/buffer/Types.ts +52 -0
- package/node_modules/@xterm/xterm/src/common/data/Charsets.ts +256 -0
- package/node_modules/@xterm/xterm/src/common/data/EscapeSequences.ts +153 -0
- package/node_modules/@xterm/xterm/src/common/input/Keyboard.ts +373 -0
- package/node_modules/@xterm/xterm/src/common/input/TextDecoder.ts +346 -0
- package/node_modules/@xterm/xterm/src/common/input/UnicodeV6.ts +145 -0
- package/node_modules/@xterm/xterm/src/common/input/WriteBuffer.ts +247 -0
- package/node_modules/@xterm/xterm/src/common/input/XParseColor.ts +80 -0
- package/node_modules/@xterm/xterm/src/common/parser/Constants.ts +58 -0
- package/node_modules/@xterm/xterm/src/common/parser/DcsParser.ts +192 -0
- package/node_modules/@xterm/xterm/src/common/parser/EscapeSequenceParser.ts +792 -0
- package/node_modules/@xterm/xterm/src/common/parser/OscParser.ts +238 -0
- package/node_modules/@xterm/xterm/src/common/parser/Params.ts +229 -0
- package/node_modules/@xterm/xterm/src/common/parser/Types.ts +275 -0
- package/node_modules/@xterm/xterm/src/common/public/AddonManager.ts +53 -0
- package/node_modules/@xterm/xterm/src/common/public/BufferApiView.ts +35 -0
- package/node_modules/@xterm/xterm/src/common/public/BufferLineApiView.ts +29 -0
- package/node_modules/@xterm/xterm/src/common/public/BufferNamespaceApi.ts +36 -0
- package/node_modules/@xterm/xterm/src/common/public/ParserApi.ts +37 -0
- package/node_modules/@xterm/xterm/src/common/public/UnicodeApi.ts +27 -0
- package/node_modules/@xterm/xterm/src/common/services/BufferService.ts +154 -0
- package/node_modules/@xterm/xterm/src/common/services/CharsetService.ts +34 -0
- package/node_modules/@xterm/xterm/src/common/services/CoreMouseService.ts +365 -0
- package/node_modules/@xterm/xterm/src/common/services/CoreService.ts +92 -0
- package/node_modules/@xterm/xterm/src/common/services/DecorationService.ts +140 -0
- package/node_modules/@xterm/xterm/src/common/services/InstantiationService.ts +85 -0
- package/node_modules/@xterm/xterm/src/common/services/LogService.ts +124 -0
- package/node_modules/@xterm/xterm/src/common/services/OptionsService.ts +212 -0
- package/node_modules/@xterm/xterm/src/common/services/OscLinkService.ts +115 -0
- package/node_modules/@xterm/xterm/src/common/services/ServiceRegistry.ts +49 -0
- package/node_modules/@xterm/xterm/src/common/services/Services.ts +396 -0
- package/node_modules/@xterm/xterm/src/common/services/UnicodeService.ts +111 -0
- package/node_modules/@xterm/xterm/src/vs/base/browser/browser.ts +141 -0
- package/node_modules/@xterm/xterm/src/vs/base/browser/canIUse.ts +49 -0
- package/node_modules/@xterm/xterm/src/vs/base/browser/dom.ts +2369 -0
- package/node_modules/@xterm/xterm/src/vs/base/browser/fastDomNode.ts +316 -0
- package/node_modules/@xterm/xterm/src/vs/base/browser/globalPointerMoveMonitor.ts +112 -0
- package/node_modules/@xterm/xterm/src/vs/base/browser/iframe.ts +135 -0
- package/node_modules/@xterm/xterm/src/vs/base/browser/keyboardEvent.ts +213 -0
- package/node_modules/@xterm/xterm/src/vs/base/browser/mouseEvent.ts +229 -0
- package/node_modules/@xterm/xterm/src/vs/base/browser/touch.ts +372 -0
- package/node_modules/@xterm/xterm/src/vs/base/browser/ui/scrollbar/abstractScrollbar.ts +303 -0
- package/node_modules/@xterm/xterm/src/vs/base/browser/ui/scrollbar/horizontalScrollbar.ts +114 -0
- package/node_modules/@xterm/xterm/src/vs/base/browser/ui/scrollbar/scrollableElement.ts +720 -0
- package/node_modules/@xterm/xterm/src/vs/base/browser/ui/scrollbar/scrollableElementOptions.ts +165 -0
- package/node_modules/@xterm/xterm/src/vs/base/browser/ui/scrollbar/scrollbarArrow.ts +114 -0
- package/node_modules/@xterm/xterm/src/vs/base/browser/ui/scrollbar/scrollbarState.ts +243 -0
- package/node_modules/@xterm/xterm/src/vs/base/browser/ui/scrollbar/scrollbarVisibilityController.ts +118 -0
- package/node_modules/@xterm/xterm/src/vs/base/browser/ui/scrollbar/verticalScrollbar.ts +116 -0
- package/node_modules/@xterm/xterm/src/vs/base/browser/ui/widget.ts +57 -0
- package/node_modules/@xterm/xterm/src/vs/base/browser/window.ts +14 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/arrays.ts +887 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/arraysFind.ts +202 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/assert.ts +71 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/async.ts +1992 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/cancellation.ts +148 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/charCode.ts +450 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/collections.ts +140 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/decorators.ts +130 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/equals.ts +146 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/errors.ts +303 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/event.ts +1778 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/functional.ts +32 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/hash.ts +316 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/iterator.ts +159 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/keyCodes.ts +526 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/keybindings.ts +284 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/lazy.ts +47 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/lifecycle.ts +801 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/linkedList.ts +142 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/map.ts +202 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/numbers.ts +98 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/observable.ts +76 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/api.ts +31 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/autorun.ts +281 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/base.ts +489 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/debugName.ts +145 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/derived.ts +428 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/lazyObservableValue.ts +146 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/logging.ts +328 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/promise.ts +209 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/utils.ts +610 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/platform.ts +281 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/scrollable.ts +522 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/sequence.ts +34 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/stopwatch.ts +43 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/strings.ts +557 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/symbols.ts +9 -0
- package/node_modules/@xterm/xterm/src/vs/base/common/uint.ts +59 -0
- package/node_modules/@xterm/xterm/src/vs/patches/nls.ts +90 -0
- package/node_modules/@xterm/xterm/src/vs/typings/base-common.d.ts +20 -0
- package/node_modules/@xterm/xterm/src/vs/typings/require.d.ts +42 -0
- package/node_modules/@xterm/xterm/src/vs/typings/vscode-globals-nls.d.ts +36 -0
- package/node_modules/@xterm/xterm/src/vs/typings/vscode-globals-product.d.ts +33 -0
- package/node_modules/@xterm/xterm/typings/xterm.d.ts +1957 -0
- package/package.json +1 -1
- package/packages/daemon/src/index.js +25 -7
- package/packages/daemon/src/terminal-pty.js +129 -0
- package/packages/gui/dist/assets/{index-Gfb8Zxy9.css → index-BhjOFLBc.css} +32 -1
- package/packages/gui/dist/assets/index-DeXW9EFU.js +153 -0
- package/packages/gui/dist/index.html +2 -2
- package/packages/gui/package.json +3 -0
- package/packages/gui/src/components/EditorTabs.jsx +1 -1
- package/packages/gui/src/components/FileTree.jsx +0 -14
- package/packages/gui/src/components/Terminal.jsx +154 -0
- package/packages/gui/src/views/FileEditor.jsx +100 -39
- package/node_modules/@groove-dev/gui/dist/assets/index-BQSznoq0.js +0 -103
- package/packages/gui/dist/assets/index-BQSznoq0.js +0 -103
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2019 The xterm.js authors. All rights reserved.
|
|
3
|
+
* @license MIT
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { IDecoration, IDecorationOptions, ILinkHandler, ILogger, IWindowsPty, type IOverviewRulerOptions } from '@xterm/xterm';
|
|
7
|
+
import { CoreMouseEncoding, CoreMouseEventType, CursorInactiveStyle, CursorStyle, IAttributeData, ICharset, IColor, ICoreMouseEvent, ICoreMouseProtocol, IDecPrivateModes, IDisposable, IModes, IOscLinkData, IWindowOptions } from 'common/Types';
|
|
8
|
+
import { IBuffer, IBufferSet } from 'common/buffer/Types';
|
|
9
|
+
import { createDecorator } from 'common/services/ServiceRegistry';
|
|
10
|
+
import type { Emitter, Event } from 'vs/base/common/event';
|
|
11
|
+
|
|
12
|
+
export const IBufferService = createDecorator<IBufferService>('BufferService');
|
|
13
|
+
export interface IBufferService {
|
|
14
|
+
serviceBrand: undefined;
|
|
15
|
+
|
|
16
|
+
readonly cols: number;
|
|
17
|
+
readonly rows: number;
|
|
18
|
+
readonly buffer: IBuffer;
|
|
19
|
+
readonly buffers: IBufferSet;
|
|
20
|
+
isUserScrolling: boolean;
|
|
21
|
+
onResize: Event<IBufferResizeEvent>;
|
|
22
|
+
onScroll: Event<number>;
|
|
23
|
+
scroll(eraseAttr: IAttributeData, isWrapped?: boolean): void;
|
|
24
|
+
scrollLines(disp: number, suppressScrollEvent?: boolean): void;
|
|
25
|
+
resize(cols: number, rows: number): void;
|
|
26
|
+
reset(): void;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface IBufferResizeEvent {
|
|
30
|
+
cols: number;
|
|
31
|
+
rows: number;
|
|
32
|
+
colsChanged: boolean;
|
|
33
|
+
rowsChanged: boolean;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export const ICoreMouseService = createDecorator<ICoreMouseService>('CoreMouseService');
|
|
37
|
+
export interface ICoreMouseService {
|
|
38
|
+
serviceBrand: undefined;
|
|
39
|
+
|
|
40
|
+
activeProtocol: string;
|
|
41
|
+
activeEncoding: string;
|
|
42
|
+
areMouseEventsActive: boolean;
|
|
43
|
+
addProtocol(name: string, protocol: ICoreMouseProtocol): void;
|
|
44
|
+
addEncoding(name: string, encoding: CoreMouseEncoding): void;
|
|
45
|
+
reset(): void;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Triggers a mouse event to be sent.
|
|
49
|
+
*
|
|
50
|
+
* Returns true if the event passed all protocol restrictions and a report
|
|
51
|
+
* was sent, otherwise false. The return value may be used to decide whether
|
|
52
|
+
* the default event action in the bowser component should be omitted.
|
|
53
|
+
*
|
|
54
|
+
* Note: The method will change values of the given event object
|
|
55
|
+
* to fullfill protocol and encoding restrictions.
|
|
56
|
+
*/
|
|
57
|
+
triggerMouseEvent(event: ICoreMouseEvent): boolean;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Event to announce changes in mouse tracking.
|
|
61
|
+
*/
|
|
62
|
+
onProtocolChange: Event<CoreMouseEventType>;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Human readable version of mouse events.
|
|
66
|
+
*/
|
|
67
|
+
explainEvents(events: CoreMouseEventType): { [event: string]: boolean };
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Process wheel event taking partial scroll into account.
|
|
71
|
+
*/
|
|
72
|
+
consumeWheelEvent(ev: WheelEvent, cellHeight?: number, dpr?: number): number;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export const ICoreService = createDecorator<ICoreService>('CoreService');
|
|
76
|
+
export interface ICoreService {
|
|
77
|
+
serviceBrand: undefined;
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Initially the cursor will not be visible until the first time the terminal
|
|
81
|
+
* is focused.
|
|
82
|
+
*/
|
|
83
|
+
isCursorInitialized: boolean;
|
|
84
|
+
isCursorHidden: boolean;
|
|
85
|
+
|
|
86
|
+
readonly modes: IModes;
|
|
87
|
+
readonly decPrivateModes: IDecPrivateModes;
|
|
88
|
+
|
|
89
|
+
readonly onData: Event<string>;
|
|
90
|
+
readonly onUserInput: Event<void>;
|
|
91
|
+
readonly onBinary: Event<string>;
|
|
92
|
+
readonly onRequestScrollToBottom: Event<void>;
|
|
93
|
+
|
|
94
|
+
reset(): void;
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Triggers the onData event in the public API.
|
|
98
|
+
* @param data The data that is being emitted.
|
|
99
|
+
* @param wasUserInput Whether the data originated from the user (as opposed to
|
|
100
|
+
* resulting from parsing incoming data). When true this will also:
|
|
101
|
+
* - Scroll to the bottom of the buffer if option scrollOnUserInput is true.
|
|
102
|
+
* - Fire the `onUserInput` event (so selection can be cleared).
|
|
103
|
+
*/
|
|
104
|
+
triggerDataEvent(data: string, wasUserInput?: boolean): void;
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Triggers the onBinary event in the public API.
|
|
108
|
+
* @param data The data that is being emitted.
|
|
109
|
+
*/
|
|
110
|
+
triggerBinaryEvent(data: string): void;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export const ICharsetService = createDecorator<ICharsetService>('CharsetService');
|
|
114
|
+
export interface ICharsetService {
|
|
115
|
+
serviceBrand: undefined;
|
|
116
|
+
|
|
117
|
+
charset: ICharset | undefined;
|
|
118
|
+
readonly glevel: number;
|
|
119
|
+
|
|
120
|
+
reset(): void;
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Set the G level of the terminal.
|
|
124
|
+
* @param g
|
|
125
|
+
*/
|
|
126
|
+
setgLevel(g: number): void;
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Set the charset for the given G level of the terminal.
|
|
130
|
+
* @param g
|
|
131
|
+
* @param charset
|
|
132
|
+
*/
|
|
133
|
+
setgCharset(g: number, charset: ICharset | undefined): void;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
export interface IServiceIdentifier<T> {
|
|
137
|
+
(...args: any[]): void;
|
|
138
|
+
type: T;
|
|
139
|
+
_id: string;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export interface IBrandedService {
|
|
143
|
+
serviceBrand: undefined;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
type GetLeadingNonServiceArgs<TArgs extends any[]> = TArgs extends [] ? []
|
|
147
|
+
: TArgs extends [...infer TFirst, infer TLast] ? TLast extends IBrandedService ? GetLeadingNonServiceArgs<TFirst> : TArgs
|
|
148
|
+
: never;
|
|
149
|
+
|
|
150
|
+
export const IInstantiationService = createDecorator<IInstantiationService>('InstantiationService');
|
|
151
|
+
export interface IInstantiationService {
|
|
152
|
+
serviceBrand: undefined;
|
|
153
|
+
|
|
154
|
+
setService<T>(id: IServiceIdentifier<T>, instance: T): void;
|
|
155
|
+
getService<T>(id: IServiceIdentifier<T>): T | undefined;
|
|
156
|
+
createInstance<Ctor extends new (...args: any[]) => any, R extends InstanceType<Ctor>>(t: Ctor, ...args: GetLeadingNonServiceArgs<ConstructorParameters<Ctor>>): R;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
export enum LogLevelEnum {
|
|
160
|
+
TRACE = 0,
|
|
161
|
+
DEBUG = 1,
|
|
162
|
+
INFO = 2,
|
|
163
|
+
WARN = 3,
|
|
164
|
+
ERROR = 4,
|
|
165
|
+
OFF = 5
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
export const ILogService = createDecorator<ILogService>('LogService');
|
|
169
|
+
export interface ILogService {
|
|
170
|
+
serviceBrand: undefined;
|
|
171
|
+
|
|
172
|
+
readonly logLevel: LogLevelEnum;
|
|
173
|
+
|
|
174
|
+
trace(message: any, ...optionalParams: any[]): void;
|
|
175
|
+
debug(message: any, ...optionalParams: any[]): void;
|
|
176
|
+
info(message: any, ...optionalParams: any[]): void;
|
|
177
|
+
warn(message: any, ...optionalParams: any[]): void;
|
|
178
|
+
error(message: any, ...optionalParams: any[]): void;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
export const IOptionsService = createDecorator<IOptionsService>('OptionsService');
|
|
182
|
+
export interface IOptionsService {
|
|
183
|
+
serviceBrand: undefined;
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Read only access to the raw options object, this is an internal-only fast path for accessing
|
|
187
|
+
* single options without any validation as we trust TypeScript to enforce correct usage
|
|
188
|
+
* internally.
|
|
189
|
+
*/
|
|
190
|
+
readonly rawOptions: Required<ITerminalOptions>;
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Options as exposed through the public API, this property uses getters and setters with
|
|
194
|
+
* validation which makes it safer but slower. {@link rawOptions} should be used for pretty much
|
|
195
|
+
* all internal usage for performance reasons.
|
|
196
|
+
*/
|
|
197
|
+
readonly options: Required<ITerminalOptions>;
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Adds an event listener for when any option changes.
|
|
201
|
+
*/
|
|
202
|
+
readonly onOptionChange: Event<keyof ITerminalOptions>;
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Adds an event listener for when a specific option changes, this is a convenience method that is
|
|
206
|
+
* preferred over {@link onOptionChange} when only a single option is being listened to.
|
|
207
|
+
*/
|
|
208
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
209
|
+
onSpecificOptionChange<T extends keyof ITerminalOptions>(key: T, listener: (arg1: Required<ITerminalOptions>[T]) => any): IDisposable;
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Adds an event listener for when a set of specific options change, this is a convenience method
|
|
213
|
+
* that is preferred over {@link onOptionChange} when multiple options are being listened to and
|
|
214
|
+
* handled the same way.
|
|
215
|
+
*/
|
|
216
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
217
|
+
onMultipleOptionChange(keys: (keyof ITerminalOptions)[], listener: () => any): IDisposable;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
export type FontWeight = 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | number;
|
|
221
|
+
export type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'off';
|
|
222
|
+
|
|
223
|
+
export interface ITerminalOptions {
|
|
224
|
+
allowProposedApi?: boolean;
|
|
225
|
+
allowTransparency?: boolean;
|
|
226
|
+
altClickMovesCursor?: boolean;
|
|
227
|
+
cols?: number;
|
|
228
|
+
convertEol?: boolean;
|
|
229
|
+
cursorBlink?: boolean;
|
|
230
|
+
cursorStyle?: CursorStyle;
|
|
231
|
+
cursorWidth?: number;
|
|
232
|
+
cursorInactiveStyle?: CursorInactiveStyle;
|
|
233
|
+
customGlyphs?: boolean;
|
|
234
|
+
disableStdin?: boolean;
|
|
235
|
+
documentOverride?: any | null;
|
|
236
|
+
drawBoldTextInBrightColors?: boolean;
|
|
237
|
+
/** @deprecated No longer supported */
|
|
238
|
+
fastScrollModifier?: 'none' | 'alt' | 'ctrl' | 'shift';
|
|
239
|
+
fastScrollSensitivity?: number;
|
|
240
|
+
fontSize?: number;
|
|
241
|
+
fontFamily?: string;
|
|
242
|
+
fontWeight?: FontWeight;
|
|
243
|
+
fontWeightBold?: FontWeight;
|
|
244
|
+
ignoreBracketedPasteMode?: boolean;
|
|
245
|
+
letterSpacing?: number;
|
|
246
|
+
lineHeight?: number;
|
|
247
|
+
linkHandler?: ILinkHandler | null;
|
|
248
|
+
logLevel?: LogLevel;
|
|
249
|
+
logger?: ILogger | null;
|
|
250
|
+
macOptionIsMeta?: boolean;
|
|
251
|
+
macOptionClickForcesSelection?: boolean;
|
|
252
|
+
minimumContrastRatio?: number;
|
|
253
|
+
reflowCursorLine?: boolean;
|
|
254
|
+
rescaleOverlappingGlyphs?: boolean;
|
|
255
|
+
rightClickSelectsWord?: boolean;
|
|
256
|
+
rows?: number;
|
|
257
|
+
screenReaderMode?: boolean;
|
|
258
|
+
scrollback?: number;
|
|
259
|
+
scrollOnUserInput?: boolean;
|
|
260
|
+
scrollSensitivity?: number;
|
|
261
|
+
smoothScrollDuration?: number;
|
|
262
|
+
tabStopWidth?: number;
|
|
263
|
+
theme?: ITheme;
|
|
264
|
+
windowsMode?: boolean;
|
|
265
|
+
windowsPty?: IWindowsPty;
|
|
266
|
+
windowOptions?: IWindowOptions;
|
|
267
|
+
wordSeparator?: string;
|
|
268
|
+
overviewRuler?: IOverviewRulerOptions;
|
|
269
|
+
scrollOnEraseInDisplay?: boolean;
|
|
270
|
+
|
|
271
|
+
[key: string]: any;
|
|
272
|
+
cancelEvents: boolean;
|
|
273
|
+
termName: string;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
export interface ITheme {
|
|
277
|
+
foreground?: string;
|
|
278
|
+
background?: string;
|
|
279
|
+
cursor?: string;
|
|
280
|
+
cursorAccent?: string;
|
|
281
|
+
selectionForeground?: string;
|
|
282
|
+
selectionBackground?: string;
|
|
283
|
+
selectionInactiveBackground?: string;
|
|
284
|
+
scrollbarSliderBackground?: string;
|
|
285
|
+
scrollbarSliderHoverBackground?: string;
|
|
286
|
+
scrollbarSliderActiveBackground?: string;
|
|
287
|
+
overviewRulerBorder?: string;
|
|
288
|
+
black?: string;
|
|
289
|
+
red?: string;
|
|
290
|
+
green?: string;
|
|
291
|
+
yellow?: string;
|
|
292
|
+
blue?: string;
|
|
293
|
+
magenta?: string;
|
|
294
|
+
cyan?: string;
|
|
295
|
+
white?: string;
|
|
296
|
+
brightBlack?: string;
|
|
297
|
+
brightRed?: string;
|
|
298
|
+
brightGreen?: string;
|
|
299
|
+
brightYellow?: string;
|
|
300
|
+
brightBlue?: string;
|
|
301
|
+
brightMagenta?: string;
|
|
302
|
+
brightCyan?: string;
|
|
303
|
+
brightWhite?: string;
|
|
304
|
+
extendedAnsi?: string[];
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
export const IOscLinkService = createDecorator<IOscLinkService>('OscLinkService');
|
|
308
|
+
export interface IOscLinkService {
|
|
309
|
+
serviceBrand: undefined;
|
|
310
|
+
/**
|
|
311
|
+
* Registers a link to the service, returning the link ID. The link data is managed by this
|
|
312
|
+
* service and will be freed when this current cursor position is trimmed off the buffer.
|
|
313
|
+
*/
|
|
314
|
+
registerLink(linkData: IOscLinkData): number;
|
|
315
|
+
/**
|
|
316
|
+
* Adds a line to a link if needed.
|
|
317
|
+
*/
|
|
318
|
+
addLineToLink(linkId: number, y: number): void;
|
|
319
|
+
/** Get the link data associated with a link ID. */
|
|
320
|
+
getLinkData(linkId: number): IOscLinkData | undefined;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/*
|
|
324
|
+
* Width and Grapheme_Cluster_Break properties of a character as a bit mask.
|
|
325
|
+
*
|
|
326
|
+
* bit 0: shouldJoin - should combine with preceding character.
|
|
327
|
+
* bit 1..2: wcwidth - see UnicodeCharWidth.
|
|
328
|
+
* bit 3..31: class of character (currently only 4 bits are used).
|
|
329
|
+
* This is used to determined grapheme clustering - i.e. which codepoints
|
|
330
|
+
* are to be combined into a single compound character.
|
|
331
|
+
*
|
|
332
|
+
* Use the UnicodeService static function createPropertyValue to create a
|
|
333
|
+
* UnicodeCharProperties; use extractShouldJoin, extractWidth, and
|
|
334
|
+
* extractCharKind to extract the components.
|
|
335
|
+
*/
|
|
336
|
+
export type UnicodeCharProperties = number;
|
|
337
|
+
|
|
338
|
+
/**
|
|
339
|
+
* Width in columns of a character.
|
|
340
|
+
* In a CJK context, "half-width" characters (such as Latin) are width 1,
|
|
341
|
+
* while "full-width" characters (such as Kanji) are 2 columns wide.
|
|
342
|
+
* Combining characters (such as accents) are width 0.
|
|
343
|
+
*/
|
|
344
|
+
export type UnicodeCharWidth = 0 | 1 | 2;
|
|
345
|
+
|
|
346
|
+
export const IUnicodeService = createDecorator<IUnicodeService>('UnicodeService');
|
|
347
|
+
export interface IUnicodeService {
|
|
348
|
+
serviceBrand: undefined;
|
|
349
|
+
/** Register an Unicode version provider. */
|
|
350
|
+
register(provider: IUnicodeVersionProvider): void;
|
|
351
|
+
/** Registered Unicode versions. */
|
|
352
|
+
readonly versions: string[];
|
|
353
|
+
/** Currently active version. */
|
|
354
|
+
activeVersion: string;
|
|
355
|
+
/** Event triggered, when activate version changed. */
|
|
356
|
+
readonly onChange: Event<string>;
|
|
357
|
+
|
|
358
|
+
/**
|
|
359
|
+
* Unicode version dependent
|
|
360
|
+
*/
|
|
361
|
+
wcwidth(codepoint: number): UnicodeCharWidth;
|
|
362
|
+
getStringCellWidth(s: string): number;
|
|
363
|
+
/**
|
|
364
|
+
* Return character width and type for grapheme clustering.
|
|
365
|
+
* If preceding != 0, it is the return code from the previous character;
|
|
366
|
+
* in that case the result specifies if the characters should be joined.
|
|
367
|
+
*/
|
|
368
|
+
charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
export interface IUnicodeVersionProvider {
|
|
372
|
+
readonly version: string;
|
|
373
|
+
wcwidth(ucs: number): UnicodeCharWidth;
|
|
374
|
+
charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
export const IDecorationService = createDecorator<IDecorationService>('DecorationService');
|
|
378
|
+
export interface IDecorationService extends IDisposable {
|
|
379
|
+
serviceBrand: undefined;
|
|
380
|
+
readonly decorations: IterableIterator<IInternalDecoration>;
|
|
381
|
+
readonly onDecorationRegistered: Event<IInternalDecoration>;
|
|
382
|
+
readonly onDecorationRemoved: Event<IInternalDecoration>;
|
|
383
|
+
registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined;
|
|
384
|
+
reset(): void;
|
|
385
|
+
/**
|
|
386
|
+
* Trigger a callback over the decoration at a cell (in no particular order). This uses a callback
|
|
387
|
+
* instead of an iterator as it's typically used in hot code paths.
|
|
388
|
+
*/
|
|
389
|
+
forEachDecorationAtCell(x: number, line: number, layer: 'bottom' | 'top' | undefined, callback: (decoration: IInternalDecoration) => void): void;
|
|
390
|
+
}
|
|
391
|
+
export interface IInternalDecoration extends IDecoration {
|
|
392
|
+
readonly options: IDecorationOptions;
|
|
393
|
+
readonly backgroundColorRGB: IColor | undefined;
|
|
394
|
+
readonly foregroundColorRGB: IColor | undefined;
|
|
395
|
+
readonly onRenderEmitter: Emitter<HTMLElement>;
|
|
396
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2019 The xterm.js authors. All rights reserved.
|
|
3
|
+
* @license MIT
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { UnicodeV6 } from 'common/input/UnicodeV6';
|
|
7
|
+
import { IUnicodeService, IUnicodeVersionProvider, UnicodeCharProperties, UnicodeCharWidth } from 'common/services/Services';
|
|
8
|
+
import { Emitter } from 'vs/base/common/event';
|
|
9
|
+
|
|
10
|
+
export class UnicodeService implements IUnicodeService {
|
|
11
|
+
public serviceBrand: any;
|
|
12
|
+
|
|
13
|
+
private _providers: {[key: string]: IUnicodeVersionProvider} = Object.create(null);
|
|
14
|
+
private _active: string = '';
|
|
15
|
+
private _activeProvider: IUnicodeVersionProvider;
|
|
16
|
+
|
|
17
|
+
private readonly _onChange = new Emitter<string>();
|
|
18
|
+
public readonly onChange = this._onChange.event;
|
|
19
|
+
|
|
20
|
+
public static extractShouldJoin(value: UnicodeCharProperties): boolean {
|
|
21
|
+
return (value & 1) !== 0;
|
|
22
|
+
}
|
|
23
|
+
public static extractWidth(value: UnicodeCharProperties): UnicodeCharWidth {
|
|
24
|
+
return ((value >> 1) & 0x3) as UnicodeCharWidth;
|
|
25
|
+
}
|
|
26
|
+
public static extractCharKind(value: UnicodeCharProperties): number {
|
|
27
|
+
return value >> 3;
|
|
28
|
+
}
|
|
29
|
+
public static createPropertyValue(state: number, width: number, shouldJoin: boolean = false): UnicodeCharProperties {
|
|
30
|
+
return ((state & 0xffffff) << 3) | ((width & 3) << 1) | (shouldJoin?1:0);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
constructor() {
|
|
34
|
+
const defaultProvider = new UnicodeV6();
|
|
35
|
+
this.register(defaultProvider);
|
|
36
|
+
this._active = defaultProvider.version;
|
|
37
|
+
this._activeProvider = defaultProvider;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
public dispose(): void {
|
|
41
|
+
this._onChange.dispose();
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
public get versions(): string[] {
|
|
45
|
+
return Object.keys(this._providers);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
public get activeVersion(): string {
|
|
49
|
+
return this._active;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
public set activeVersion(version: string) {
|
|
53
|
+
if (!this._providers[version]) {
|
|
54
|
+
throw new Error(`unknown Unicode version "${version}"`);
|
|
55
|
+
}
|
|
56
|
+
this._active = version;
|
|
57
|
+
this._activeProvider = this._providers[version];
|
|
58
|
+
this._onChange.fire(version);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
public register(provider: IUnicodeVersionProvider): void {
|
|
62
|
+
this._providers[provider.version] = provider;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Unicode version dependent interface.
|
|
67
|
+
*/
|
|
68
|
+
public wcwidth(num: number): UnicodeCharWidth {
|
|
69
|
+
return this._activeProvider.wcwidth(num);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
public getStringCellWidth(s: string): number {
|
|
73
|
+
let result = 0;
|
|
74
|
+
let precedingInfo = 0;
|
|
75
|
+
const length = s.length;
|
|
76
|
+
for (let i = 0; i < length; ++i) {
|
|
77
|
+
let code = s.charCodeAt(i);
|
|
78
|
+
// surrogate pair first
|
|
79
|
+
if (0xD800 <= code && code <= 0xDBFF) {
|
|
80
|
+
if (++i >= length) {
|
|
81
|
+
// this should not happen with strings retrieved from
|
|
82
|
+
// Buffer.translateToString as it converts from UTF-32
|
|
83
|
+
// and therefore always should contain the second part
|
|
84
|
+
// for any other string we still have to handle it somehow:
|
|
85
|
+
// simply treat the lonely surrogate first as a single char (UCS-2 behavior)
|
|
86
|
+
return result + this.wcwidth(code);
|
|
87
|
+
}
|
|
88
|
+
const second = s.charCodeAt(i);
|
|
89
|
+
// convert surrogate pair to high codepoint only for valid second part (UTF-16)
|
|
90
|
+
// otherwise treat them independently (UCS-2 behavior)
|
|
91
|
+
if (0xDC00 <= second && second <= 0xDFFF) {
|
|
92
|
+
code = (code - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;
|
|
93
|
+
} else {
|
|
94
|
+
result += this.wcwidth(second);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const currentInfo = this.charProperties(code, precedingInfo);
|
|
98
|
+
let chWidth = UnicodeService.extractWidth(currentInfo);
|
|
99
|
+
if (UnicodeService.extractShouldJoin(currentInfo)) {
|
|
100
|
+
chWidth -= UnicodeService.extractWidth(precedingInfo);
|
|
101
|
+
}
|
|
102
|
+
result += chWidth;
|
|
103
|
+
precedingInfo = currentInfo;
|
|
104
|
+
}
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
public charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties {
|
|
109
|
+
return this._activeProvider.charProperties(codepoint, preceding);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
|
|
6
|
+
import { CodeWindow, mainWindow } from 'vs/base/browser/window';
|
|
7
|
+
import { Emitter } from 'vs/base/common/event';
|
|
8
|
+
|
|
9
|
+
class WindowManager {
|
|
10
|
+
|
|
11
|
+
static readonly INSTANCE = new WindowManager();
|
|
12
|
+
|
|
13
|
+
// --- Zoom Level
|
|
14
|
+
|
|
15
|
+
private readonly mapWindowIdToZoomLevel = new Map<number, number>();
|
|
16
|
+
|
|
17
|
+
private readonly _onDidChangeZoomLevel = new Emitter<number>();
|
|
18
|
+
readonly onDidChangeZoomLevel = this._onDidChangeZoomLevel.event;
|
|
19
|
+
|
|
20
|
+
getZoomLevel(targetWindow: Window): number {
|
|
21
|
+
return this.mapWindowIdToZoomLevel.get(this.getWindowId(targetWindow)) ?? 0;
|
|
22
|
+
}
|
|
23
|
+
setZoomLevel(zoomLevel: number, targetWindow: Window): void {
|
|
24
|
+
if (this.getZoomLevel(targetWindow) === zoomLevel) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const targetWindowId = this.getWindowId(targetWindow);
|
|
29
|
+
this.mapWindowIdToZoomLevel.set(targetWindowId, zoomLevel);
|
|
30
|
+
this._onDidChangeZoomLevel.fire(targetWindowId);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// --- Zoom Factor
|
|
34
|
+
|
|
35
|
+
private readonly mapWindowIdToZoomFactor = new Map<number, number>();
|
|
36
|
+
|
|
37
|
+
getZoomFactor(targetWindow: Window): number {
|
|
38
|
+
return this.mapWindowIdToZoomFactor.get(this.getWindowId(targetWindow)) ?? 1;
|
|
39
|
+
}
|
|
40
|
+
setZoomFactor(zoomFactor: number, targetWindow: Window): void {
|
|
41
|
+
this.mapWindowIdToZoomFactor.set(this.getWindowId(targetWindow), zoomFactor);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// --- Fullscreen
|
|
45
|
+
|
|
46
|
+
private readonly _onDidChangeFullscreen = new Emitter<number>();
|
|
47
|
+
readonly onDidChangeFullscreen = this._onDidChangeFullscreen.event;
|
|
48
|
+
|
|
49
|
+
private readonly mapWindowIdToFullScreen = new Map<number, boolean>();
|
|
50
|
+
|
|
51
|
+
setFullscreen(fullscreen: boolean, targetWindow: Window): void {
|
|
52
|
+
if (this.isFullscreen(targetWindow) === fullscreen) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const windowId = this.getWindowId(targetWindow);
|
|
57
|
+
this.mapWindowIdToFullScreen.set(windowId, fullscreen);
|
|
58
|
+
this._onDidChangeFullscreen.fire(windowId);
|
|
59
|
+
}
|
|
60
|
+
isFullscreen(targetWindow: Window): boolean {
|
|
61
|
+
return !!this.mapWindowIdToFullScreen.get(this.getWindowId(targetWindow));
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
private getWindowId(targetWindow: Window): number {
|
|
65
|
+
return (targetWindow as CodeWindow).vscodeWindowId;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export function addMatchMediaChangeListener(targetWindow: Window, query: string | MediaQueryList, callback: (this: MediaQueryList, ev: MediaQueryListEvent) => any): void {
|
|
70
|
+
if (typeof query === 'string') {
|
|
71
|
+
query = targetWindow.matchMedia(query);
|
|
72
|
+
}
|
|
73
|
+
query.addEventListener('change', callback);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** A zoom index, e.g. 1, 2, 3 */
|
|
77
|
+
export function setZoomLevel(zoomLevel: number, targetWindow: Window): void {
|
|
78
|
+
WindowManager.INSTANCE.setZoomLevel(zoomLevel, targetWindow);
|
|
79
|
+
}
|
|
80
|
+
export function getZoomLevel(targetWindow: Window): number {
|
|
81
|
+
return WindowManager.INSTANCE.getZoomLevel(targetWindow);
|
|
82
|
+
}
|
|
83
|
+
export const onDidChangeZoomLevel = WindowManager.INSTANCE.onDidChangeZoomLevel;
|
|
84
|
+
|
|
85
|
+
/** The zoom scale for an index, e.g. 1, 1.2, 1.4 */
|
|
86
|
+
export function getZoomFactor(targetWindow: Window): number {
|
|
87
|
+
return WindowManager.INSTANCE.getZoomFactor(targetWindow);
|
|
88
|
+
}
|
|
89
|
+
export function setZoomFactor(zoomFactor: number, targetWindow: Window): void {
|
|
90
|
+
WindowManager.INSTANCE.setZoomFactor(zoomFactor, targetWindow);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export function setFullscreen(fullscreen: boolean, targetWindow: Window): void {
|
|
94
|
+
WindowManager.INSTANCE.setFullscreen(fullscreen, targetWindow);
|
|
95
|
+
}
|
|
96
|
+
export function isFullscreen(targetWindow: Window): boolean {
|
|
97
|
+
return WindowManager.INSTANCE.isFullscreen(targetWindow);
|
|
98
|
+
}
|
|
99
|
+
export const onDidChangeFullscreen = WindowManager.INSTANCE.onDidChangeFullscreen;
|
|
100
|
+
|
|
101
|
+
const userAgent = typeof navigator === 'object' ? navigator.userAgent : '';
|
|
102
|
+
|
|
103
|
+
export const isFirefox = (userAgent.indexOf('Firefox') >= 0);
|
|
104
|
+
export const isWebKit = (userAgent.indexOf('AppleWebKit') >= 0);
|
|
105
|
+
export const isChrome = (userAgent.indexOf('Chrome') >= 0);
|
|
106
|
+
export const isSafari = (!isChrome && (userAgent.indexOf('Safari') >= 0));
|
|
107
|
+
export const isWebkitWebView = (!isChrome && !isSafari && isWebKit);
|
|
108
|
+
export const isElectron = (userAgent.indexOf('Electron/') >= 0);
|
|
109
|
+
export const isAndroid = (userAgent.indexOf('Android') >= 0);
|
|
110
|
+
|
|
111
|
+
let standalone = false;
|
|
112
|
+
if (typeof mainWindow.matchMedia === 'function') {
|
|
113
|
+
const standaloneMatchMedia = mainWindow.matchMedia('(display-mode: standalone) or (display-mode: window-controls-overlay)');
|
|
114
|
+
const fullScreenMatchMedia = mainWindow.matchMedia('(display-mode: fullscreen)');
|
|
115
|
+
standalone = standaloneMatchMedia.matches;
|
|
116
|
+
addMatchMediaChangeListener(mainWindow, standaloneMatchMedia, ({ matches }) => {
|
|
117
|
+
// entering fullscreen would change standaloneMatchMedia.matches to false
|
|
118
|
+
// if standalone is true (running as PWA) and entering fullscreen, skip this change
|
|
119
|
+
if (standalone && fullScreenMatchMedia.matches) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
// otherwise update standalone (browser to PWA or PWA to browser)
|
|
123
|
+
standalone = matches;
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
export function isStandalone(): boolean {
|
|
127
|
+
return standalone;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Visible means that the feature is enabled, not necessarily being rendered
|
|
131
|
+
// e.g. visible is true even in fullscreen mode where the controls are hidden
|
|
132
|
+
// See docs at https://developer.mozilla.org/en-US/docs/Web/API/WindowControlsOverlay/visible
|
|
133
|
+
export function isWCOEnabled(): boolean {
|
|
134
|
+
return (navigator as any)?.windowControlsOverlay?.visible;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// Returns the bounding rect of the titlebar area if it is supported and defined
|
|
138
|
+
// See docs at https://developer.mozilla.org/en-US/docs/Web/API/WindowControlsOverlay/getTitlebarAreaRect
|
|
139
|
+
export function getWCOBoundingRect(): DOMRect | undefined {
|
|
140
|
+
return (navigator as any)?.windowControlsOverlay?.getTitlebarAreaRect();
|
|
141
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
|
|
6
|
+
import * as browser from 'vs/base/browser/browser';
|
|
7
|
+
import { mainWindow } from 'vs/base/browser/window';
|
|
8
|
+
import * as platform from 'vs/base/common/platform';
|
|
9
|
+
|
|
10
|
+
export const enum KeyboardSupport {
|
|
11
|
+
Always,
|
|
12
|
+
FullScreen,
|
|
13
|
+
None
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const safeNavigator = typeof navigator === 'object' ? navigator : {} as { [key: string]: any };
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Browser feature we can support in current platform, browser and environment.
|
|
20
|
+
*/
|
|
21
|
+
export const BrowserFeatures = {
|
|
22
|
+
clipboard: {
|
|
23
|
+
writeText: (
|
|
24
|
+
platform.isNative
|
|
25
|
+
|| (document.queryCommandSupported && document.queryCommandSupported('copy'))
|
|
26
|
+
|| !!(safeNavigator && safeNavigator.clipboard && safeNavigator.clipboard.writeText)
|
|
27
|
+
),
|
|
28
|
+
readText: (
|
|
29
|
+
platform.isNative
|
|
30
|
+
|| !!(safeNavigator && safeNavigator.clipboard && safeNavigator.clipboard.readText)
|
|
31
|
+
)
|
|
32
|
+
},
|
|
33
|
+
keyboard: (() => {
|
|
34
|
+
if (platform.isNative || browser.isStandalone()) {
|
|
35
|
+
return KeyboardSupport.Always;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if ((<any>safeNavigator).keyboard || browser.isSafari) {
|
|
39
|
+
return KeyboardSupport.FullScreen;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return KeyboardSupport.None;
|
|
43
|
+
})(),
|
|
44
|
+
|
|
45
|
+
// 'ontouchstart' in window always evaluates to true with typescript's modern typings. This causes `window` to be
|
|
46
|
+
// `never` later in `window.navigator`. That's why we need the explicit `window as Window` cast
|
|
47
|
+
touch: 'ontouchstart' in mainWindow || safeNavigator.maxTouchPoints > 0,
|
|
48
|
+
pointerEvents: mainWindow.PointerEvent && ('ontouchstart' in mainWindow || navigator.maxTouchPoints > 0)
|
|
49
|
+
};
|