@fredlackey/devutils 0.0.1 → 0.0.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 (259) hide show
  1. package/README.md +5 -5
  2. package/package.json +1 -1
  3. package/src/commands/install.js +374 -36
  4. package/src/installs/adobe-creative-cloud.js +527 -25
  5. package/src/installs/adobe-creative-cloud.md +605 -0
  6. package/src/installs/appcleaner.js +303 -26
  7. package/src/installs/appcleaner.md +699 -0
  8. package/src/installs/apt-transport-https.js +390 -0
  9. package/src/installs/apt-transport-https.md +678 -0
  10. package/src/installs/atomicparsley.js +624 -26
  11. package/src/installs/atomicparsley.md +795 -0
  12. package/src/installs/aws-cli.js +779 -26
  13. package/src/installs/aws-cli.md +727 -0
  14. package/src/installs/balena-etcher.js +688 -26
  15. package/src/installs/balena-etcher.md +761 -0
  16. package/src/installs/bambu-studio.js +912 -26
  17. package/src/installs/bambu-studio.md +780 -0
  18. package/src/installs/bash-completion.js +554 -23
  19. package/src/installs/bash-completion.md +833 -0
  20. package/src/installs/bash.js +399 -26
  21. package/src/installs/bash.md +993 -0
  22. package/src/installs/beyond-compare.js +585 -26
  23. package/src/installs/beyond-compare.md +813 -0
  24. package/src/installs/build-essential.js +511 -26
  25. package/src/installs/build-essential.md +977 -0
  26. package/src/installs/ca-certificates.js +618 -0
  27. package/src/installs/ca-certificates.md +937 -0
  28. package/src/installs/caffeine.js +490 -26
  29. package/src/installs/caffeine.md +839 -0
  30. package/src/installs/camtasia.js +577 -25
  31. package/src/installs/camtasia.md +762 -0
  32. package/src/installs/chatgpt.js +458 -26
  33. package/src/installs/chatgpt.md +814 -0
  34. package/src/installs/chocolatey.js +447 -0
  35. package/src/installs/chocolatey.md +661 -0
  36. package/src/installs/chrome-canary.js +472 -26
  37. package/src/installs/chrome-canary.md +641 -0
  38. package/src/installs/chromium.js +645 -26
  39. package/src/installs/chromium.md +838 -0
  40. package/src/installs/claude-code.js +558 -26
  41. package/src/installs/claude-code.md +1173 -0
  42. package/src/installs/curl.js +361 -26
  43. package/src/installs/curl.md +714 -0
  44. package/src/installs/cursor.js +561 -26
  45. package/src/installs/cursor.md +970 -0
  46. package/src/installs/dbschema.js +674 -26
  47. package/src/installs/dbschema.md +925 -0
  48. package/src/installs/dependencies.md +435 -0
  49. package/src/installs/development-tools.js +600 -0
  50. package/src/installs/development-tools.md +977 -0
  51. package/src/installs/docker.js +1010 -25
  52. package/src/installs/docker.md +1109 -0
  53. package/src/installs/drawio.js +1001 -26
  54. package/src/installs/drawio.md +795 -0
  55. package/src/installs/elmedia-player.js +328 -25
  56. package/src/installs/elmedia-player.md +556 -0
  57. package/src/installs/ffmpeg.js +870 -25
  58. package/src/installs/ffmpeg.md +852 -0
  59. package/src/installs/file.js +464 -0
  60. package/src/installs/file.md +987 -0
  61. package/src/installs/gemini-cli.js +793 -26
  62. package/src/installs/gemini-cli.md +1153 -0
  63. package/src/installs/git.js +382 -26
  64. package/src/installs/git.md +907 -0
  65. package/src/installs/gitego.js +931 -26
  66. package/src/installs/gitego.md +1172 -0
  67. package/src/installs/go.js +913 -26
  68. package/src/installs/go.md +958 -0
  69. package/src/installs/google-chrome.js +801 -25
  70. package/src/installs/google-chrome.md +862 -0
  71. package/src/installs/gpg.js +412 -73
  72. package/src/installs/gpg.md +1056 -0
  73. package/src/installs/homebrew.js +1015 -26
  74. package/src/installs/homebrew.md +988 -0
  75. package/src/installs/imageoptim.js +950 -26
  76. package/src/installs/imageoptim.md +1119 -0
  77. package/src/installs/installers.json +2297 -0
  78. package/src/installs/jq.js +382 -26
  79. package/src/installs/jq.md +809 -0
  80. package/src/installs/keyboard-maestro.js +701 -26
  81. package/src/installs/keyboard-maestro.md +825 -0
  82. package/src/installs/latex.js +771 -26
  83. package/src/installs/latex.md +1095 -0
  84. package/src/installs/lftp.js +338 -26
  85. package/src/installs/lftp.md +907 -0
  86. package/src/installs/lsb-release.js +346 -0
  87. package/src/installs/lsb-release.md +814 -0
  88. package/src/installs/messenger.js +829 -26
  89. package/src/installs/messenger.md +900 -0
  90. package/src/installs/microsoft-office.js +550 -26
  91. package/src/installs/microsoft-office.md +760 -0
  92. package/src/installs/microsoft-teams.js +782 -25
  93. package/src/installs/microsoft-teams.md +886 -0
  94. package/src/installs/node.js +886 -26
  95. package/src/installs/node.md +1153 -0
  96. package/src/installs/nordpass.js +698 -26
  97. package/src/installs/nordpass.md +921 -0
  98. package/src/installs/nvm.js +977 -26
  99. package/src/installs/nvm.md +1057 -0
  100. package/src/installs/openssh.js +734 -64
  101. package/src/installs/openssh.md +1056 -0
  102. package/src/installs/pandoc.js +644 -26
  103. package/src/installs/pandoc.md +1036 -0
  104. package/src/installs/pinentry.js +492 -26
  105. package/src/installs/pinentry.md +1142 -0
  106. package/src/installs/pngyu.js +851 -26
  107. package/src/installs/pngyu.md +896 -0
  108. package/src/installs/postman.js +781 -26
  109. package/src/installs/postman.md +940 -0
  110. package/src/installs/procps.js +425 -0
  111. package/src/installs/procps.md +851 -0
  112. package/src/installs/safari-tech-preview.js +355 -25
  113. package/src/installs/safari-tech-preview.md +533 -0
  114. package/src/installs/sfnt2woff.js +640 -26
  115. package/src/installs/sfnt2woff.md +795 -0
  116. package/src/installs/shellcheck.js +463 -26
  117. package/src/installs/shellcheck.md +1005 -0
  118. package/src/installs/slack.js +722 -25
  119. package/src/installs/slack.md +865 -0
  120. package/src/installs/snagit.js +566 -25
  121. package/src/installs/snagit.md +844 -0
  122. package/src/installs/software-properties-common.js +372 -0
  123. package/src/installs/software-properties-common.md +805 -0
  124. package/src/installs/spotify.js +858 -25
  125. package/src/installs/spotify.md +901 -0
  126. package/src/installs/studio-3t.js +803 -26
  127. package/src/installs/studio-3t.md +918 -0
  128. package/src/installs/sublime-text.js +780 -25
  129. package/src/installs/sublime-text.md +914 -0
  130. package/src/installs/superwhisper.js +687 -25
  131. package/src/installs/superwhisper.md +630 -0
  132. package/src/installs/tailscale.js +727 -26
  133. package/src/installs/tailscale.md +1100 -0
  134. package/src/installs/tar.js +389 -0
  135. package/src/installs/tar.md +946 -0
  136. package/src/installs/termius.js +780 -26
  137. package/src/installs/termius.md +844 -0
  138. package/src/installs/terraform.js +761 -26
  139. package/src/installs/terraform.md +899 -0
  140. package/src/installs/tidal.js +752 -25
  141. package/src/installs/tidal.md +864 -0
  142. package/src/installs/tmux.js +328 -26
  143. package/src/installs/tmux.md +1030 -0
  144. package/src/installs/tree.js +393 -26
  145. package/src/installs/tree.md +833 -0
  146. package/src/installs/unzip.js +460 -0
  147. package/src/installs/unzip.md +879 -0
  148. package/src/installs/vim.js +403 -26
  149. package/src/installs/vim.md +1040 -0
  150. package/src/installs/vlc.js +803 -26
  151. package/src/installs/vlc.md +927 -0
  152. package/src/installs/vscode.js +825 -26
  153. package/src/installs/vscode.md +1002 -0
  154. package/src/installs/wget.js +415 -0
  155. package/src/installs/wget.md +791 -0
  156. package/src/installs/whatsapp.js +710 -25
  157. package/src/installs/whatsapp.md +854 -0
  158. package/src/installs/winpty.js +352 -0
  159. package/src/installs/winpty.md +620 -0
  160. package/src/installs/woff2.js +535 -26
  161. package/src/installs/woff2.md +977 -0
  162. package/src/installs/wsl.js +572 -0
  163. package/src/installs/wsl.md +699 -0
  164. package/src/installs/xcode-clt.js +520 -0
  165. package/src/installs/xcode-clt.md +351 -0
  166. package/src/installs/xcode.js +542 -26
  167. package/src/installs/xcode.md +573 -0
  168. package/src/installs/yarn.js +806 -26
  169. package/src/installs/yarn.md +1074 -0
  170. package/src/installs/yq.js +636 -26
  171. package/src/installs/yq.md +944 -0
  172. package/src/installs/yt-dlp.js +683 -26
  173. package/src/installs/yt-dlp.md +946 -0
  174. package/src/installs/yum-utils.js +297 -0
  175. package/src/installs/yum-utils.md +648 -0
  176. package/src/installs/zoom.js +740 -25
  177. package/src/installs/zoom.md +884 -0
  178. package/src/scripts/README.md +567 -45
  179. package/src/scripts/STATUS.md +208 -0
  180. package/src/scripts/afk.js +395 -7
  181. package/src/scripts/backup-all.js +731 -9
  182. package/src/scripts/backup-source.js +711 -8
  183. package/src/scripts/brewd.js +373 -7
  184. package/src/scripts/brewi.js +505 -9
  185. package/src/scripts/brewr.js +512 -9
  186. package/src/scripts/brews.js +462 -9
  187. package/src/scripts/brewu.js +488 -7
  188. package/src/scripts/c.js +185 -7
  189. package/src/scripts/ccurl.js +325 -8
  190. package/src/scripts/certbot-crontab-init.js +488 -8
  191. package/src/scripts/certbot-init.js +641 -9
  192. package/src/scripts/ch.js +339 -7
  193. package/src/scripts/claude-danger.js +253 -8
  194. package/src/scripts/clean-dev.js +419 -8
  195. package/src/scripts/clear-dns-cache.js +525 -7
  196. package/src/scripts/clone.js +417 -7
  197. package/src/scripts/code-all.js +420 -7
  198. package/src/scripts/count-files.js +195 -8
  199. package/src/scripts/count-folders.js +195 -8
  200. package/src/scripts/count.js +248 -8
  201. package/src/scripts/d.js +203 -7
  202. package/src/scripts/datauri.js +373 -8
  203. package/src/scripts/delete-files.js +363 -7
  204. package/src/scripts/docker-clean.js +410 -8
  205. package/src/scripts/dp.js +426 -7
  206. package/src/scripts/e.js +375 -9
  207. package/src/scripts/empty-trash.js +497 -7
  208. package/src/scripts/evm.js +428 -9
  209. package/src/scripts/fetch-github-repos.js +441 -10
  210. package/src/scripts/get-channel.js +329 -8
  211. package/src/scripts/get-course.js +384 -11
  212. package/src/scripts/get-dependencies.js +290 -9
  213. package/src/scripts/get-folder.js +783 -10
  214. package/src/scripts/get-tunes.js +411 -10
  215. package/src/scripts/get-video.js +352 -9
  216. package/src/scripts/git-backup.js +561 -9
  217. package/src/scripts/git-clone.js +477 -9
  218. package/src/scripts/git-pup.js +303 -7
  219. package/src/scripts/git-push.js +380 -8
  220. package/src/scripts/h.js +607 -9
  221. package/src/scripts/hide-desktop-icons.js +483 -7
  222. package/src/scripts/hide-hidden-files.js +522 -7
  223. package/src/scripts/install-dependencies-from.js +440 -9
  224. package/src/scripts/ips.js +647 -10
  225. package/src/scripts/iso.js +354 -8
  226. package/src/scripts/killni.js +561 -7
  227. package/src/scripts/ll.js +451 -8
  228. package/src/scripts/local-ip.js +310 -8
  229. package/src/scripts/m.js +508 -8
  230. package/src/scripts/map.js +293 -8
  231. package/src/scripts/mkd.js +287 -7
  232. package/src/scripts/ncu-update-all.js +441 -8
  233. package/src/scripts/nginx-init.js +702 -12
  234. package/src/scripts/npmi.js +366 -7
  235. package/src/scripts/o.js +495 -8
  236. package/src/scripts/org-by-date.js +321 -7
  237. package/src/scripts/p.js +208 -7
  238. package/src/scripts/packages.js +313 -8
  239. package/src/scripts/path.js +209 -7
  240. package/src/scripts/ports.js +582 -8
  241. package/src/scripts/q.js +290 -8
  242. package/src/scripts/refresh-files.js +378 -10
  243. package/src/scripts/remove-smaller-files.js +500 -8
  244. package/src/scripts/rename-files-with-date.js +517 -9
  245. package/src/scripts/resize-image.js +523 -9
  246. package/src/scripts/rm-safe.js +653 -8
  247. package/src/scripts/s.js +525 -9
  248. package/src/scripts/set-git-public.js +349 -7
  249. package/src/scripts/show-desktop-icons.js +459 -7
  250. package/src/scripts/show-hidden-files.js +456 -7
  251. package/src/scripts/tpa.js +265 -8
  252. package/src/scripts/tpo.js +264 -7
  253. package/src/scripts/u.js +489 -7
  254. package/src/scripts/vpush.js +422 -8
  255. package/src/scripts/y.js +267 -7
  256. package/src/utils/common/os.js +94 -2
  257. package/src/utils/ubuntu/apt.js +13 -7
  258. package/src/utils/windows/choco.js +82 -26
  259. package/src/utils/windows/winget.js +89 -27
