groove-dev 0.16.1 → 0.16.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/node_modules/@groove-dev/daemon/src/index.js +25 -7
  2. package/node_modules/@groove-dev/daemon/src/terminal-pty.js +141 -0
  3. package/node_modules/@groove-dev/gui/dist/assets/{index-Gfb8Zxy9.css → index-BhjOFLBc.css} +32 -1
  4. package/node_modules/@groove-dev/gui/dist/assets/index-CFeltwTB.js +153 -0
  5. package/node_modules/@groove-dev/gui/dist/index.html +2 -2
  6. package/node_modules/@groove-dev/gui/package.json +3 -0
  7. package/node_modules/@groove-dev/gui/src/components/EditorTabs.jsx +3 -3
  8. package/node_modules/@groove-dev/gui/src/components/FileTree.jsx +18 -22
  9. package/node_modules/@groove-dev/gui/src/components/Terminal.jsx +154 -0
  10. package/node_modules/@groove-dev/gui/src/views/FileEditor.jsx +100 -39
  11. package/node_modules/@xterm/addon-fit/LICENSE +19 -0
  12. package/node_modules/@xterm/addon-fit/README.md +24 -0
  13. package/node_modules/@xterm/addon-fit/lib/addon-fit.js +2 -0
  14. package/node_modules/@xterm/addon-fit/lib/addon-fit.js.map +1 -0
  15. package/node_modules/@xterm/addon-fit/lib/addon-fit.mjs +18 -0
  16. package/node_modules/@xterm/addon-fit/lib/addon-fit.mjs.map +7 -0
  17. package/node_modules/@xterm/addon-fit/package.json +26 -0
  18. package/node_modules/@xterm/addon-fit/src/FitAddon.ts +92 -0
  19. package/node_modules/@xterm/addon-fit/typings/addon-fit.d.ts +55 -0
  20. package/node_modules/@xterm/addon-web-links/LICENSE +19 -0
  21. package/node_modules/@xterm/addon-web-links/README.md +21 -0
  22. package/node_modules/@xterm/addon-web-links/lib/addon-web-links.js +2 -0
  23. package/node_modules/@xterm/addon-web-links/lib/addon-web-links.js.map +1 -0
  24. package/node_modules/@xterm/addon-web-links/lib/addon-web-links.mjs +18 -0
  25. package/node_modules/@xterm/addon-web-links/lib/addon-web-links.mjs.map +7 -0
  26. package/node_modules/@xterm/addon-web-links/package.json +26 -0
  27. package/node_modules/@xterm/addon-web-links/src/WebLinkProvider.ts +199 -0
  28. package/node_modules/@xterm/addon-web-links/src/WebLinksAddon.ts +58 -0
  29. package/node_modules/@xterm/addon-web-links/typings/addon-web-links.d.ts +57 -0
  30. package/node_modules/@xterm/xterm/LICENSE +21 -0
  31. package/node_modules/@xterm/xterm/README.md +243 -0
  32. package/node_modules/@xterm/xterm/css/xterm.css +285 -0
  33. package/node_modules/@xterm/xterm/lib/xterm.js +2 -0
  34. package/node_modules/@xterm/xterm/lib/xterm.js.map +1 -0
  35. package/node_modules/@xterm/xterm/lib/xterm.mjs +53 -0
  36. package/node_modules/@xterm/xterm/lib/xterm.mjs.map +7 -0
  37. package/node_modules/@xterm/xterm/package.json +111 -0
  38. package/node_modules/@xterm/xterm/src/browser/AccessibilityManager.ts +435 -0
  39. package/node_modules/@xterm/xterm/src/browser/Clipboard.ts +93 -0
  40. package/node_modules/@xterm/xterm/src/browser/ColorContrastCache.ts +34 -0
  41. package/node_modules/@xterm/xterm/src/browser/CoreBrowserTerminal.ts +1339 -0
  42. package/node_modules/@xterm/xterm/src/browser/Linkifier.ts +403 -0
  43. package/node_modules/@xterm/xterm/src/browser/LocalizableStrings.ts +23 -0
  44. package/node_modules/@xterm/xterm/src/browser/OscLinkProvider.ts +129 -0
  45. package/node_modules/@xterm/xterm/src/browser/RenderDebouncer.ts +84 -0
  46. package/node_modules/@xterm/xterm/src/browser/TimeBasedDebouncer.ts +86 -0
  47. package/node_modules/@xterm/xterm/src/browser/Types.ts +226 -0
  48. package/node_modules/@xterm/xterm/src/browser/Viewport.ts +192 -0
  49. package/node_modules/@xterm/xterm/src/browser/decorations/BufferDecorationRenderer.ts +139 -0
  50. package/node_modules/@xterm/xterm/src/browser/decorations/ColorZoneStore.ts +117 -0
  51. package/node_modules/@xterm/xterm/src/browser/decorations/OverviewRulerRenderer.ts +214 -0
  52. package/node_modules/@xterm/xterm/src/browser/input/CompositionHelper.ts +248 -0
  53. package/node_modules/@xterm/xterm/src/browser/input/Mouse.ts +54 -0
  54. package/node_modules/@xterm/xterm/src/browser/input/MoveToCell.ts +251 -0
  55. package/node_modules/@xterm/xterm/src/browser/public/Terminal.ts +275 -0
  56. package/node_modules/@xterm/xterm/src/browser/renderer/dom/DomRenderer.ts +542 -0
  57. package/node_modules/@xterm/xterm/src/browser/renderer/dom/DomRendererRowFactory.ts +546 -0
  58. package/node_modules/@xterm/xterm/src/browser/renderer/dom/WidthCache.ts +167 -0
  59. package/node_modules/@xterm/xterm/src/browser/renderer/shared/Constants.ts +6 -0
  60. package/node_modules/@xterm/xterm/src/browser/renderer/shared/RendererUtils.ts +95 -0
  61. package/node_modules/@xterm/xterm/src/browser/renderer/shared/SelectionRenderModel.ts +93 -0
  62. package/node_modules/@xterm/xterm/src/browser/renderer/shared/Types.ts +84 -0
  63. package/node_modules/@xterm/xterm/src/browser/selection/SelectionModel.ts +144 -0
  64. package/node_modules/@xterm/xterm/src/browser/selection/Types.ts +15 -0
  65. package/node_modules/@xterm/xterm/src/browser/services/CharSizeService.ts +127 -0
  66. package/node_modules/@xterm/xterm/src/browser/services/CharacterJoinerService.ts +339 -0
  67. package/node_modules/@xterm/xterm/src/browser/services/CoreBrowserService.ts +137 -0
  68. package/node_modules/@xterm/xterm/src/browser/services/LinkProviderService.ts +28 -0
  69. package/node_modules/@xterm/xterm/src/browser/services/MouseService.ts +46 -0
  70. package/node_modules/@xterm/xterm/src/browser/services/RenderService.ts +376 -0
  71. package/node_modules/@xterm/xterm/src/browser/services/SelectionService.ts +1039 -0
  72. package/node_modules/@xterm/xterm/src/browser/services/Services.ts +158 -0
  73. package/node_modules/@xterm/xterm/src/browser/services/ThemeService.ts +198 -0
  74. package/node_modules/@xterm/xterm/src/browser/shared/Constants.ts +8 -0
  75. package/node_modules/@xterm/xterm/src/common/CircularList.ts +241 -0
  76. package/node_modules/@xterm/xterm/src/common/Clone.ts +23 -0
  77. package/node_modules/@xterm/xterm/src/common/Color.ts +376 -0
  78. package/node_modules/@xterm/xterm/src/common/CoreTerminal.ts +283 -0
  79. package/node_modules/@xterm/xterm/src/common/InputHandler.ts +3495 -0
  80. package/node_modules/@xterm/xterm/src/common/MultiKeyMap.ts +42 -0
  81. package/node_modules/@xterm/xterm/src/common/Platform.ts +44 -0
  82. package/node_modules/@xterm/xterm/src/common/SortedList.ts +194 -0
  83. package/node_modules/@xterm/xterm/src/common/TaskQueue.ts +166 -0
  84. package/node_modules/@xterm/xterm/src/common/TypedArrayUtils.ts +17 -0
  85. package/node_modules/@xterm/xterm/src/common/Types.ts +552 -0
  86. package/node_modules/@xterm/xterm/src/common/WindowsMode.ts +27 -0
  87. package/node_modules/@xterm/xterm/src/common/buffer/AttributeData.ts +211 -0
  88. package/node_modules/@xterm/xterm/src/common/buffer/Buffer.ts +662 -0
  89. package/node_modules/@xterm/xterm/src/common/buffer/BufferLine.ts +551 -0
  90. package/node_modules/@xterm/xterm/src/common/buffer/BufferRange.ts +13 -0
  91. package/node_modules/@xterm/xterm/src/common/buffer/BufferReflow.ts +226 -0
  92. package/node_modules/@xterm/xterm/src/common/buffer/BufferSet.ts +134 -0
  93. package/node_modules/@xterm/xterm/src/common/buffer/CellData.ts +94 -0
  94. package/node_modules/@xterm/xterm/src/common/buffer/Constants.ts +157 -0
  95. package/node_modules/@xterm/xterm/src/common/buffer/Marker.ts +43 -0
  96. package/node_modules/@xterm/xterm/src/common/buffer/Types.ts +52 -0
  97. package/node_modules/@xterm/xterm/src/common/data/Charsets.ts +256 -0
  98. package/node_modules/@xterm/xterm/src/common/data/EscapeSequences.ts +153 -0
  99. package/node_modules/@xterm/xterm/src/common/input/Keyboard.ts +373 -0
  100. package/node_modules/@xterm/xterm/src/common/input/TextDecoder.ts +346 -0
  101. package/node_modules/@xterm/xterm/src/common/input/UnicodeV6.ts +145 -0
  102. package/node_modules/@xterm/xterm/src/common/input/WriteBuffer.ts +247 -0
  103. package/node_modules/@xterm/xterm/src/common/input/XParseColor.ts +80 -0
  104. package/node_modules/@xterm/xterm/src/common/parser/Constants.ts +58 -0
  105. package/node_modules/@xterm/xterm/src/common/parser/DcsParser.ts +192 -0
  106. package/node_modules/@xterm/xterm/src/common/parser/EscapeSequenceParser.ts +792 -0
  107. package/node_modules/@xterm/xterm/src/common/parser/OscParser.ts +238 -0
  108. package/node_modules/@xterm/xterm/src/common/parser/Params.ts +229 -0
  109. package/node_modules/@xterm/xterm/src/common/parser/Types.ts +275 -0
  110. package/node_modules/@xterm/xterm/src/common/public/AddonManager.ts +53 -0
  111. package/node_modules/@xterm/xterm/src/common/public/BufferApiView.ts +35 -0
  112. package/node_modules/@xterm/xterm/src/common/public/BufferLineApiView.ts +29 -0
  113. package/node_modules/@xterm/xterm/src/common/public/BufferNamespaceApi.ts +36 -0
  114. package/node_modules/@xterm/xterm/src/common/public/ParserApi.ts +37 -0
  115. package/node_modules/@xterm/xterm/src/common/public/UnicodeApi.ts +27 -0
  116. package/node_modules/@xterm/xterm/src/common/services/BufferService.ts +154 -0
  117. package/node_modules/@xterm/xterm/src/common/services/CharsetService.ts +34 -0
  118. package/node_modules/@xterm/xterm/src/common/services/CoreMouseService.ts +365 -0
  119. package/node_modules/@xterm/xterm/src/common/services/CoreService.ts +92 -0
  120. package/node_modules/@xterm/xterm/src/common/services/DecorationService.ts +140 -0
  121. package/node_modules/@xterm/xterm/src/common/services/InstantiationService.ts +85 -0
  122. package/node_modules/@xterm/xterm/src/common/services/LogService.ts +124 -0
  123. package/node_modules/@xterm/xterm/src/common/services/OptionsService.ts +212 -0
  124. package/node_modules/@xterm/xterm/src/common/services/OscLinkService.ts +115 -0
  125. package/node_modules/@xterm/xterm/src/common/services/ServiceRegistry.ts +49 -0
  126. package/node_modules/@xterm/xterm/src/common/services/Services.ts +396 -0
  127. package/node_modules/@xterm/xterm/src/common/services/UnicodeService.ts +111 -0
  128. package/node_modules/@xterm/xterm/src/vs/base/browser/browser.ts +141 -0
  129. package/node_modules/@xterm/xterm/src/vs/base/browser/canIUse.ts +49 -0
  130. package/node_modules/@xterm/xterm/src/vs/base/browser/dom.ts +2369 -0
  131. package/node_modules/@xterm/xterm/src/vs/base/browser/fastDomNode.ts +316 -0
  132. package/node_modules/@xterm/xterm/src/vs/base/browser/globalPointerMoveMonitor.ts +112 -0
  133. package/node_modules/@xterm/xterm/src/vs/base/browser/iframe.ts +135 -0
  134. package/node_modules/@xterm/xterm/src/vs/base/browser/keyboardEvent.ts +213 -0
  135. package/node_modules/@xterm/xterm/src/vs/base/browser/mouseEvent.ts +229 -0
  136. package/node_modules/@xterm/xterm/src/vs/base/browser/touch.ts +372 -0
  137. package/node_modules/@xterm/xterm/src/vs/base/browser/ui/scrollbar/abstractScrollbar.ts +303 -0
  138. package/node_modules/@xterm/xterm/src/vs/base/browser/ui/scrollbar/horizontalScrollbar.ts +114 -0
  139. package/node_modules/@xterm/xterm/src/vs/base/browser/ui/scrollbar/scrollableElement.ts +720 -0
  140. package/node_modules/@xterm/xterm/src/vs/base/browser/ui/scrollbar/scrollableElementOptions.ts +165 -0
  141. package/node_modules/@xterm/xterm/src/vs/base/browser/ui/scrollbar/scrollbarArrow.ts +114 -0
  142. package/node_modules/@xterm/xterm/src/vs/base/browser/ui/scrollbar/scrollbarState.ts +243 -0
  143. package/node_modules/@xterm/xterm/src/vs/base/browser/ui/scrollbar/scrollbarVisibilityController.ts +118 -0
  144. package/node_modules/@xterm/xterm/src/vs/base/browser/ui/scrollbar/verticalScrollbar.ts +116 -0
  145. package/node_modules/@xterm/xterm/src/vs/base/browser/ui/widget.ts +57 -0
  146. package/node_modules/@xterm/xterm/src/vs/base/browser/window.ts +14 -0
  147. package/node_modules/@xterm/xterm/src/vs/base/common/arrays.ts +887 -0
  148. package/node_modules/@xterm/xterm/src/vs/base/common/arraysFind.ts +202 -0
  149. package/node_modules/@xterm/xterm/src/vs/base/common/assert.ts +71 -0
  150. package/node_modules/@xterm/xterm/src/vs/base/common/async.ts +1992 -0
  151. package/node_modules/@xterm/xterm/src/vs/base/common/cancellation.ts +148 -0
  152. package/node_modules/@xterm/xterm/src/vs/base/common/charCode.ts +450 -0
  153. package/node_modules/@xterm/xterm/src/vs/base/common/collections.ts +140 -0
  154. package/node_modules/@xterm/xterm/src/vs/base/common/decorators.ts +130 -0
  155. package/node_modules/@xterm/xterm/src/vs/base/common/equals.ts +146 -0
  156. package/node_modules/@xterm/xterm/src/vs/base/common/errors.ts +303 -0
  157. package/node_modules/@xterm/xterm/src/vs/base/common/event.ts +1778 -0
  158. package/node_modules/@xterm/xterm/src/vs/base/common/functional.ts +32 -0
  159. package/node_modules/@xterm/xterm/src/vs/base/common/hash.ts +316 -0
  160. package/node_modules/@xterm/xterm/src/vs/base/common/iterator.ts +159 -0
  161. package/node_modules/@xterm/xterm/src/vs/base/common/keyCodes.ts +526 -0
  162. package/node_modules/@xterm/xterm/src/vs/base/common/keybindings.ts +284 -0
  163. package/node_modules/@xterm/xterm/src/vs/base/common/lazy.ts +47 -0
  164. package/node_modules/@xterm/xterm/src/vs/base/common/lifecycle.ts +801 -0
  165. package/node_modules/@xterm/xterm/src/vs/base/common/linkedList.ts +142 -0
  166. package/node_modules/@xterm/xterm/src/vs/base/common/map.ts +202 -0
  167. package/node_modules/@xterm/xterm/src/vs/base/common/numbers.ts +98 -0
  168. package/node_modules/@xterm/xterm/src/vs/base/common/observable.ts +76 -0
  169. package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/api.ts +31 -0
  170. package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/autorun.ts +281 -0
  171. package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/base.ts +489 -0
  172. package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/debugName.ts +145 -0
  173. package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/derived.ts +428 -0
  174. package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/lazyObservableValue.ts +146 -0
  175. package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/logging.ts +328 -0
  176. package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/promise.ts +209 -0
  177. package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/utils.ts +610 -0
  178. package/node_modules/@xterm/xterm/src/vs/base/common/platform.ts +281 -0
  179. package/node_modules/@xterm/xterm/src/vs/base/common/scrollable.ts +522 -0
  180. package/node_modules/@xterm/xterm/src/vs/base/common/sequence.ts +34 -0
  181. package/node_modules/@xterm/xterm/src/vs/base/common/stopwatch.ts +43 -0
  182. package/node_modules/@xterm/xterm/src/vs/base/common/strings.ts +557 -0
  183. package/node_modules/@xterm/xterm/src/vs/base/common/symbols.ts +9 -0
  184. package/node_modules/@xterm/xterm/src/vs/base/common/uint.ts +59 -0
  185. package/node_modules/@xterm/xterm/src/vs/patches/nls.ts +90 -0
  186. package/node_modules/@xterm/xterm/src/vs/typings/base-common.d.ts +20 -0
  187. package/node_modules/@xterm/xterm/src/vs/typings/require.d.ts +42 -0
  188. package/node_modules/@xterm/xterm/src/vs/typings/vscode-globals-nls.d.ts +36 -0
  189. package/node_modules/@xterm/xterm/src/vs/typings/vscode-globals-product.d.ts +33 -0
  190. package/node_modules/@xterm/xterm/typings/xterm.d.ts +1957 -0
  191. package/package.json +1 -1
  192. package/packages/daemon/src/index.js +25 -7
  193. package/packages/daemon/src/terminal-pty.js +141 -0
  194. package/packages/gui/dist/assets/{index-Gfb8Zxy9.css → index-BhjOFLBc.css} +32 -1
  195. package/packages/gui/dist/assets/index-CFeltwTB.js +153 -0
  196. package/packages/gui/dist/index.html +2 -2
  197. package/packages/gui/package.json +3 -0
  198. package/packages/gui/src/components/EditorTabs.jsx +3 -3
  199. package/packages/gui/src/components/FileTree.jsx +18 -22
  200. package/packages/gui/src/components/Terminal.jsx +154 -0
  201. package/packages/gui/src/views/FileEditor.jsx +100 -39
  202. package/node_modules/@groove-dev/gui/dist/assets/index-BQSznoq0.js +0 -103
  203. package/packages/gui/dist/assets/index-BQSznoq0.js +0 -103
