node-pty 1.2.0-beta.6 → 1.2.0-beta.8

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 (262) hide show
  1. package/README.md +3 -5
  2. package/binding.gyp +20 -38
  3. package/lib/windowsPtyAgent.js +32 -95
  4. package/lib/windowsTerminal.js +1 -1
  5. package/package.json +6 -5
  6. package/prebuilds/darwin-arm64/pty.node +0 -0
  7. package/prebuilds/darwin-arm64/spawn-helper +0 -0
  8. package/prebuilds/darwin-x64/pty.node +0 -0
  9. package/prebuilds/darwin-x64/spawn-helper +0 -0
  10. package/prebuilds/win32-arm64/conpty.node +0 -0
  11. package/prebuilds/win32-arm64/conpty.pdb +0 -0
  12. package/prebuilds/win32-arm64/conpty_console_list.node +0 -0
  13. package/prebuilds/win32-arm64/conpty_console_list.pdb +0 -0
  14. package/prebuilds/win32-x64/conpty.node +0 -0
  15. package/prebuilds/win32-x64/conpty.pdb +0 -0
  16. package/prebuilds/win32-x64/conpty_console_list.node +0 -0
  17. package/prebuilds/win32-x64/conpty_console_list.pdb +0 -0
  18. package/scripts/post-install.js +1 -5
  19. package/src/win/conpty.cc +1 -2
  20. package/typings/node-pty.d.ts +9 -8
  21. package/deps/.editorconfig +0 -2
  22. package/deps/winpty/.drone.yml +0 -17
  23. package/deps/winpty/.gitattributes +0 -19
  24. package/deps/winpty/LICENSE +0 -21
  25. package/deps/winpty/Makefile +0 -166
  26. package/deps/winpty/README.md +0 -151
  27. package/deps/winpty/RELEASES.md +0 -280
  28. package/deps/winpty/VERSION.txt +0 -1
  29. package/deps/winpty/configure +0 -167
  30. package/deps/winpty/misc/BufferResizeTests.cc +0 -90
  31. package/deps/winpty/misc/ChangeScreenBuffer.cc +0 -53
  32. package/deps/winpty/misc/ClearConsole.cc +0 -72
  33. package/deps/winpty/misc/ConinMode.cc +0 -117
  34. package/deps/winpty/misc/ConinMode.ps1 +0 -116
  35. package/deps/winpty/misc/ConoutMode.cc +0 -113
  36. package/deps/winpty/misc/DebugClient.py +0 -42
  37. package/deps/winpty/misc/DebugServer.py +0 -63
  38. package/deps/winpty/misc/DumpLines.py +0 -5
  39. package/deps/winpty/misc/EnableExtendedFlags.txt +0 -46
  40. package/deps/winpty/misc/Font-Report-June2016/CP437-Consolas.txt +0 -528
  41. package/deps/winpty/misc/Font-Report-June2016/CP437-Lucida.txt +0 -633
  42. package/deps/winpty/misc/Font-Report-June2016/CP932.txt +0 -630
  43. package/deps/winpty/misc/Font-Report-June2016/CP936.txt +0 -630
  44. package/deps/winpty/misc/Font-Report-June2016/CP949.txt +0 -630
  45. package/deps/winpty/misc/Font-Report-June2016/CP950.txt +0 -630
  46. package/deps/winpty/misc/Font-Report-June2016/MinimumWindowWidths.txt +0 -16
  47. package/deps/winpty/misc/Font-Report-June2016/Results.txt +0 -4
  48. package/deps/winpty/misc/Font-Report-June2016/Windows10SetFontBugginess.txt +0 -144
  49. package/deps/winpty/misc/FontSurvey.cc +0 -100
  50. package/deps/winpty/misc/FormatChar.h +0 -21
  51. package/deps/winpty/misc/FreezePerfTest.cc +0 -62
  52. package/deps/winpty/misc/GetCh.cc +0 -20
  53. package/deps/winpty/misc/GetConsolePos.cc +0 -41
  54. package/deps/winpty/misc/GetFont.cc +0 -261
  55. package/deps/winpty/misc/IdentifyConsoleWindow.ps1 +0 -51
  56. package/deps/winpty/misc/IsNewConsole.cc +0 -87
  57. package/deps/winpty/misc/MouseInputNotes.txt +0 -90
  58. package/deps/winpty/misc/MoveConsoleWindow.cc +0 -34
  59. package/deps/winpty/misc/Notes.txt +0 -219
  60. package/deps/winpty/misc/OSVersion.cc +0 -27
  61. package/deps/winpty/misc/ScreenBufferFreezeInactive.cc +0 -101
  62. package/deps/winpty/misc/ScreenBufferTest.cc +0 -671
  63. package/deps/winpty/misc/ScreenBufferTest2.cc +0 -151
  64. package/deps/winpty/misc/SelectAllTest.cc +0 -45
  65. package/deps/winpty/misc/SetBufferSize.cc +0 -32
  66. package/deps/winpty/misc/SetCursorPos.cc +0 -10
  67. package/deps/winpty/misc/SetFont.cc +0 -145
  68. package/deps/winpty/misc/SetWindowRect.cc +0 -36
  69. package/deps/winpty/misc/ShowArgv.cc +0 -12
  70. package/deps/winpty/misc/ShowConsoleInput.cc +0 -40
  71. package/deps/winpty/misc/Spew.py +0 -5
  72. package/deps/winpty/misc/TestUtil.cc +0 -172
  73. package/deps/winpty/misc/UnicodeDoubleWidthTest.cc +0 -102
  74. package/deps/winpty/misc/UnicodeWideTest1.cc +0 -246
  75. package/deps/winpty/misc/UnicodeWideTest2.cc +0 -130
  76. package/deps/winpty/misc/UnixEcho.cc +0 -89
  77. package/deps/winpty/misc/Utf16Echo.cc +0 -46
  78. package/deps/winpty/misc/VeryLargeRead.cc +0 -122
  79. package/deps/winpty/misc/VkEscapeTest.cc +0 -56
  80. package/deps/winpty/misc/Win10ResizeWhileFrozen.cc +0 -52
  81. package/deps/winpty/misc/Win10WrapTest1.cc +0 -57
  82. package/deps/winpty/misc/Win10WrapTest2.cc +0 -30
  83. package/deps/winpty/misc/Win32Echo1.cc +0 -26
  84. package/deps/winpty/misc/Win32Echo2.cc +0 -19
  85. package/deps/winpty/misc/Win32Test1.cc +0 -46
  86. package/deps/winpty/misc/Win32Test2.cc +0 -70
  87. package/deps/winpty/misc/Win32Test3.cc +0 -78
  88. package/deps/winpty/misc/Win32Write1.cc +0 -44
  89. package/deps/winpty/misc/WindowsBugCrashReader.cc +0 -27
  90. package/deps/winpty/misc/WriteConsole.cc +0 -106
  91. package/deps/winpty/misc/build32.sh +0 -9
  92. package/deps/winpty/misc/build64.sh +0 -9
  93. package/deps/winpty/misc/color-test.sh +0 -212
  94. package/deps/winpty/misc/font-notes.txt +0 -300
  95. package/deps/winpty/misc/winbug-15048.cc +0 -201
  96. package/deps/winpty/ship/build-pty4j-libpty.bat +0 -36
  97. package/deps/winpty/ship/common_ship.py +0 -53
  98. package/deps/winpty/ship/make_msvc_package.py +0 -165
  99. package/deps/winpty/ship/ship.py +0 -108
  100. package/deps/winpty/src/agent/Agent.cc +0 -613
  101. package/deps/winpty/src/agent/Agent.h +0 -103
  102. package/deps/winpty/src/agent/AgentCreateDesktop.cc +0 -84
  103. package/deps/winpty/src/agent/AgentCreateDesktop.h +0 -28
  104. package/deps/winpty/src/agent/ConsoleFont.cc +0 -632
  105. package/deps/winpty/src/agent/ConsoleFont.h +0 -28
  106. package/deps/winpty/src/agent/ConsoleInput.cc +0 -852
  107. package/deps/winpty/src/agent/ConsoleInput.h +0 -109
  108. package/deps/winpty/src/agent/ConsoleInputReencoding.cc +0 -121
  109. package/deps/winpty/src/agent/ConsoleInputReencoding.h +0 -36
  110. package/deps/winpty/src/agent/ConsoleLine.cc +0 -152
  111. package/deps/winpty/src/agent/ConsoleLine.h +0 -41
  112. package/deps/winpty/src/agent/Coord.h +0 -87
  113. package/deps/winpty/src/agent/DebugShowInput.cc +0 -239
  114. package/deps/winpty/src/agent/DebugShowInput.h +0 -32
  115. package/deps/winpty/src/agent/DefaultInputMap.cc +0 -422
  116. package/deps/winpty/src/agent/DefaultInputMap.h +0 -28
  117. package/deps/winpty/src/agent/DsrSender.h +0 -30
  118. package/deps/winpty/src/agent/EventLoop.cc +0 -99
  119. package/deps/winpty/src/agent/EventLoop.h +0 -47
  120. package/deps/winpty/src/agent/InputMap.cc +0 -246
  121. package/deps/winpty/src/agent/InputMap.h +0 -114
  122. package/deps/winpty/src/agent/LargeConsoleRead.cc +0 -71
  123. package/deps/winpty/src/agent/LargeConsoleRead.h +0 -68
  124. package/deps/winpty/src/agent/NamedPipe.cc +0 -378
  125. package/deps/winpty/src/agent/NamedPipe.h +0 -125
  126. package/deps/winpty/src/agent/Scraper.cc +0 -699
  127. package/deps/winpty/src/agent/Scraper.h +0 -103
  128. package/deps/winpty/src/agent/SimplePool.h +0 -75
  129. package/deps/winpty/src/agent/SmallRect.h +0 -143
  130. package/deps/winpty/src/agent/Terminal.cc +0 -535
  131. package/deps/winpty/src/agent/Terminal.h +0 -69
  132. package/deps/winpty/src/agent/UnicodeEncoding.h +0 -157
  133. package/deps/winpty/src/agent/UnicodeEncodingTest.cc +0 -189
  134. package/deps/winpty/src/agent/Win32Console.cc +0 -107
  135. package/deps/winpty/src/agent/Win32Console.h +0 -67
  136. package/deps/winpty/src/agent/Win32ConsoleBuffer.cc +0 -193
  137. package/deps/winpty/src/agent/Win32ConsoleBuffer.h +0 -99
  138. package/deps/winpty/src/agent/main.cc +0 -114
  139. package/deps/winpty/src/agent/subdir.mk +0 -61
  140. package/deps/winpty/src/configurations.gypi +0 -60
  141. package/deps/winpty/src/debugserver/DebugServer.cc +0 -117
  142. package/deps/winpty/src/debugserver/subdir.mk +0 -41
  143. package/deps/winpty/src/include/winpty.h +0 -242
  144. package/deps/winpty/src/include/winpty_constants.h +0 -131
  145. package/deps/winpty/src/libwinpty/AgentLocation.cc +0 -75
  146. package/deps/winpty/src/libwinpty/AgentLocation.h +0 -28
  147. package/deps/winpty/src/libwinpty/LibWinptyException.h +0 -54
  148. package/deps/winpty/src/libwinpty/WinptyInternal.h +0 -72
  149. package/deps/winpty/src/libwinpty/subdir.mk +0 -46
  150. package/deps/winpty/src/libwinpty/winpty.cc +0 -970
  151. package/deps/winpty/src/shared/AgentMsg.h +0 -38
  152. package/deps/winpty/src/shared/BackgroundDesktop.cc +0 -122
  153. package/deps/winpty/src/shared/BackgroundDesktop.h +0 -73
  154. package/deps/winpty/src/shared/Buffer.cc +0 -103
  155. package/deps/winpty/src/shared/Buffer.h +0 -102
  156. package/deps/winpty/src/shared/DebugClient.cc +0 -187
  157. package/deps/winpty/src/shared/DebugClient.h +0 -38
  158. package/deps/winpty/src/shared/GenRandom.cc +0 -138
  159. package/deps/winpty/src/shared/GenRandom.h +0 -55
  160. package/deps/winpty/src/shared/GetCommitHash.bat +0 -13
  161. package/deps/winpty/src/shared/Mutex.h +0 -54
  162. package/deps/winpty/src/shared/OsModule.h +0 -63
  163. package/deps/winpty/src/shared/OwnedHandle.cc +0 -36
  164. package/deps/winpty/src/shared/OwnedHandle.h +0 -45
  165. package/deps/winpty/src/shared/PrecompiledHeader.h +0 -43
  166. package/deps/winpty/src/shared/StringBuilder.h +0 -227
  167. package/deps/winpty/src/shared/StringBuilderTest.cc +0 -114
  168. package/deps/winpty/src/shared/StringUtil.cc +0 -55
  169. package/deps/winpty/src/shared/StringUtil.h +0 -80
  170. package/deps/winpty/src/shared/TimeMeasurement.h +0 -63
  171. package/deps/winpty/src/shared/UnixCtrlChars.h +0 -45
  172. package/deps/winpty/src/shared/UpdateGenVersion.bat +0 -20
  173. package/deps/winpty/src/shared/WindowsSecurity.cc +0 -460
  174. package/deps/winpty/src/shared/WindowsSecurity.h +0 -104
  175. package/deps/winpty/src/shared/WindowsVersion.cc +0 -252
  176. package/deps/winpty/src/shared/WindowsVersion.h +0 -29
  177. package/deps/winpty/src/shared/WinptyAssert.cc +0 -55
  178. package/deps/winpty/src/shared/WinptyAssert.h +0 -64
  179. package/deps/winpty/src/shared/WinptyException.cc +0 -57
  180. package/deps/winpty/src/shared/WinptyException.h +0 -43
  181. package/deps/winpty/src/shared/WinptyVersion.cc +0 -42
  182. package/deps/winpty/src/shared/WinptyVersion.h +0 -27
  183. package/deps/winpty/src/shared/winpty_snprintf.h +0 -99
  184. package/deps/winpty/src/subdir.mk +0 -5
  185. package/deps/winpty/src/tests/subdir.mk +0 -28
  186. package/deps/winpty/src/tests/trivial_test.cc +0 -158
  187. package/deps/winpty/src/unix-adapter/InputHandler.cc +0 -114
  188. package/deps/winpty/src/unix-adapter/InputHandler.h +0 -56
  189. package/deps/winpty/src/unix-adapter/OutputHandler.cc +0 -80
  190. package/deps/winpty/src/unix-adapter/OutputHandler.h +0 -53
  191. package/deps/winpty/src/unix-adapter/Util.cc +0 -86
  192. package/deps/winpty/src/unix-adapter/Util.h +0 -31
  193. package/deps/winpty/src/unix-adapter/WakeupFd.cc +0 -70
  194. package/deps/winpty/src/unix-adapter/WakeupFd.h +0 -42
  195. package/deps/winpty/src/unix-adapter/main.cc +0 -729
  196. package/deps/winpty/src/unix-adapter/subdir.mk +0 -41
  197. package/deps/winpty/src/winpty.gyp +0 -236
  198. package/deps/winpty/vcbuild.bat +0 -83
  199. package/lib/conpty_console_list_agent.js.map +0 -1
  200. package/lib/eventEmitter2.js.map +0 -1
  201. package/lib/eventEmitter2.test.js +0 -30
  202. package/lib/eventEmitter2.test.js.map +0 -1
  203. package/lib/index.js.map +0 -1
  204. package/lib/interfaces.js.map +0 -1
  205. package/lib/shared/conout.js.map +0 -1
  206. package/lib/terminal.js.map +0 -1
  207. package/lib/terminal.test.js +0 -139
  208. package/lib/terminal.test.js.map +0 -1
  209. package/lib/testUtils.test.js +0 -28
  210. package/lib/testUtils.test.js.map +0 -1
  211. package/lib/types.js.map +0 -1
  212. package/lib/unixTerminal.js.map +0 -1
  213. package/lib/unixTerminal.test.js +0 -381
  214. package/lib/unixTerminal.test.js.map +0 -1
  215. package/lib/utils.js.map +0 -1
  216. package/lib/windowsConoutConnection.js.map +0 -1
  217. package/lib/windowsPtyAgent.js.map +0 -1
  218. package/lib/windowsPtyAgent.test.js +0 -90
  219. package/lib/windowsPtyAgent.test.js.map +0 -1
  220. package/lib/windowsTerminal.js.map +0 -1
  221. package/lib/windowsTerminal.test.js +0 -219
  222. package/lib/windowsTerminal.test.js.map +0 -1
  223. package/lib/worker/conoutSocketWorker.js.map +0 -1
  224. package/prebuilds/win32-arm64/pty.node +0 -0
  225. package/prebuilds/win32-arm64/pty.pdb +0 -0
  226. package/prebuilds/win32-arm64/winpty-agent.exe +0 -0
  227. package/prebuilds/win32-arm64/winpty-agent.pdb +0 -0
  228. package/prebuilds/win32-arm64/winpty.dll +0 -0
  229. package/prebuilds/win32-arm64/winpty.pdb +0 -0
  230. package/prebuilds/win32-x64/pty.node +0 -0
  231. package/prebuilds/win32-x64/pty.pdb +0 -0
  232. package/prebuilds/win32-x64/winpty-agent.exe +0 -0
  233. package/prebuilds/win32-x64/winpty-agent.pdb +0 -0
  234. package/prebuilds/win32-x64/winpty.dll +0 -0
  235. package/prebuilds/win32-x64/winpty.pdb +0 -0
  236. package/scripts/gen-compile-commands.js +0 -8
  237. package/scripts/increment-version.js +0 -54
  238. package/scripts/linux/checksums.txt +0 -2
  239. package/scripts/linux/install-sysroot.js +0 -158
  240. package/scripts/linux/verify-glibc-requirements.sh +0 -36
  241. package/src/conpty_console_list_agent.ts +0 -15
  242. package/src/eventEmitter2.test.ts +0 -30
  243. package/src/eventEmitter2.ts +0 -48
  244. package/src/index.ts +0 -52
  245. package/src/interfaces.ts +0 -130
  246. package/src/native.d.ts +0 -54
  247. package/src/shared/conout.ts +0 -15
  248. package/src/terminal.test.ts +0 -119
  249. package/src/terminal.ts +0 -211
  250. package/src/testUtils.test.ts +0 -23
  251. package/src/tsconfig.json +0 -22
  252. package/src/types.ts +0 -15
  253. package/src/unixTerminal.test.ts +0 -398
  254. package/src/unixTerminal.ts +0 -388
  255. package/src/utils.ts +0 -29
  256. package/src/win/winpty.cc +0 -333
  257. package/src/windowsConoutConnection.ts +0 -82
  258. package/src/windowsPtyAgent.test.ts +0 -94
  259. package/src/windowsPtyAgent.ts +0 -321
  260. package/src/windowsTerminal.test.ts +0 -229
  261. package/src/windowsTerminal.ts +0 -203
  262. package/src/worker/conoutSocketWorker.ts +0 -22