@@ -0,0 +1,620 @@
1
+ # Installing winpty
2
+
3
+ ## Overview
4
+
5
+ winpty is a Windows software package that provides an interface similar to a Unix pty-master for communicating with Windows console programs. It enables interactive console applications (like Python REPL, Node.js REPL, and Docker) to work correctly in terminal emulators that do not natively support Windows console programs, such as MinTTY (used by Git Bash), Cygwin terminals, and MSYS2.
6
+
7
+ The package consists of:
8
+
9
+ - **libwinpty** - A library for embedding pty functionality
10
+ - **winpty.exe** - A command-line wrapper for running Windows console programs
11
+ - **winpty-agent.exe** - A background process that bridges between console API and terminal I/O
12
+
13
+ winpty works by starting a hidden console window via winpty-agent.exe, which bridges between the Windows console API and terminal input/output escape codes. It polls the hidden console's screen buffer for changes and generates corresponding output streams.
14
+
15
+ **Important**: winpty is a Windows-only tool. It is not needed on Unix-like systems (macOS, Linux) because those operating systems have native pseudoterminal (PTY) support built into the kernel.
16
+
17
+ This guide documents winpty installation procedures for all platforms supported by DevUtils CLI.
18
+
19
+ ## Dependencies
20
+
21
+ ### macOS (Homebrew)
22
+ - **Required:** None
23
+ - **Note:** winpty is Windows-only and is not applicable to macOS. macOS has native PTY support.
24
+
25
+ ### Ubuntu (APT/Snap)
26
+ - **Required:** None
27
+ - **Note:** winpty is Windows-only and is not applicable to Ubuntu/Linux. Linux has native PTY support via `/dev/pts`.
28
+
29
+ ### Raspberry Pi OS (APT/Snap)
30
+ - **Required:** None
31
+ - **Note:** winpty is Windows-only and is not applicable to Raspberry Pi OS. Linux has native PTY support.
32
+
33
+ ### Amazon Linux (DNF/YUM)
34
+ - **Required:** None
35
+ - **Note:** winpty is Windows-only and is not applicable to Amazon Linux. Linux has native PTY support.
36
+
37
+ ### Windows (Chocolatey/winget)
38
+ - **Required:** None (winpty is bundled with Git for Windows by default)
39
+ - **Optional:**
40
+ - `git` - If Git for Windows is installed, winpty is already available via `choco install git -y`
41
+ - **Auto-installed:** None
42
+
43
+ ### Git Bash (Manual/Portable)
44
+ - **Required:**
45
+ - `git` - Git for Windows must be installed. Install via `choco install git -y` from an Administrator PowerShell/CMD. winpty is bundled with Git for Windows.
46
+ - **Optional:** None
47
+ - **Auto-installed:** winpty is automatically installed as part of Git for Windows
48
+
49
+ ## Prerequisites
50
+
51
+ Before installing winpty on any platform, understand these key points:
52
+
53
+ 1. **winpty is Windows-only** - It solves a Windows-specific problem where terminal emulators like MinTTY cannot directly communicate with Windows console programs
54
+ 2. **Git for Windows includes winpty** - If you have Git Bash installed, you already have winpty
55
+ 3. **No installation needed on Unix systems** - macOS, Linux, and other Unix-like systems have native PTY support and do not need winpty
56
+
57
+ ## Platform-Specific Installation
58
+
59
+ ### macOS (Homebrew)
60
+
61
+ #### Not Applicable
62
+
63
+ winpty is a Windows-only utility and is not available or needed on macOS.
64
+
65
+ **Why winpty is not needed on macOS:**
66
+
67
+ macOS is a Unix-based operating system with native pseudoterminal (PTY) support built into the kernel. The PTY system in macOS allows terminal emulators (like Terminal.app, iTerm2) to communicate directly with console programs without requiring a translation layer.
68
+
69
+ The functionality that winpty provides on Windows (bridging between terminal emulators and console programs) is handled natively by macOS through:
70
+
71
+ - The `/dev/pty*` device files
72
+ - The `posix_openpt()` and related POSIX functions
73
+ - Native support in all macOS terminal emulators
74
+
75
+ **If you are looking for PTY-related functionality for development:**
76
+
77
+ ```bash
78
+ # Python's built-in pty module (no installation needed)
79
+ python3 -c "import pty; print('PTY support available')"
80
+
81
+ # For more advanced PTY handling in Python
82
+ brew install --quiet pexpect
83
+ pip3 install pexpect
84
+ ```
85
+
86
+ ---
87
+
88
+ ### Ubuntu/Debian (APT)
89
+
90
+ #### Not Applicable
91
+
92
+ winpty is a Windows-only utility and is not available or needed on Ubuntu/Debian Linux.
93
+
94
+ **Why winpty is not needed on Ubuntu:**
95
+
96
+ Ubuntu and Debian are Linux distributions with native pseudoterminal (PTY) support built into the kernel. The PTY subsystem in Linux allows terminal emulators (like GNOME Terminal, Konsole, xterm) to communicate directly with console programs.
97
+
98
+ Linux provides PTY functionality through:
99
+
100
+ - The `/dev/pts` filesystem (devpts)
101
+ - The `posix_openpt()`, `grantpt()`, `unlockpt()`, and `ptsname()` functions
102
+ - Native kernel support via the `CONFIG_UNIX98_PTYS` option
103
+
104
+ **If you are looking for PTY-related functionality for development:**
105
+
106
+ ```bash
107
+ # Python's built-in pty module (no installation needed)
108
+ python3 -c "import pty; print('PTY support available')"
109
+
110
+ # For more advanced PTY handling in Python
111
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y python3-pexpect
112
+ ```
113
+
114
+ ---
115
+
116
+ ### Raspberry Pi OS (APT)
117
+
118
+ #### Not Applicable
119
+
120
+ winpty is a Windows-only utility and is not available or needed on Raspberry Pi OS.
121
+
122
+ **Why winpty is not needed on Raspberry Pi OS:**
123
+
124
+ Raspberry Pi OS is based on Debian Linux and has native pseudoterminal (PTY) support built into the kernel. This applies to both 32-bit (armhf) and 64-bit (arm64) versions of Raspberry Pi OS.
125
+
126
+ The PTY system works identically to standard Linux:
127
+
128
+ - PTY devices are available at `/dev/pts/*`
129
+ - All terminal emulators communicate directly with console programs
130
+ - No translation layer is required
131
+
132
+ **If you are looking for PTY-related functionality for development:**
133
+
134
+ ```bash
135
+ # Python's built-in pty module (no installation needed)
136
+ python3 -c "import pty; print('PTY support available')"
137
+
138
+ # For more advanced PTY handling in Python
139
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y python3-pexpect
140
+ ```
141
+
142
+ ---
143
+
144
+ ### Amazon Linux (DNF/YUM)
145
+
146
+ #### Not Applicable
147
+
148
+ winpty is a Windows-only utility and is not available or needed on Amazon Linux.
149
+
150
+ **Why winpty is not needed on Amazon Linux:**
151
+
152
+ Amazon Linux (both AL2 and AL2023) is a Linux distribution with native pseudoterminal (PTY) support built into the kernel. Whether running on EC2 instances or other environments, PTY support is available out of the box.
153
+
154
+ **If you are looking for PTY-related functionality for development:**
155
+
156
+ **For Amazon Linux 2023:**
157
+
158
+ ```bash
159
+ # Python's built-in pty module (no installation needed)
160
+ python3 -c "import pty; print('PTY support available')"
161
+
162
+ # For more advanced PTY handling in Python
163
+ sudo dnf install -y python3-pexpect
164
+ ```
165
+
166
+ **For Amazon Linux 2:**
167
+
168
+ ```bash
169
+ # Python's built-in pty module (no installation needed)
170
+ python3 -c "import pty; print('PTY support available')"
171
+
172
+ # For more advanced PTY handling in Python
173
+ sudo yum install -y python3-pexpect
174
+ ```
175
+
176
+ ---
177
+
178
+ ### Windows (Git for Windows - Recommended)
179
+
180
+ #### Prerequisites
181
+
182
+ - Windows 10 version 1903 or higher (64-bit), or Windows 11
183
+ - Administrator PowerShell or Command Prompt
184
+ - Internet connectivity
185
+
186
+ **Important**: winpty is bundled with Git for Windows. If you have Git for Windows installed, winpty is already available. This is the recommended approach because Git for Windows is widely used and includes winpty automatically.
187
+
188
+ #### Installation Steps
189
+
190
+ **Option: Install Git for Windows (includes winpty)**
191
+
192
+ Run the following command in an Administrator PowerShell or Command Prompt:
193
+
194
+ ```powershell
195
+ choco install git -y
196
+ ```
197
+
198
+ The `-y` flag automatically confirms all prompts, enabling fully non-interactive installation. This installs:
199
+
200
+ - Git command-line tools
201
+ - Git Bash (MinTTY terminal)
202
+ - winpty (for interactive console program support in MinTTY)
203
+ - Git Credential Manager
204
+
205
+ After installation, close and reopen your terminal to ensure PATH changes take effect.
206
+
207
+ #### Verification
208
+
209
+ Open Git Bash and verify winpty is available:
210
+
211
+ ```bash
212
+ which winpty
213
+ ```
214
+
215
+ Expected output:
216
+
217
+ ```
218
+ /usr/bin/winpty
219
+ ```
220
+
221
+ Test winpty by running an interactive program:
222
+
223
+ ```bash
224
+ winpty cmd.exe
225
+ ```
226
+
227
+ This should open a Windows Command Prompt within Git Bash. Type `exit` to return to Git Bash.
228
+
229
+ Verify the version (winpty does not have a `--version` flag, but you can check it exists):
230
+
231
+ ```bash
232
+ winpty --help
233
+ ```
234
+
235
+ Expected output includes usage information:
236
+
237
+ ```
238
+ Usage: winpty [options] [--] program [args]
239
+ ...
240
+ ```
241
+
242
+ #### Troubleshooting
243
+
244
+ **Problem**: `winpty: command not found` in Git Bash
245
+
246
+ **Solution**: winpty is included with Git for Windows. If Git Bash is installed but winpty is missing, your Git for Windows installation may be corrupted or very old. Reinstall Git for Windows:
247
+
248
+ ```powershell
249
+ choco uninstall git -y
250
+ choco install git -y
251
+ ```
252
+
253
+ **Problem**: winpty is present but interactive programs still do not work
254
+
255
+ **Solution**: Ensure you are prefixing the command with `winpty`:
256
+
257
+ ```bash
258
+ # Wrong - may not work with interactive programs
259
+ python
260
+
261
+ # Correct - use winpty prefix
262
+ winpty python
263
+ ```
264
+
265
+ **Problem**: "the input device is not a TTY" error
266
+
267
+ **Solution**: This error occurs when running interactive programs without winpty in Git Bash. Use the winpty prefix:
268
+
269
+ ```bash
270
+ winpty docker run -it ubuntu bash
271
+ winpty python
272
+ winpty node
273
+ ```
274
+
275
+ **Problem**: winpty breaks piping or redirection
276
+
277
+ **Solution**: winpty is designed for interactive use, not for piping. When piping data, run commands without winpty:
278
+
279
+ ```bash
280
+ # Without winpty for piping
281
+ echo "print('hello')" | python
282
+
283
+ # With winpty for interactive use
284
+ winpty python
285
+ ```
286
+
287
+ ---
288
+
289
+ ### WSL (Ubuntu)
290
+
291
+ #### Not Applicable
292
+
293
+ winpty is a Windows-only utility and is not needed within WSL.
294
+
295
+ **Why winpty is not needed in WSL:**
296
+
297
+ WSL (Windows Subsystem for Linux) runs a real Linux kernel (WSL 2) or a Linux-compatible layer (WSL 1). Within WSL, you have native Linux PTY support through the kernel, just like any other Linux distribution.
298
+
299
+ The WSL terminal environment communicates with programs using standard Linux PTY mechanisms, so winpty is unnecessary.
300
+
301
+ **Important distinction:**
302
+
303
+ - **Inside WSL**: You are running Linux; use native PTY (no winpty needed)
304
+ - **In Windows outside WSL**: Use winpty with Git Bash/MinTTY for interactive Windows console programs
305
+
306
+ **If you are looking for PTY-related functionality for development in WSL:**
307
+
308
+ ```bash
309
+ # Python's built-in pty module (no installation needed)
310
+ python3 -c "import pty; print('PTY support available')"
311
+
312
+ # For more advanced PTY handling in Python
313
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y python3-pexpect
314
+ ```
315
+
316
+ ---
317
+
318
+ ### Git Bash (Bundled Installation)
319
+
320
+ #### Prerequisites
321
+
322
+ - Windows 10 or Windows 11 (64-bit)
323
+ - Git for Windows installed
324
+ - Internet connectivity (for initial Git installation)
325
+
326
+ **Note**: winpty is automatically included with Git for Windows. When you install Git for Windows, winpty is installed as part of the package and is immediately available in Git Bash.
327
+
328
+ #### Installation Steps
329
+
330
+ winpty is bundled with Git for Windows. To install or reinstall Git for Windows (which includes winpty), run the following command in an Administrator PowerShell or Command Prompt:
331
+
332
+ ```powershell
333
+ choco install git -y
334
+ ```
335
+
336
+ The `-y` flag automatically confirms all prompts, enabling fully non-interactive installation.
337
+
338
+ After installation, close and reopen Git Bash to ensure the updated PATH is loaded.
339
+
340
+ **Launching Git Bash:**
341
+
342
+ - From Start Menu: Search for "Git Bash"
343
+ - From Command Prompt: Run `"C:\Program Files\Git\bin\bash.exe"`
344
+ - From File Explorer: Right-click in a folder and select "Git Bash Here"
345
+
346
+ #### Verification
347
+
348
+ In Git Bash, verify winpty is available:
349
+
350
+ ```bash
351
+ which winpty
352
+ ```
353
+
354
+ Expected output:
355
+
356
+ ```
357
+ /usr/bin/winpty
358
+ ```
359
+
360
+ Test winpty with an interactive command:
361
+
362
+ ```bash
363
+ winpty python --version
364
+ ```
365
+
366
+ Or start an interactive Python session:
367
+
368
+ ```bash
369
+ winpty python
370
+ ```
371
+
372
+ Expected behavior: Python REPL opens and accepts input. Type `exit()` or press Ctrl+D to exit.
373
+
374
+ Check the winpty installation location:
375
+
376
+ ```bash
377
+ ls -la /usr/bin/winpty*
378
+ ```
379
+
380
+ Expected output shows multiple winpty files:
381
+
382
+ ```
383
+ -rwxr-xr-x 1 user group xxxxx /usr/bin/winpty
384
+ -rwxr-xr-x 1 user group xxxxx /usr/bin/winpty-agent
385
+ -rwxr-xr-x 1 user group xxxxx /usr/bin/winpty-debugserver
386
+ ```
387
+
388
+ #### Troubleshooting
389
+
390
+ **Problem**: Interactive commands do not display properly or hang
391
+
392
+ **Solution**: Prefix interactive Windows console programs with `winpty`:
393
+
394
+ ```bash
395
+ # Interactive Python
396
+ winpty python
397
+
398
+ # Interactive Node.js
399
+ winpty node
400
+
401
+ # Interactive Docker container
402
+ winpty docker run -it ubuntu bash
403
+
404
+ # Interactive MySQL client
405
+ winpty mysql -u root -p
406
+ ```
407
+
408
+ **Problem**: Creating aliases for common interactive programs
409
+
410
+ **Solution**: Add aliases to your `~/.bashrc` file:
411
+
412
+ ```bash
413
+ # Add these lines to ~/.bashrc
414
+ echo 'alias python="winpty python"' >> ~/.bashrc
415
+ echo 'alias node="winpty node"' >> ~/.bashrc
416
+ echo 'alias ipython="winpty ipython"' >> ~/.bashrc
417
+ source ~/.bashrc
418
+ ```
419
+
420
+ **Problem**: winpty causes issues with non-interactive commands
421
+
422
+ **Solution**: winpty is only needed for interactive use. For scripts and piping, run commands without winpty:
423
+
424
+ ```bash
425
+ # Without winpty for non-interactive use
426
+ python script.py
427
+ node app.js
428
+ echo "SELECT 1;" | mysql -u root
429
+
430
+ # With winpty for interactive use
431
+ winpty python
432
+ winpty node
433
+ winpty mysql -u root -p
434
+ ```
435
+
436
+ **Problem**: "stdout is not a tty" error
437
+
438
+ **Solution**: This can occur when winpty interferes with piping. Run without winpty for piped commands:
439
+
440
+ ```bash
441
+ # This may fail
442
+ winpty python -c "print('hello')" | grep hello
443
+
444
+ # This works
445
+ python -c "print('hello')" | grep hello
446
+ ```
447
+
448
+ **Problem**: MSYS path conversion issues with winpty
449
+
450
+ **Solution**: Git Bash/MSYS2 converts Unix-style paths to Windows paths automatically. To prevent this:
451
+
452
+ ```bash
453
+ MSYS_NO_PATHCONV=1 winpty some-command /path/to/file
454
+ ```
455
+
456
+ ---
457
+
458
+ ## Post-Installation Configuration
459
+
460
+ ### Creating Shell Aliases for Common Programs
461
+
462
+ If you frequently use interactive programs in Git Bash, create aliases to automatically use winpty:
463
+
464
+ ```bash
465
+ # Open ~/.bashrc in an editor
466
+ notepad ~/.bashrc
467
+ ```
468
+
469
+ Add the following aliases:
470
+
471
+ ```bash
472
+ # Interactive program aliases for Git Bash
473
+ alias python='winpty python'
474
+ alias python3='winpty python3'
475
+ alias node='winpty node'
476
+ alias ipython='winpty ipython'
477
+ alias php='winpty php -a'
478
+ alias mysql='winpty mysql'
479
+ alias psql='winpty psql'
480
+ alias mongo='winpty mongo'
481
+ alias redis-cli='winpty redis-cli'
482
+ ```
483
+
484
+ Reload your shell configuration:
485
+
486
+ ```bash
487
+ source ~/.bashrc
488
+ ```
489
+
490
+ ### Conditional Aliases (Optional)
491
+
492
+ For more sophisticated setups, you can create conditional aliases that only apply winpty when running interactively:
493
+
494
+ ```bash
495
+ # Add to ~/.bashrc
496
+ if [ -t 1 ]; then
497
+ # Only apply these aliases when running in an interactive terminal
498
+ alias python='winpty python'
499
+ alias node='winpty node'
500
+ fi
501
+ ```
502
+
503
+ ---
504
+
505
+ ## Common Issues
506
+
507
+ ### Issue: "the input device is not a TTY"
508
+
509
+ **Symptoms**: Error message when running Docker, Python, or Node.js interactively in Git Bash
510
+
511
+ **Solution**: This is the primary use case for winpty. Prefix your command with `winpty`:
512
+
513
+ ```bash
514
+ # Instead of:
515
+ docker run -it ubuntu bash
516
+
517
+ # Use:
518
+ winpty docker run -it ubuntu bash
519
+ ```
520
+
521
+ ### Issue: Arrow Keys and Special Keys Not Working
522
+
523
+ **Symptoms**: Arrow keys produce escape sequences like `^[[A` instead of navigating
524
+
525
+ **Solution**: Use winpty to enable proper key handling:
526
+
527
+ ```bash
528
+ winpty python
529
+ winpty node
530
+ ```
531
+
532
+ ### Issue: Colored Output Not Displaying
533
+
534
+ **Symptoms**: Programs that should show colored output display plain text or escape codes
535
+
536
+ **Solution**: winpty handles ANSI escape sequences. Ensure you are using winpty:
537
+
538
+ ```bash
539
+ winpty npm test
540
+ ```
541
+
542
+ ### Issue: Programs Hang or Freeze
543
+
544
+ **Symptoms**: Interactive programs become unresponsive in Git Bash
545
+
546
+ **Solutions**:
547
+
548
+ 1. Use winpty:
549
+ ```bash
550
+ winpty program-name
551
+ ```
552
+
553
+ 2. If using winpty already, try running without it (for non-interactive use):
554
+ ```bash
555
+ program-name --some-flag
556
+ ```
557
+
558
+ 3. Try running in Windows Command Prompt instead of Git Bash for problematic programs
559
+
560
+ ### Issue: winpty Not Available After Git Update
561
+
562
+ **Symptoms**: winpty stops working after updating Git for Windows
563
+
564
+ **Solution**: Reinstall Git for Windows to ensure all components are properly installed:
565
+
566
+ ```powershell
567
+ choco uninstall git -y
568
+ choco install git -y
569
+ ```
570
+
571
+ ### Issue: Incorrect Path Handling
572
+
573
+ **Symptoms**: File paths are mangled or converted incorrectly when using winpty
574
+
575
+ **Solution**: Disable MSYS path conversion for specific commands:
576
+
577
+ ```bash
578
+ MSYS_NO_PATHCONV=1 winpty command /path/to/file
579
+ ```
580
+
581
+ Or use Windows-style paths:
582
+
583
+ ```bash
584
+ winpty command "C:\path\to\file"
585
+ ```
586
+
587
+ ---
588
+
589
+ ## How winpty Works
590
+
591
+ Understanding how winpty works can help troubleshoot issues:
592
+
593
+ 1. **Problem**: MinTTY (Git Bash's terminal) uses Unix-style PTY communication, but Windows console programs expect Windows Console API calls.
594
+
595
+ 2. **Solution**: winpty creates a hidden Windows console window and runs the target program in it. The winpty-agent process monitors this hidden console and translates:
596
+ - Keyboard input from MinTTY into Windows console input events
597
+ - Console screen buffer changes into terminal escape sequences for MinTTY
598
+
599
+ 3. **Architecture**:
600
+ ```
601
+ MinTTY <-> winpty.exe <-> winpty-agent.exe <-> Hidden Console <-> Target Program
602
+ ```
603
+
604
+ 4. **Limitations**:
605
+ - winpty adds overhead compared to native console programs
606
+ - Some advanced console features may not translate perfectly
607
+ - Piping and redirection should be done without winpty
608
+
609
+ ---
610
+
611
+ ## References
612
+
613
+ - [winpty GitHub Repository](https://github.com/rprichard/winpty)
614
+ - [winpty Releases](https://github.com/rprichard/winpty/releases)
615
+ - [Git for Windows](https://gitforwindows.org/)
616
+ - [Git for Windows FAQ](https://gitforwindows.org/faq)
617
+ - [MSYS2 winpty Package](https://packages.msys2.org/packages/winpty)
618
+ - [Scoop winpty Package](https://bjansen.github.io/scoop-apps/extras/winpty/)
619
+ - [MinTTY Terminal](https://mintty.github.io/)
620
+ - [Windows Console and Terminal Ecosystem](https://docs.microsoft.com/en-us/windows/console/)