@@ -0,0 +1,365 @@
1
+ /**
2
+ * Copyright (c) 2019 The xterm.js authors. All rights reserved.
3
+ * @license MIT
4
+ */
5
+ import { IBufferService, ICoreService, ICoreMouseService, IOptionsService } from 'common/services/Services';
6
+ import { ICoreMouseProtocol, ICoreMouseEvent, CoreMouseEncoding, CoreMouseEventType, CoreMouseButton, CoreMouseAction } from 'common/Types';
7
+ import { Disposable } from 'vs/base/common/lifecycle';
8
+ import { Emitter } from 'vs/base/common/event';
9
+
10
+ /**
11
+ * Supported default protocols.
12
+ */
13
+ const DEFAULT_PROTOCOLS: { [key: string]: ICoreMouseProtocol } = {
14
+ /**
15
+ * NONE
16
+ * Events: none
17
+ * Modifiers: none
18
+ */
19
+ NONE: {
20
+ events: CoreMouseEventType.NONE,
21
+ restrict: () => false
22
+ },
23
+ /**
24
+ * X10
25
+ * Events: mousedown
26
+ * Modifiers: none
27
+ */
28
+ X10: {
29
+ events: CoreMouseEventType.DOWN,
30
+ restrict: (e: ICoreMouseEvent) => {
31
+ // no wheel, no move, no up
32
+ if (e.button === CoreMouseButton.WHEEL || e.action !== CoreMouseAction.DOWN) {
33
+ return false;
34
+ }
35
+ // no modifiers
36
+ e.ctrl = false;
37
+ e.alt = false;
38
+ e.shift = false;
39
+ return true;
40
+ }
41
+ },
42
+ /**
43
+ * VT200
44
+ * Events: mousedown / mouseup / wheel
45
+ * Modifiers: all
46
+ */
47
+ VT200: {
48
+ events: CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL,
49
+ restrict: (e: ICoreMouseEvent) => {
50
+ // no move
51
+ if (e.action === CoreMouseAction.MOVE) {
52
+ return false;
53
+ }
54
+ return true;
55
+ }
56
+ },
57
+ /**
58
+ * DRAG
59
+ * Events: mousedown / mouseup / wheel / mousedrag
60
+ * Modifiers: all
61
+ */
62
+ DRAG: {
63
+ events: CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL | CoreMouseEventType.DRAG,
64
+ restrict: (e: ICoreMouseEvent) => {
65
+ // no move without button
66
+ if (e.action === CoreMouseAction.MOVE && e.button === CoreMouseButton.NONE) {
67
+ return false;
68
+ }
69
+ return true;
70
+ }
71
+ },
72
+ /**
73
+ * ANY
74
+ * Events: all mouse related events
75
+ * Modifiers: all
76
+ */
77
+ ANY: {
78
+ events:
79
+ CoreMouseEventType.DOWN | CoreMouseEventType.UP | CoreMouseEventType.WHEEL
80
+ | CoreMouseEventType.DRAG | CoreMouseEventType.MOVE,
81
+ restrict: (e: ICoreMouseEvent) => true
82
+ }
83
+ };
84
+
85
+ const enum Modifiers {
86
+ SHIFT = 4,
87
+ ALT = 8,
88
+ CTRL = 16
89
+ }
90
+
91
+ // helper for default encoders to generate the event code.
92
+ function eventCode(e: ICoreMouseEvent, isSGR: boolean): number {
93
+ let code = (e.ctrl ? Modifiers.CTRL : 0) | (e.shift ? Modifiers.SHIFT : 0) | (e.alt ? Modifiers.ALT : 0);
94
+ if (e.button === CoreMouseButton.WHEEL) {
95
+ code |= 64;
96
+ code |= e.action;
97
+ } else {
98
+ code |= e.button & 3;
99
+ if (e.button & 4) {
100
+ code |= 64;
101
+ }
102
+ if (e.button & 8) {
103
+ code |= 128;
104
+ }
105
+ if (e.action === CoreMouseAction.MOVE) {
106
+ code |= CoreMouseAction.MOVE;
107
+ } else if (e.action === CoreMouseAction.UP && !isSGR) {
108
+ // special case - only SGR can report button on release
109
+ // all others have to go with NONE
110
+ code |= CoreMouseButton.NONE;
111
+ }
112
+ }
113
+ return code;
114
+ }
115
+
116
+ const S = String.fromCharCode;
117
+
118
+ /**
119
+ * Supported default encodings.
120
+ */
121
+ const DEFAULT_ENCODINGS: { [key: string]: CoreMouseEncoding } = {
122
+ /**
123
+ * DEFAULT - CSI M Pb Px Py
124
+ * Single byte encoding for coords and event code.
125
+ * Can encode values up to 223 (1-based).
126
+ */
127
+ DEFAULT: (e: ICoreMouseEvent) => {
128
+ const params = [eventCode(e, false) + 32, e.col + 32, e.row + 32];
129
+ // supress mouse report if we exceed addressible range
130
+ // Note this is handled differently by emulators
131
+ // - xterm: sends 0;0 coords instead
132
+ // - vte, konsole: no report
133
+ if (params[0] > 255 || params[1] > 255 || params[2] > 255) {
134
+ return '';
135
+ }
136
+ return `\x1b[M${S(params[0])}${S(params[1])}${S(params[2])}`;
137
+ },
138
+ /**
139
+ * SGR - CSI < Pb ; Px ; Py M|m
140
+ * No encoding limitation.
141
+ * Can report button on release and works with a well formed sequence.
142
+ */
143
+ SGR: (e: ICoreMouseEvent) => {
144
+ const final = (e.action === CoreMouseAction.UP && e.button !== CoreMouseButton.WHEEL) ? 'm' : 'M';
145
+ return `\x1b[<${eventCode(e, true)};${e.col};${e.row}${final}`;
146
+ },
147
+ SGR_PIXELS: (e: ICoreMouseEvent) => {
148
+ const final = (e.action === CoreMouseAction.UP && e.button !== CoreMouseButton.WHEEL) ? 'm' : 'M';
149
+ return `\x1b[<${eventCode(e, true)};${e.x};${e.y}${final}`;
150
+ }
151
+ };
152
+
153
+ /**
154
+ * CoreMouseService
155
+ *
156
+ * Provides mouse tracking reports with different protocols and encodings.
157
+ * - protocols: NONE (default), X10, VT200, DRAG, ANY
158
+ * - encodings: DEFAULT, SGR (UTF8, URXVT removed in #2507)
159
+ *
160
+ * Custom protocols/encodings can be added by `addProtocol` / `addEncoding`.
161
+ * To activate a protocol/encoding, set `activeProtocol` / `activeEncoding`.
162
+ * Switching a protocol will send a notification event `onProtocolChange`
163
+ * with a list of needed events to track.
164
+ *
165
+ * The service handles the mouse tracking state and decides whether to send
166
+ * a tracking report to the backend based on protocol and encoding limitations.
167
+ * To send a mouse event call `triggerMouseEvent`.
168
+ */
169
+ export class CoreMouseService extends Disposable implements ICoreMouseService {
170
+ public serviceBrand: any;
171
+
172
+ private _protocols: { [name: string]: ICoreMouseProtocol } = {};
173
+ private _encodings: { [name: string]: CoreMouseEncoding } = {};
174
+ private _activeProtocol: string = '';
175
+ private _activeEncoding: string = '';
176
+ private _lastEvent: ICoreMouseEvent | null = null;
177
+ private _wheelPartialScroll: number = 0;
178
+
179
+ private readonly _onProtocolChange = this._register(new Emitter<CoreMouseEventType>());
180
+ public readonly onProtocolChange = this._onProtocolChange.event;
181
+
182
+ constructor(
183
+ @IBufferService private readonly _bufferService: IBufferService,
184
+ @ICoreService private readonly _coreService: ICoreService,
185
+ @IOptionsService private readonly _optionsService: IOptionsService
186
+ ) {
187
+ super();
188
+ // register default protocols and encodings
189
+ for (const name of Object.keys(DEFAULT_PROTOCOLS)) this.addProtocol(name, DEFAULT_PROTOCOLS[name]);
190
+ for (const name of Object.keys(DEFAULT_ENCODINGS)) this.addEncoding(name, DEFAULT_ENCODINGS[name]);
191
+ // call reset to set defaults
192
+ this.reset();
193
+ }
194
+
195
+ public addProtocol(name: string, protocol: ICoreMouseProtocol): void {
196
+ this._protocols[name] = protocol;
197
+ }
198
+
199
+ public addEncoding(name: string, encoding: CoreMouseEncoding): void {
200
+ this._encodings[name] = encoding;
201
+ }
202
+
203
+ public get activeProtocol(): string {
204
+ return this._activeProtocol;
205
+ }
206
+
207
+ public get areMouseEventsActive(): boolean {
208
+ return this._protocols[this._activeProtocol].events !== 0;
209
+ }
210
+
211
+ public set activeProtocol(name: string) {
212
+ if (!this._protocols[name]) {
213
+ throw new Error(`unknown protocol "${name}"`);
214
+ }
215
+ this._activeProtocol = name;
216
+ this._onProtocolChange.fire(this._protocols[name].events);
217
+ }
218
+
219
+ public get activeEncoding(): string {
220
+ return this._activeEncoding;
221
+ }
222
+
223
+ public set activeEncoding(name: string) {
224
+ if (!this._encodings[name]) {
225
+ throw new Error(`unknown encoding "${name}"`);
226
+ }
227
+ this._activeEncoding = name;
228
+ }
229
+
230
+ public reset(): void {
231
+ this.activeProtocol = 'NONE';
232
+ this.activeEncoding = 'DEFAULT';
233
+ this._lastEvent = null;
234
+ this._wheelPartialScroll = 0;
235
+ }
236
+
237
+ /**
238
+ * Processes a wheel event, accounting for partial scrolls for trackpad, mouse scrolls.
239
+ * This prevents hyper-sensitive scrolling in alt buffer.
240
+ */
241
+ public consumeWheelEvent(ev: WheelEvent, cellHeight?: number, dpr?: number): number {
242
+ // Do nothing if it's not a vertical scroll event
243
+ if (ev.deltaY === 0 || ev.shiftKey) {
244
+ return 0;
245
+ }
246
+
247
+ if (cellHeight === undefined || dpr === undefined) {
248
+ return 0;
249
+ }
250
+
251
+ const targetWheelEventPixels = cellHeight / dpr;
252
+ let amount = this._applyScrollModifier(ev.deltaY, ev);
253
+
254
+ if (ev.deltaMode === WheelEvent.DOM_DELTA_PIXEL) {
255
+ amount /= (targetWheelEventPixels + 0.0); // Prevent integer division
256
+
257
+ const isLikelyTrackpad = Math.abs(ev.deltaY) < 50;
258
+ if (isLikelyTrackpad) {
259
+ amount *= 0.3;
260
+ }
261
+
262
+ this._wheelPartialScroll += amount;
263
+ amount = Math.floor(Math.abs(this._wheelPartialScroll)) * (this._wheelPartialScroll > 0 ? 1 : -1);
264
+ this._wheelPartialScroll %= 1;
265
+ } else if (ev.deltaMode === WheelEvent.DOM_DELTA_PAGE) {
266
+ amount *= this._bufferService.rows;
267
+ }
268
+ return amount;
269
+ }
270
+
271
+ private _applyScrollModifier(amount: number, ev: WheelEvent): number {
272
+ // Multiply the scroll speed when the modifier key is pressed
273
+ if (ev.altKey || ev.ctrlKey || ev.shiftKey) {
274
+ return amount * this._optionsService.rawOptions.fastScrollSensitivity * this._optionsService.rawOptions.scrollSensitivity;
275
+ }
276
+ return amount * this._optionsService.rawOptions.scrollSensitivity;
277
+ }
278
+
279
+ /**
280
+ * Triggers a mouse event to be sent.
281
+ *
282
+ * Returns true if the event passed all protocol restrictions and a report
283
+ * was sent, otherwise false. The return value may be used to decide whether
284
+ * the default event action in the bowser component should be omitted.
285
+ *
286
+ * Note: The method will change values of the given event object
287
+ * to fullfill protocol and encoding restrictions.
288
+ */
289
+ public triggerMouseEvent(e: ICoreMouseEvent): boolean {
290
+ // range check for col/row
291
+ if (e.col < 0 || e.col >= this._bufferService.cols
292
+ || e.row < 0 || e.row >= this._bufferService.rows) {
293
+ return false;
294
+ }
295
+
296
+ // filter nonsense combinations of button + action
297
+ if (e.button === CoreMouseButton.WHEEL && e.action === CoreMouseAction.MOVE) {
298
+ return false;
299
+ }
300
+ if (e.button === CoreMouseButton.NONE && e.action !== CoreMouseAction.MOVE) {
301
+ return false;
302
+ }
303
+ if (e.button !== CoreMouseButton.WHEEL && (e.action === CoreMouseAction.LEFT || e.action === CoreMouseAction.RIGHT)) {
304
+ return false;
305
+ }
306
+
307
+ // report 1-based coords
308
+ e.col++;
309
+ e.row++;
310
+
311
+ // debounce move events at grid or pixel level
312
+ if (e.action === CoreMouseAction.MOVE
313
+ && this._lastEvent
314
+ && this._equalEvents(this._lastEvent, e, this._activeEncoding === 'SGR_PIXELS')
315
+ ) {
316
+ return false;
317
+ }
318
+
319
+ // apply protocol restrictions
320
+ if (!this._protocols[this._activeProtocol].restrict(e)) {
321
+ return false;
322
+ }
323
+
324
+ // encode report and send
325
+ const report = this._encodings[this._activeEncoding](e);
326
+ if (report) {
327
+ // always send DEFAULT as binary data
328
+ if (this._activeEncoding === 'DEFAULT') {
329
+ this._coreService.triggerBinaryEvent(report);
330
+ } else {
331
+ this._coreService.triggerDataEvent(report, true);
332
+ }
333
+ }
334
+
335
+ this._lastEvent = e;
336
+
337
+ return true;
338
+ }
339
+
340
+ public explainEvents(events: CoreMouseEventType): { [event: string]: boolean } {
341
+ return {
342
+ down: !!(events & CoreMouseEventType.DOWN),
343
+ up: !!(events & CoreMouseEventType.UP),
344
+ drag: !!(events & CoreMouseEventType.DRAG),
345
+ move: !!(events & CoreMouseEventType.MOVE),
346
+ wheel: !!(events & CoreMouseEventType.WHEEL)
347
+ };
348
+ }
349
+
350
+ private _equalEvents(e1: ICoreMouseEvent, e2: ICoreMouseEvent, pixels: boolean): boolean {
351
+ if (pixels) {
352
+ if (e1.x !== e2.x) return false;
353
+ if (e1.y !== e2.y) return false;
354
+ } else {
355
+ if (e1.col !== e2.col) return false;
356
+ if (e1.row !== e2.row) return false;
357
+ }
358
+ if (e1.button !== e2.button) return false;
359
+ if (e1.action !== e2.action) return false;
360
+ if (e1.ctrl !== e2.ctrl) return false;
361
+ if (e1.alt !== e2.alt) return false;
362
+ if (e1.shift !== e2.shift) return false;
363
+ return true;
364
+ }
365
+ }
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Copyright (c) 2019 The xterm.js authors. All rights reserved.
3
+ * @license MIT
4
+ */
5
+
6
+ import { clone } from 'common/Clone';
7
+ import { Disposable } from 'vs/base/common/lifecycle';
8
+ import { IDecPrivateModes, IModes } from 'common/Types';
9
+ import { IBufferService, ICoreService, ILogService, IOptionsService } from 'common/services/Services';
10
+ import { Emitter } from 'vs/base/common/event';
11
+
12
+ const DEFAULT_MODES: IModes = Object.freeze({
13
+ insertMode: false
14
+ });
15
+
16
+ const DEFAULT_DEC_PRIVATE_MODES: IDecPrivateModes = Object.freeze({
17
+ applicationCursorKeys: false,
18
+ applicationKeypad: false,
19
+ bracketedPasteMode: false,
20
+ cursorBlink: undefined,
21
+ cursorStyle: undefined,
22
+ origin: false,
23
+ reverseWraparound: false,
24
+ sendFocus: false,
25
+ synchronizedOutput: false,
26
+ wraparound: true // defaults: xterm - true, vt100 - false
27
+ });
28
+
29
+ export class CoreService extends Disposable implements ICoreService {
30
+ public serviceBrand: any;
31
+
32
+ public isCursorInitialized: boolean = false;
33
+ public isCursorHidden: boolean = false;
34
+ public modes: IModes;
35
+ public decPrivateModes: IDecPrivateModes;
36
+
37
+ private readonly _onData = this._register(new Emitter<string>());
38
+ public readonly onData = this._onData.event;
39
+ private readonly _onUserInput = this._register(new Emitter<void>());
40
+ public readonly onUserInput = this._onUserInput.event;
41
+ private readonly _onBinary = this._register(new Emitter<string>());
42
+ public readonly onBinary = this._onBinary.event;
43
+ private readonly _onRequestScrollToBottom = this._register(new Emitter<void>());
44
+ public readonly onRequestScrollToBottom = this._onRequestScrollToBottom.event;
45
+
46
+ constructor(
47
+ @IBufferService private readonly _bufferService: IBufferService,
48
+ @ILogService private readonly _logService: ILogService,
49
+ @IOptionsService private readonly _optionsService: IOptionsService
50
+ ) {
51
+ super();
52
+ this.modes = clone(DEFAULT_MODES);
53
+ this.decPrivateModes = clone(DEFAULT_DEC_PRIVATE_MODES);
54
+ }
55
+
56
+ public reset(): void {
57
+ this.modes = clone(DEFAULT_MODES);
58
+ this.decPrivateModes = clone(DEFAULT_DEC_PRIVATE_MODES);
59
+ }
60
+
61
+ public triggerDataEvent(data: string, wasUserInput: boolean = false): void {
62
+ // Prevents all events to pty process if stdin is disabled
63
+ if (this._optionsService.rawOptions.disableStdin) {
64
+ return;
65
+ }
66
+
67
+ // Input is being sent to the terminal, the terminal should focus the prompt.
68
+ const buffer = this._bufferService.buffer;
69
+ if (wasUserInput && this._optionsService.rawOptions.scrollOnUserInput && buffer.ybase !== buffer.ydisp) {
70
+ this._onRequestScrollToBottom.fire();
71
+ }
72
+
73
+ // Fire onUserInput so listeners can react as well (eg. clear selection)
74
+ if (wasUserInput) {
75
+ this._onUserInput.fire();
76
+ }
77
+
78
+ // Fire onData API
79
+ this._logService.debug(`sending data "${data}"`);
80
+ this._logService.trace(`sending data (codes)`, () => data.split('').map(e => e.charCodeAt(0)));
81
+ this._onData.fire(data);
82
+ }
83
+
84
+ public triggerBinaryEvent(data: string): void {
85
+ if (this._optionsService.rawOptions.disableStdin) {
86
+ return;
87
+ }
88
+ this._logService.debug(`sending binary "${data}"`);
89
+ this._logService.trace(`sending binary (codes)`, () => data.split('').map(e => e.charCodeAt(0)));
90
+ this._onBinary.fire(data);
91
+ }
92
+ }
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Copyright (c) 2022 The xterm.js authors. All rights reserved.
3
+ * @license MIT
4
+ */
5
+
6
+ import { css } from 'common/Color';
7
+ import { Disposable, DisposableStore, toDisposable } from 'vs/base/common/lifecycle';
8
+ import { IDecorationService, IInternalDecoration } from 'common/services/Services';
9
+ import { SortedList } from 'common/SortedList';
10
+ import { IColor } from 'common/Types';
11
+ import { IDecoration, IDecorationOptions, IMarker } from '@xterm/xterm';
12
+ import { Emitter } from 'vs/base/common/event';
13
+
14
+ // Work variables to avoid garbage collection
15
+ let $xmin = 0;
16
+ let $xmax = 0;
17
+
18
+ export class DecorationService extends Disposable implements IDecorationService {
19
+ public serviceBrand: any;
20
+
21
+ /**
22
+ * A list of all decorations, sorted by the marker's line value. This relies on the fact that
23
+ * while marker line values do change, they should all change by the same amount so this should
24
+ * never become out of order.
25
+ */
26
+ private readonly _decorations: SortedList<IInternalDecoration> = new SortedList(e => e?.marker.line);
27
+
28
+ private readonly _onDecorationRegistered = this._register(new Emitter<IInternalDecoration>());
29
+ public readonly onDecorationRegistered = this._onDecorationRegistered.event;
30
+ private readonly _onDecorationRemoved = this._register(new Emitter<IInternalDecoration>());
31
+ public readonly onDecorationRemoved = this._onDecorationRemoved.event;
32
+
33
+ public get decorations(): IterableIterator<IInternalDecoration> { return this._decorations.values(); }
34
+
35
+ constructor() {
36
+ super();
37
+
38
+ this._register(toDisposable(() => this.reset()));
39
+ }
40
+
41
+ public registerDecoration(options: IDecorationOptions): IDecoration | undefined {
42
+ if (options.marker.isDisposed) {
43
+ return undefined;
44
+ }
45
+ const decoration = new Decoration(options);
46
+ if (decoration) {
47
+ const markerDispose = decoration.marker.onDispose(() => decoration.dispose());
48
+ const listener = decoration.onDispose(() => {
49
+ listener.dispose();
50
+ if (decoration) {
51
+ if (this._decorations.delete(decoration)) {
52
+ this._onDecorationRemoved.fire(decoration);
53
+ }
54
+ markerDispose.dispose();
55
+ }
56
+ });
57
+ this._decorations.insert(decoration);
58
+ this._onDecorationRegistered.fire(decoration);
59
+ }
60
+ return decoration;
61
+ }
62
+
63
+ public reset(): void {
64
+ for (const d of this._decorations.values()) {
65
+ d.dispose();
66
+ }
67
+ this._decorations.clear();
68
+ }
69
+
70
+ public *getDecorationsAtCell(x: number, line: number, layer?: 'bottom' | 'top'): IterableIterator<IInternalDecoration> {
71
+ let xmin = 0;
72
+ let xmax = 0;
73
+ for (const d of this._decorations.getKeyIterator(line)) {
74
+ xmin = d.options.x ?? 0;
75
+ xmax = xmin + (d.options.width ?? 1);
76
+ if (x >= xmin && x < xmax && (!layer || (d.options.layer ?? 'bottom') === layer)) {
77
+ yield d;
78
+ }
79
+ }
80
+ }
81
+
82
+ public forEachDecorationAtCell(x: number, line: number, layer: 'bottom' | 'top' | undefined, callback: (decoration: IInternalDecoration) => void): void {
83
+ this._decorations.forEachByKey(line, d => {
84
+ $xmin = d.options.x ?? 0;
85
+ $xmax = $xmin + (d.options.width ?? 1);
86
+ if (x >= $xmin && x < $xmax && (!layer || (d.options.layer ?? 'bottom') === layer)) {
87
+ callback(d);
88
+ }
89
+ });
90
+ }
91
+ }
92
+
93
+ class Decoration extends DisposableStore implements IInternalDecoration {
94
+ public readonly marker: IMarker;
95
+ public element: HTMLElement | undefined;
96
+
97
+ public readonly onRenderEmitter = this.add(new Emitter<HTMLElement>());
98
+ public readonly onRender = this.onRenderEmitter.event;
99
+ private readonly _onDispose = this.add(new Emitter<void>());
100
+ public readonly onDispose = this._onDispose.event;
101
+
102
+ private _cachedBg: IColor | undefined | null = null;
103
+ public get backgroundColorRGB(): IColor | undefined {
104
+ if (this._cachedBg === null) {
105
+ if (this.options.backgroundColor) {
106
+ this._cachedBg = css.toColor(this.options.backgroundColor);
107
+ } else {
108
+ this._cachedBg = undefined;
109
+ }
110
+ }
111
+ return this._cachedBg;
112
+ }
113
+
114
+ private _cachedFg: IColor | undefined | null = null;
115
+ public get foregroundColorRGB(): IColor | undefined {
116
+ if (this._cachedFg === null) {
117
+ if (this.options.foregroundColor) {
118
+ this._cachedFg = css.toColor(this.options.foregroundColor);
119
+ } else {
120
+ this._cachedFg = undefined;
121
+ }
122
+ }
123
+ return this._cachedFg;
124
+ }
125
+
126
+ constructor(
127
+ public readonly options: IDecorationOptions
128
+ ) {
129
+ super();
130
+ this.marker = options.marker;
131
+ if (this.options.overviewRulerOptions && !this.options.overviewRulerOptions.position) {
132
+ this.options.overviewRulerOptions.position = 'full';
133
+ }
134
+ }
135
+
136
+ public override dispose(): void {
137
+ this._onDispose.fire();
138
+ super.dispose();
139
+ }
140
+ }
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Copyright (c) 2019 The xterm.js authors. All rights reserved.
3
+ * @license MIT
4
+ *
5
+ * This was heavily inspired from microsoft/vscode's dependency injection system (MIT).
6
+ */
7
+ /*---------------------------------------------------------------------------------------------
8
+ * Copyright (c) Microsoft Corporation. All rights reserved.
9
+ * Licensed under the MIT License. See License.txt in the project root for license information.
10
+ *--------------------------------------------------------------------------------------------*/
11
+
12
+ import { IInstantiationService, IServiceIdentifier } from 'common/services/Services';
13
+ import { getServiceDependencies } from 'common/services/ServiceRegistry';
14
+
15
+ export class ServiceCollection {
16
+
17
+ private _entries = new Map<IServiceIdentifier<any>, any>();
18
+
19
+ constructor(...entries: [IServiceIdentifier<any>, any][]) {
20
+ for (const [id, service] of entries) {
21
+ this.set(id, service);
22
+ }
23
+ }
24
+
25
+ public set<T>(id: IServiceIdentifier<T>, instance: T): T {
26
+ const result = this._entries.get(id);
27
+ this._entries.set(id, instance);
28
+ return result;
29
+ }
30
+
31
+ public forEach(callback: (id: IServiceIdentifier<any>, instance: any) => any): void {
32
+ for (const [key, value] of this._entries.entries()) {
33
+ callback(key, value);
34
+ }
35
+ }
36
+
37
+ public has(id: IServiceIdentifier<any>): boolean {
38
+ return this._entries.has(id);
39
+ }
40
+
41
+ public get<T>(id: IServiceIdentifier<T>): T | undefined {
42
+ return this._entries.get(id);
43
+ }
44
+ }
45
+
46
+ export class InstantiationService implements IInstantiationService {
47
+ public serviceBrand: undefined;
48
+
49
+ private readonly _services: ServiceCollection = new ServiceCollection();
50
+
51
+ constructor() {
52
+ this._services.set(IInstantiationService, this);
53
+ }
54
+
55
+ public setService<T>(id: IServiceIdentifier<T>, instance: T): void {
56
+ this._services.set(id, instance);
57
+ }
58
+
59
+ public getService<T>(id: IServiceIdentifier<T>): T | undefined {
60
+ return this._services.get(id);
61
+ }
62
+
63
+ public createInstance<T>(ctor: any, ...args: any[]): T {
64
+ const serviceDependencies = getServiceDependencies(ctor).sort((a, b) => a.index - b.index);
65
+
66
+ const serviceArgs: any[] = [];
67
+ for (const dependency of serviceDependencies) {
68
+ const service = this._services.get(dependency.id);
69
+ if (!service) {
70
+ throw new Error(`[createInstance] ${ctor.name} depends on UNKNOWN service ${dependency.id._id}.`);
71
+ }
72
+ serviceArgs.push(service);
73
+ }
74
+
75
+ const firstServiceArgPos = serviceDependencies.length > 0 ? serviceDependencies[0].index : args.length;
76
+
77
+ // check for argument mismatches, adjust static args if needed
78
+ if (args.length !== firstServiceArgPos) {
79
+ throw new Error(`[createInstance] First service dependency of ${ctor.name} at position ${firstServiceArgPos + 1} conflicts with ${args.length} static arguments`);
80
+ }
81
+
82
+ // now create the instance
83
+ return new ctor(...[...args, ...serviceArgs]);
84
+ }
85
+ }