@@ -1,109 +0,0 @@
1
- // Copyright (c) 2011-2015 Ryan Prichard
2
- //
3
- // Permission is hereby granted, free of charge, to any person obtaining a copy
4
- // of this software and associated documentation files (the "Software"), to
5
- // deal in the Software without restriction, including without limitation the
6
- // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7
- // sell copies of the Software, and to permit persons to whom the Software is
8
- // furnished to do so, subject to the following conditions:
9
- //
10
- // The above copyright notice and this permission notice shall be included in
11
- // all copies or substantial portions of the Software.
12
- //
13
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
19
- // IN THE SOFTWARE.
20
-
21
- #ifndef CONSOLEINPUT_H
22
- #define CONSOLEINPUT_H
23
-
24
- #include <windows.h>
25
- #include <stdint.h>
26
-
27
- #include <memory>
28
- #include <string>
29
- #include <vector>
30
-
31
- #include "Coord.h"
32
- #include "InputMap.h"
33
- #include "SmallRect.h"
34
-
35
- class Win32Console;
36
- class DsrSender;
37
-
38
- class ConsoleInput
39
- {
40
- public:
41
- ConsoleInput(HANDLE conin, int mouseMode, DsrSender &dsrSender,
42
- Win32Console &console);
43
- void writeInput(const std::string &input);
44
- void flushIncompleteEscapeCode();
45
- void setMouseWindowRect(SmallRect val) { m_mouseWindowRect = val; }
46
- void updateInputFlags(bool forceTrace=false);
47
- bool shouldActivateTerminalMouse();
48
-
49
- private:
50
- void doWrite(bool isEof);
51
- void flushInputRecords(std::vector<INPUT_RECORD> &records);
52
- int scanInput(std::vector<INPUT_RECORD> &records,
53
- const char *input,
54
- int inputSize,
55
- bool isEof);
56
- int scanMouseInput(std::vector<INPUT_RECORD> &records,
57
- const char *input,
58
- int inputSize);
59
- void appendUtf8Char(std::vector<INPUT_RECORD> &records,
60
- const char *charBuffer,
61
- int charLen,
62
- bool terminalAltEscape);
63
- void appendKeyPress(std::vector<INPUT_RECORD> &records,
64
- uint16_t virtualKey,
65
- uint32_t winCodePointDn,
66
- uint32_t winCodePointUp,
67
- uint16_t winKeyState,
68
- uint32_t vtCodePoint,
69
- uint16_t vtKeyState);
70
-
71
- public:
72
- static void appendCPInputRecords(std::vector<INPUT_RECORD> &records,
73
- BOOL keyDown,
74
- uint16_t virtualKey,
75
- uint32_t codePoint,
76
- uint16_t keyState);
77
- static void appendInputRecord(std::vector<INPUT_RECORD> &records,
78
- BOOL keyDown,
79
- uint16_t virtualKey,
80
- wchar_t utf16Char,
81
- uint16_t keyState);
82
-
83
- private:
84
- DWORD inputConsoleMode();
85
-
86
- private:
87
- Win32Console &m_console;
88
- HANDLE m_conin = nullptr;
89
- int m_mouseMode = 0;
90
- DsrSender &m_dsrSender;
91
- bool m_dsrSent = false;
92
- std::string m_byteQueue;
93
- InputMap m_inputMap;
94
- DWORD m_lastWriteTick = 0;
95
- DWORD m_mouseButtonState = 0;
96
- struct DoubleClickDetection {
97
- DWORD button = 0;
98
- Coord pos;
99
- DWORD tick = 0;
100
- bool released = false;
101
- } m_doubleClick;
102
- bool m_enableExtendedEnabled = false;
103
- bool m_mouseInputEnabled = false;
104
- bool m_quickEditEnabled = false;
105
- bool m_escapeInputEnabled = false;
106
- SmallRect m_mouseWindowRect;
107
- };
108
-
109
- #endif // CONSOLEINPUT_H
@@ -1,121 +0,0 @@
1
- // Copyright (c) 2016 Ryan Prichard
2
- //
3
- // Permission is hereby granted, free of charge, to any person obtaining a copy
4
- // of this software and associated documentation files (the "Software"), to
5
- // deal in the Software without restriction, including without limitation the
6
- // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7
- // sell copies of the Software, and to permit persons to whom the Software is
8
- // furnished to do so, subject to the following conditions:
9
- //
10
- // The above copyright notice and this permission notice shall be included in
11
- // all copies or substantial portions of the Software.
12
- //
13
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
19
- // IN THE SOFTWARE.
20
-
21
- #include "ConsoleInputReencoding.h"
22
-
23
- #include "ConsoleInput.h"
24
-
25
- namespace {
26
-
27
- static void outch(std::vector<INPUT_RECORD> &out, wchar_t ch) {
28
- ConsoleInput::appendInputRecord(out, TRUE, 0, ch, 0);
29
- }
30
-
31
- } // anonymous namespace
32
-
33
- void reencodeEscapedKeyPress(
34
- std::vector<INPUT_RECORD> &out,
35
- uint16_t virtualKey,
36
- uint32_t codePoint,
37
- uint16_t keyState) {
38
-
39
- struct EscapedKey {
40
- enum { None, Numeric, Letter } kind;
41
- wchar_t content[2];
42
- };
43
-
44
- EscapedKey escapeCode = {};
45
- switch (virtualKey) {
46
- case VK_UP: escapeCode = { EscapedKey::Letter, {'A'} }; break;
47
- case VK_DOWN: escapeCode = { EscapedKey::Letter, {'B'} }; break;
48
- case VK_RIGHT: escapeCode = { EscapedKey::Letter, {'C'} }; break;
49
- case VK_LEFT: escapeCode = { EscapedKey::Letter, {'D'} }; break;
50
- case VK_CLEAR: escapeCode = { EscapedKey::Letter, {'E'} }; break;
51
- case VK_F1: escapeCode = { EscapedKey::Numeric, {'1', '1'} }; break;
52
- case VK_F2: escapeCode = { EscapedKey::Numeric, {'1', '2'} }; break;
53
- case VK_F3: escapeCode = { EscapedKey::Numeric, {'1', '3'} }; break;
54
- case VK_F4: escapeCode = { EscapedKey::Numeric, {'1', '4'} }; break;
55
- case VK_F5: escapeCode = { EscapedKey::Numeric, {'1', '5'} }; break;
56
- case VK_F6: escapeCode = { EscapedKey::Numeric, {'1', '7'} }; break;
57
- case VK_F7: escapeCode = { EscapedKey::Numeric, {'1', '8'} }; break;
58
- case VK_F8: escapeCode = { EscapedKey::Numeric, {'1', '9'} }; break;
59
- case VK_F9: escapeCode = { EscapedKey::Numeric, {'2', '0'} }; break;
60
- case VK_F10: escapeCode = { EscapedKey::Numeric, {'2', '1'} }; break;
61
- case VK_F11: escapeCode = { EscapedKey::Numeric, {'2', '3'} }; break;
62
- case VK_F12: escapeCode = { EscapedKey::Numeric, {'2', '4'} }; break;
63
- case VK_HOME: escapeCode = { EscapedKey::Letter, {'H'} }; break;
64
- case VK_INSERT: escapeCode = { EscapedKey::Numeric, {'2'} }; break;
65
- case VK_DELETE: escapeCode = { EscapedKey::Numeric, {'3'} }; break;
66
- case VK_END: escapeCode = { EscapedKey::Letter, {'F'} }; break;
67
- case VK_PRIOR: escapeCode = { EscapedKey::Numeric, {'5'} }; break;
68
- case VK_NEXT: escapeCode = { EscapedKey::Numeric, {'6'} }; break;
69
- }
70
- if (escapeCode.kind != EscapedKey::None) {
71
- int flags = 0;
72
- if (keyState & SHIFT_PRESSED) { flags |= 0x1; }
73
- if (keyState & LEFT_ALT_PRESSED) { flags |= 0x2; }
74
- if (keyState & LEFT_CTRL_PRESSED) { flags |= 0x4; }
75
- outch(out, L'\x1b');
76
- outch(out, L'[');
77
- if (escapeCode.kind == EscapedKey::Numeric) {
78
- for (wchar_t ch : escapeCode.content) {
79
- if (ch != L'\0') {
80
- outch(out, ch);
81
- }
82
- }
83
- } else if (flags != 0) {
84
- outch(out, L'1');
85
- }
86
- if (flags != 0) {
87
- outch(out, L';');
88
- outch(out, L'1' + flags);
89
- }
90
- if (escapeCode.kind == EscapedKey::Numeric) {
91
- outch(out, L'~');
92
- } else {
93
- outch(out, escapeCode.content[0]);
94
- }
95
- return;
96
- }
97
-
98
- switch (virtualKey) {
99
- case VK_BACK:
100
- if (keyState & LEFT_ALT_PRESSED) {
101
- outch(out, L'\x1b');
102
- }
103
- outch(out, L'\x7f');
104
- return;
105
- case VK_TAB:
106
- if (keyState & SHIFT_PRESSED) {
107
- outch(out, L'\x1b');
108
- outch(out, L'[');
109
- outch(out, L'Z');
110
- return;
111
- }
112
- break;
113
- }
114
-
115
- if (codePoint != 0) {
116
- if (keyState & LEFT_ALT_PRESSED) {
117
- outch(out, L'\x1b');
118
- }
119
- ConsoleInput::appendCPInputRecords(out, TRUE, 0, codePoint, 0);
120
- }
121
- }
@@ -1,36 +0,0 @@
1
- // Copyright (c) 2016 Ryan Prichard
2
- //
3
- // Permission is hereby granted, free of charge, to any person obtaining a copy
4
- // of this software and associated documentation files (the "Software"), to
5
- // deal in the Software without restriction, including without limitation the
6
- // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7
- // sell copies of the Software, and to permit persons to whom the Software is
8
- // furnished to do so, subject to the following conditions:
9
- //
10
- // The above copyright notice and this permission notice shall be included in
11
- // all copies or substantial portions of the Software.
12
- //
13
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
19
- // IN THE SOFTWARE.
20
-
21
- #ifndef AGENT_CONSOLE_INPUT_REENCODING_H
22
- #define AGENT_CONSOLE_INPUT_REENCODING_H
23
-
24
- #include <windows.h>
25
-
26
- #include <stdint.h>
27
-
28
- #include <vector>
29
-
30
- void reencodeEscapedKeyPress(
31
- std::vector<INPUT_RECORD> &records,
32
- uint16_t virtualKey,
33
- uint32_t codePoint,
34
- uint16_t keyState);
35
-
36
- #endif // AGENT_CONSOLE_INPUT_REENCODING_H
@@ -1,152 +0,0 @@
1
- // Copyright (c) 2015 Ryan Prichard
2
- //
3
- // Permission is hereby granted, free of charge, to any person obtaining a copy
4
- // of this software and associated documentation files (the "Software"), to
5
- // deal in the Software without restriction, including without limitation the
6
- // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7
- // sell copies of the Software, and to permit persons to whom the Software is
8
- // furnished to do so, subject to the following conditions:
9
- //
10
- // The above copyright notice and this permission notice shall be included in
11
- // all copies or substantial portions of the Software.
12
- //
13
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
19
- // IN THE SOFTWARE.
20
-
21
- //
22
- // ConsoleLine
23
- //
24
- // This data structure keep tracks of the previous CHAR_INFO content of an
25
- // output line and determines when a line has changed. Detecting line changes
26
- // is made complicated by terminal resizing.
27
- //
28
-
29
- #include "ConsoleLine.h"
30
-
31
- #include <algorithm>
32
-
33
- #include "../shared/WinptyAssert.h"
34
-
35
- static CHAR_INFO blankChar(WORD attributes)
36
- {
37
- // N.B.: As long as we write to UnicodeChar rather than AsciiChar, there
38
- // are no padding bytes that could contain uninitialized bytes. This fact
39
- // is important for efficient comparison.
40
- CHAR_INFO ret;
41
- ret.Attributes = attributes;
42
- ret.Char.UnicodeChar = L' ';
43
- return ret;
44
- }
45
-
46
- static bool isLineBlank(const CHAR_INFO *line, int length, WORD attributes)
47
- {
48
- for (int col = 0; col < length; ++col) {
49
- if (line[col].Attributes != attributes ||
50
- line[col].Char.UnicodeChar != L' ') {
51
- return false;
52
- }
53
- }
54
- return true;
55
- }
56
-
57
- static inline bool areLinesEqual(
58
- const CHAR_INFO *line1,
59
- const CHAR_INFO *line2,
60
- int length)
61
- {
62
- return memcmp(line1, line2, sizeof(CHAR_INFO) * length) == 0;
63
- }
64
-
65
- ConsoleLine::ConsoleLine() : m_prevLength(0)
66
- {
67
- }
68
-
69
- void ConsoleLine::reset()
70
- {
71
- m_prevLength = 0;
72
- m_prevData.clear();
73
- }
74
-
75
- // Determines whether the given line is sufficiently different from the
76
- // previously seen line as to justify reoutputting the line. The function
77
- // also sets the `ConsoleLine` to the given line, exactly as if `setLine` had
78
- // been called.
79
- bool ConsoleLine::detectChangeAndSetLine(const CHAR_INFO *const line, const int newLength)
80
- {
81
- ASSERT(newLength >= 1);
82
- ASSERT(m_prevLength <= static_cast<int>(m_prevData.size()));
83
-
84
- if (newLength == m_prevLength) {
85
- bool equalLines = areLinesEqual(m_prevData.data(), line, newLength);
86
- if (!equalLines) {
87
- setLine(line, newLength);
88
- }
89
- return !equalLines;
90
- } else {
91
- if (m_prevLength == 0) {
92
- setLine(line, newLength);
93
- return true;
94
- }
95
-
96
- ASSERT(m_prevLength >= 1);
97
- const WORD prevBlank = m_prevData[m_prevLength - 1].Attributes;
98
- const WORD newBlank = line[newLength - 1].Attributes;
99
-
100
- bool equalLines = false;
101
- if (newLength < m_prevLength) {
102
- // The line has become shorter. The lines are equal if the common
103
- // part is equal, and if the newly truncated characters were blank.
104
- equalLines =
105
- areLinesEqual(m_prevData.data(), line, newLength) &&
106
- isLineBlank(m_prevData.data() + newLength,
107
- m_prevLength - newLength,
108
- newBlank);
109
- } else {
110
- //
111
- // The line has become longer. The lines are equal if the common
112
- // part is equal, and if both the extra characters and any
113
- // potentially reexposed characters are blank.
114
- //
115
- // Two of the most relevant terminals for winpty--mintty and
116
- // jediterm--don't (currently) erase the obscured content when a
117
- // line is cleared, so we should anticipate its existence when
118
- // making a terminal wider and reoutput the line. See:
119
- //
120
- // * https://github.com/mintty/mintty/issues/480
121
- // * https://github.com/JetBrains/jediterm/issues/118
122
- //
123
- ASSERT(newLength > m_prevLength);
124
- equalLines =
125
- areLinesEqual(m_prevData.data(), line, m_prevLength) &&
126
- isLineBlank(m_prevData.data() + m_prevLength,
127
- std::min<int>(m_prevData.size(), newLength) - m_prevLength,
128
- prevBlank) &&
129
- isLineBlank(line + m_prevLength,
130
- newLength - m_prevLength,
131
- prevBlank);
132
- }
133
- setLine(line, newLength);
134
- return !equalLines;
135
- }
136
- }
137
-
138
- void ConsoleLine::setLine(const CHAR_INFO *const line, const int newLength)
139
- {
140
- if (static_cast<int>(m_prevData.size()) < newLength) {
141
- m_prevData.resize(newLength);
142
- }
143
- memcpy(m_prevData.data(), line, sizeof(CHAR_INFO) * newLength);
144
- m_prevLength = newLength;
145
- }
146
-
147
- void ConsoleLine::blank(WORD attributes)
148
- {
149
- m_prevData.resize(1);
150
- m_prevData[0] = blankChar(attributes);
151
- m_prevLength = 1;
152
- }
@@ -1,41 +0,0 @@
1
- // Copyright (c) 2015 Ryan Prichard
2
- //
3
- // Permission is hereby granted, free of charge, to any person obtaining a copy
4
- // of this software and associated documentation files (the "Software"), to
5
- // deal in the Software without restriction, including without limitation the
6
- // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7
- // sell copies of the Software, and to permit persons to whom the Software is
8
- // furnished to do so, subject to the following conditions:
9
- //
10
- // The above copyright notice and this permission notice shall be included in
11
- // all copies or substantial portions of the Software.
12
- //
13
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
19
- // IN THE SOFTWARE.
20
-
21
- #ifndef CONSOLE_LINE_H
22
- #define CONSOLE_LINE_H
23
-
24
- #include <windows.h>
25
-
26
- #include <vector>
27
-
28
- class ConsoleLine
29
- {
30
- public:
31
- ConsoleLine();
32
- void reset();
33
- bool detectChangeAndSetLine(const CHAR_INFO *line, int newLength);
34
- void setLine(const CHAR_INFO *line, int newLength);
35
- void blank(WORD attributes);
36
- private:
37
- int m_prevLength;
38
- std::vector<CHAR_INFO> m_prevData;
39
- };
40
-
41
- #endif // CONSOLE_LINE_H
@@ -1,87 +0,0 @@
1
- // Copyright (c) 2011-2012 Ryan Prichard
2
- //
3
- // Permission is hereby granted, free of charge, to any person obtaining a copy
4
- // of this software and associated documentation files (the "Software"), to
5
- // deal in the Software without restriction, including without limitation the
6
- // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7
- // sell copies of the Software, and to permit persons to whom the Software is
8
- // furnished to do so, subject to the following conditions:
9
- //
10
- // The above copyright notice and this permission notice shall be included in
11
- // all copies or substantial portions of the Software.
12
- //
13
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
19
- // IN THE SOFTWARE.
20
-
21
- #ifndef COORD_H
22
- #define COORD_H
23
-
24
- #include <windows.h>
25
-
26
- #include <string>
27
-
28
- #include "../shared/winpty_snprintf.h"
29
-
30
- struct Coord : COORD {
31
- Coord()
32
- {
33
- X = 0;
34
- Y = 0;
35
- }
36
-
37
- Coord(SHORT x, SHORT y)
38
- {
39
- X = x;
40
- Y = y;
41
- }
42
-
43
- Coord(COORD other)
44
- {
45
- *(COORD*)this = other;
46
- }
47
-
48
- Coord(const Coord &other)
49
- {
50
- *(COORD*)this = *(const COORD*)&other;
51
- }
52
-
53
- Coord &operator=(const Coord &other)
54
- {
55
- *(COORD*)this = *(const COORD*)&other;
56
- return *this;
57
- }
58
-
59
- bool operator==(const Coord &other) const
60
- {
61
- return X == other.X && Y == other.Y;
62
- }
63
-
64
- bool operator!=(const Coord &other) const
65
- {
66
- return !(*this == other);
67
- }
68
-
69
- Coord operator+(const Coord &other) const
70
- {
71
- return Coord(X + other.X, Y + other.Y);
72
- }
73
-
74
- bool isEmpty() const
75
- {
76
- return X <= 0 || Y <= 0;
77
- }
78
-
79
- std::string toString() const
80
- {
81
- char ret[32];
82
- winpty_snprintf(ret, "(%d,%d)", X, Y);
83
- return std::string(ret);
84
- }
85
- };
86
-
87
- #endif // COORD_H