@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.
- package/README.md +5 -5
- package/package.json +1 -1
- package/src/commands/install.js +374 -36
- package/src/installs/adobe-creative-cloud.js +527 -25
- package/src/installs/adobe-creative-cloud.md +605 -0
- package/src/installs/appcleaner.js +303 -26
- package/src/installs/appcleaner.md +699 -0
- package/src/installs/apt-transport-https.js +390 -0
- package/src/installs/apt-transport-https.md +678 -0
- package/src/installs/atomicparsley.js +624 -26
- package/src/installs/atomicparsley.md +795 -0
- package/src/installs/aws-cli.js +779 -26
- package/src/installs/aws-cli.md +727 -0
- package/src/installs/balena-etcher.js +688 -26
- package/src/installs/balena-etcher.md +761 -0
- package/src/installs/bambu-studio.js +912 -26
- package/src/installs/bambu-studio.md +780 -0
- package/src/installs/bash-completion.js +554 -23
- package/src/installs/bash-completion.md +833 -0
- package/src/installs/bash.js +399 -26
- package/src/installs/bash.md +993 -0
- package/src/installs/beyond-compare.js +585 -26
- package/src/installs/beyond-compare.md +813 -0
- package/src/installs/build-essential.js +511 -26
- package/src/installs/build-essential.md +977 -0
- package/src/installs/ca-certificates.js +618 -0
- package/src/installs/ca-certificates.md +937 -0
- package/src/installs/caffeine.js +490 -26
- package/src/installs/caffeine.md +839 -0
- package/src/installs/camtasia.js +577 -25
- package/src/installs/camtasia.md +762 -0
- package/src/installs/chatgpt.js +458 -26
- package/src/installs/chatgpt.md +814 -0
- package/src/installs/chocolatey.js +447 -0
- package/src/installs/chocolatey.md +661 -0
- package/src/installs/chrome-canary.js +472 -26
- package/src/installs/chrome-canary.md +641 -0
- package/src/installs/chromium.js +645 -26
- package/src/installs/chromium.md +838 -0
- package/src/installs/claude-code.js +558 -26
- package/src/installs/claude-code.md +1173 -0
- package/src/installs/curl.js +361 -26
- package/src/installs/curl.md +714 -0
- package/src/installs/cursor.js +561 -26
- package/src/installs/cursor.md +970 -0
- package/src/installs/dbschema.js +674 -26
- package/src/installs/dbschema.md +925 -0
- package/src/installs/dependencies.md +435 -0
- package/src/installs/development-tools.js +600 -0
- package/src/installs/development-tools.md +977 -0
- package/src/installs/docker.js +1010 -25
- package/src/installs/docker.md +1109 -0
- package/src/installs/drawio.js +1001 -26
- package/src/installs/drawio.md +795 -0
- package/src/installs/elmedia-player.js +328 -25
- package/src/installs/elmedia-player.md +556 -0
- package/src/installs/ffmpeg.js +870 -25
- package/src/installs/ffmpeg.md +852 -0
- package/src/installs/file.js +464 -0
- package/src/installs/file.md +987 -0
- package/src/installs/gemini-cli.js +793 -26
- package/src/installs/gemini-cli.md +1153 -0
- package/src/installs/git.js +382 -26
- package/src/installs/git.md +907 -0
- package/src/installs/gitego.js +931 -26
- package/src/installs/gitego.md +1172 -0
- package/src/installs/go.js +913 -26
- package/src/installs/go.md +958 -0
- package/src/installs/google-chrome.js +801 -25
- package/src/installs/google-chrome.md +862 -0
- package/src/installs/gpg.js +412 -73
- package/src/installs/gpg.md +1056 -0
- package/src/installs/homebrew.js +1015 -26
- package/src/installs/homebrew.md +988 -0
- package/src/installs/imageoptim.js +950 -26
- package/src/installs/imageoptim.md +1119 -0
- package/src/installs/installers.json +2297 -0
- package/src/installs/jq.js +382 -26
- package/src/installs/jq.md +809 -0
- package/src/installs/keyboard-maestro.js +701 -26
- package/src/installs/keyboard-maestro.md +825 -0
- package/src/installs/latex.js +771 -26
- package/src/installs/latex.md +1095 -0
- package/src/installs/lftp.js +338 -26
- package/src/installs/lftp.md +907 -0
- package/src/installs/lsb-release.js +346 -0
- package/src/installs/lsb-release.md +814 -0
- package/src/installs/messenger.js +829 -26
- package/src/installs/messenger.md +900 -0
- package/src/installs/microsoft-office.js +550 -26
- package/src/installs/microsoft-office.md +760 -0
- package/src/installs/microsoft-teams.js +782 -25
- package/src/installs/microsoft-teams.md +886 -0
- package/src/installs/node.js +886 -26
- package/src/installs/node.md +1153 -0
- package/src/installs/nordpass.js +698 -26
- package/src/installs/nordpass.md +921 -0
- package/src/installs/nvm.js +977 -26
- package/src/installs/nvm.md +1057 -0
- package/src/installs/openssh.js +734 -64
- package/src/installs/openssh.md +1056 -0
- package/src/installs/pandoc.js +644 -26
- package/src/installs/pandoc.md +1036 -0
- package/src/installs/pinentry.js +492 -26
- package/src/installs/pinentry.md +1142 -0
- package/src/installs/pngyu.js +851 -26
- package/src/installs/pngyu.md +896 -0
- package/src/installs/postman.js +781 -26
- package/src/installs/postman.md +940 -0
- package/src/installs/procps.js +425 -0
- package/src/installs/procps.md +851 -0
- package/src/installs/safari-tech-preview.js +355 -25
- package/src/installs/safari-tech-preview.md +533 -0
- package/src/installs/sfnt2woff.js +640 -26
- package/src/installs/sfnt2woff.md +795 -0
- package/src/installs/shellcheck.js +463 -26
- package/src/installs/shellcheck.md +1005 -0
- package/src/installs/slack.js +722 -25
- package/src/installs/slack.md +865 -0
- package/src/installs/snagit.js +566 -25
- package/src/installs/snagit.md +844 -0
- package/src/installs/software-properties-common.js +372 -0
- package/src/installs/software-properties-common.md +805 -0
- package/src/installs/spotify.js +858 -25
- package/src/installs/spotify.md +901 -0
- package/src/installs/studio-3t.js +803 -26
- package/src/installs/studio-3t.md +918 -0
- package/src/installs/sublime-text.js +780 -25
- package/src/installs/sublime-text.md +914 -0
- package/src/installs/superwhisper.js +687 -25
- package/src/installs/superwhisper.md +630 -0
- package/src/installs/tailscale.js +727 -26
- package/src/installs/tailscale.md +1100 -0
- package/src/installs/tar.js +389 -0
- package/src/installs/tar.md +946 -0
- package/src/installs/termius.js +780 -26
- package/src/installs/termius.md +844 -0
- package/src/installs/terraform.js +761 -26
- package/src/installs/terraform.md +899 -0
- package/src/installs/tidal.js +752 -25
- package/src/installs/tidal.md +864 -0
- package/src/installs/tmux.js +328 -26
- package/src/installs/tmux.md +1030 -0
- package/src/installs/tree.js +393 -26
- package/src/installs/tree.md +833 -0
- package/src/installs/unzip.js +460 -0
- package/src/installs/unzip.md +879 -0
- package/src/installs/vim.js +403 -26
- package/src/installs/vim.md +1040 -0
- package/src/installs/vlc.js +803 -26
- package/src/installs/vlc.md +927 -0
- package/src/installs/vscode.js +825 -26
- package/src/installs/vscode.md +1002 -0
- package/src/installs/wget.js +415 -0
- package/src/installs/wget.md +791 -0
- package/src/installs/whatsapp.js +710 -25
- package/src/installs/whatsapp.md +854 -0
- package/src/installs/winpty.js +352 -0
- package/src/installs/winpty.md +620 -0
- package/src/installs/woff2.js +535 -26
- package/src/installs/woff2.md +977 -0
- package/src/installs/wsl.js +572 -0
- package/src/installs/wsl.md +699 -0
- package/src/installs/xcode-clt.js +520 -0
- package/src/installs/xcode-clt.md +351 -0
- package/src/installs/xcode.js +542 -26
- package/src/installs/xcode.md +573 -0
- package/src/installs/yarn.js +806 -26
- package/src/installs/yarn.md +1074 -0
- package/src/installs/yq.js +636 -26
- package/src/installs/yq.md +944 -0
- package/src/installs/yt-dlp.js +683 -26
- package/src/installs/yt-dlp.md +946 -0
- package/src/installs/yum-utils.js +297 -0
- package/src/installs/yum-utils.md +648 -0
- package/src/installs/zoom.js +740 -25
- package/src/installs/zoom.md +884 -0
- package/src/scripts/README.md +567 -45
- package/src/scripts/STATUS.md +208 -0
- package/src/scripts/afk.js +395 -7
- package/src/scripts/backup-all.js +731 -9
- package/src/scripts/backup-source.js +711 -8
- package/src/scripts/brewd.js +373 -7
- package/src/scripts/brewi.js +505 -9
- package/src/scripts/brewr.js +512 -9
- package/src/scripts/brews.js +462 -9
- package/src/scripts/brewu.js +488 -7
- package/src/scripts/c.js +185 -7
- package/src/scripts/ccurl.js +325 -8
- package/src/scripts/certbot-crontab-init.js +488 -8
- package/src/scripts/certbot-init.js +641 -9
- package/src/scripts/ch.js +339 -7
- package/src/scripts/claude-danger.js +253 -8
- package/src/scripts/clean-dev.js +419 -8
- package/src/scripts/clear-dns-cache.js +525 -7
- package/src/scripts/clone.js +417 -7
- package/src/scripts/code-all.js +420 -7
- package/src/scripts/count-files.js +195 -8
- package/src/scripts/count-folders.js +195 -8
- package/src/scripts/count.js +248 -8
- package/src/scripts/d.js +203 -7
- package/src/scripts/datauri.js +373 -8
- package/src/scripts/delete-files.js +363 -7
- package/src/scripts/docker-clean.js +410 -8
- package/src/scripts/dp.js +426 -7
- package/src/scripts/e.js +375 -9
- package/src/scripts/empty-trash.js +497 -7
- package/src/scripts/evm.js +428 -9
- package/src/scripts/fetch-github-repos.js +441 -10
- package/src/scripts/get-channel.js +329 -8
- package/src/scripts/get-course.js +384 -11
- package/src/scripts/get-dependencies.js +290 -9
- package/src/scripts/get-folder.js +783 -10
- package/src/scripts/get-tunes.js +411 -10
- package/src/scripts/get-video.js +352 -9
- package/src/scripts/git-backup.js +561 -9
- package/src/scripts/git-clone.js +477 -9
- package/src/scripts/git-pup.js +303 -7
- package/src/scripts/git-push.js +380 -8
- package/src/scripts/h.js +607 -9
- package/src/scripts/hide-desktop-icons.js +483 -7
- package/src/scripts/hide-hidden-files.js +522 -7
- package/src/scripts/install-dependencies-from.js +440 -9
- package/src/scripts/ips.js +647 -10
- package/src/scripts/iso.js +354 -8
- package/src/scripts/killni.js +561 -7
- package/src/scripts/ll.js +451 -8
- package/src/scripts/local-ip.js +310 -8
- package/src/scripts/m.js +508 -8
- package/src/scripts/map.js +293 -8
- package/src/scripts/mkd.js +287 -7
- package/src/scripts/ncu-update-all.js +441 -8
- package/src/scripts/nginx-init.js +702 -12
- package/src/scripts/npmi.js +366 -7
- package/src/scripts/o.js +495 -8
- package/src/scripts/org-by-date.js +321 -7
- package/src/scripts/p.js +208 -7
- package/src/scripts/packages.js +313 -8
- package/src/scripts/path.js +209 -7
- package/src/scripts/ports.js +582 -8
- package/src/scripts/q.js +290 -8
- package/src/scripts/refresh-files.js +378 -10
- package/src/scripts/remove-smaller-files.js +500 -8
- package/src/scripts/rename-files-with-date.js +517 -9
- package/src/scripts/resize-image.js +523 -9
- package/src/scripts/rm-safe.js +653 -8
- package/src/scripts/s.js +525 -9
- package/src/scripts/set-git-public.js +349 -7
- package/src/scripts/show-desktop-icons.js +459 -7
- package/src/scripts/show-hidden-files.js +456 -7
- package/src/scripts/tpa.js +265 -8
- package/src/scripts/tpo.js +264 -7
- package/src/scripts/u.js +489 -7
- package/src/scripts/vpush.js +422 -8
- package/src/scripts/y.js +267 -7
- package/src/utils/common/os.js +94 -2
- package/src/utils/ubuntu/apt.js +13 -7
- package/src/utils/windows/choco.js +82 -26
- package/src/utils/windows/winget.js +89 -27
package/src/scripts/q.js
CHANGED
|
@@ -1,23 +1,305 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* q - Exit the current shell session (quick exit)
|
|
5
|
+
*
|
|
6
|
+
* Migrated from legacy dotfiles alias.
|
|
7
|
+
* Original: alias q="exit"
|
|
8
|
+
*
|
|
9
|
+
* IMPORTANT LIMITATION:
|
|
10
|
+
* The original `q` alias worked because shell aliases run in the same process
|
|
11
|
+
* as the shell itself. When you type `q` and it runs `exit`, the shell exits.
|
|
12
|
+
*
|
|
13
|
+
* However, this Node.js script runs as a CHILD PROCESS of your shell. When we
|
|
14
|
+
* call `process.exit()` here, it only exits THIS script's process - not your
|
|
15
|
+
* parent shell. There is no cross-platform way for a child process to force
|
|
16
|
+
* its parent process to terminate.
|
|
17
|
+
*
|
|
18
|
+
* WORKAROUND OPTIONS:
|
|
19
|
+
*
|
|
20
|
+
* 1. Use the native shell command directly:
|
|
21
|
+
* Just type `exit` in your terminal.
|
|
22
|
+
*
|
|
23
|
+
* 2. Create a shell alias (recommended for true `q` behavior):
|
|
24
|
+
* In your ~/.bashrc or ~/.zshrc:
|
|
25
|
+
* alias q="exit"
|
|
26
|
+
*
|
|
27
|
+
* In PowerShell $PROFILE:
|
|
28
|
+
* function q { exit }
|
|
29
|
+
*
|
|
30
|
+
* 3. Source this script's output (advanced):
|
|
31
|
+
* eval "$(q)" # This would work if the script printed "exit"
|
|
32
|
+
*
|
|
33
|
+
* This script provides informative guidance to users about this limitation.
|
|
34
|
+
*
|
|
5
35
|
* @module scripts/q
|
|
6
36
|
*/
|
|
7
37
|
|
|
38
|
+
const os = require('../utils/common/os');
|
|
39
|
+
|
|
8
40
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
41
|
+
* Pure Node.js implementation that explains the exit limitation.
|
|
42
|
+
*
|
|
43
|
+
* Since exiting the parent shell is not possible from a child process,
|
|
44
|
+
* this function prints helpful information to the user.
|
|
45
|
+
*
|
|
46
|
+
* @param {string[]} args - Command line arguments
|
|
47
|
+
* @returns {Promise<void>}
|
|
48
|
+
*/
|
|
49
|
+
async function do_q_nodejs(args) {
|
|
50
|
+
// Check if user passed --help or -h
|
|
51
|
+
if (args.includes('--help') || args.includes('-h')) {
|
|
52
|
+
printHelp();
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Check if user wants shell-sourceable output (--eval or -e flag)
|
|
57
|
+
// Usage: eval "$(q --eval)" or eval "$(q -e)"
|
|
58
|
+
if (args.includes('--eval') || args.includes('-e')) {
|
|
59
|
+
// Print the exit command so it can be sourced/evaled by the parent shell
|
|
60
|
+
console.log('exit');
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Default behavior: inform the user about the limitation
|
|
65
|
+
console.log('To exit your shell, type: exit');
|
|
66
|
+
console.log('');
|
|
67
|
+
console.log('Note: The `q` command cannot exit your shell directly because');
|
|
68
|
+
console.log('it runs as a child process. For true `q` behavior, add this');
|
|
69
|
+
console.log('alias to your shell config:');
|
|
70
|
+
console.log('');
|
|
71
|
+
|
|
72
|
+
const platform = os.detect();
|
|
73
|
+
|
|
74
|
+
// Provide shell-specific guidance
|
|
75
|
+
if (platform.type === 'windows' || platform.type === 'powershell') {
|
|
76
|
+
console.log(' PowerShell (add to $PROFILE):');
|
|
77
|
+
console.log(' function q { exit }');
|
|
78
|
+
} else if (platform.type === 'cmd') {
|
|
79
|
+
console.log(' CMD (create a doskey alias or batch file):');
|
|
80
|
+
console.log(' doskey q=exit');
|
|
81
|
+
} else {
|
|
82
|
+
// Unix-like systems (macOS, Linux, Git Bash)
|
|
83
|
+
console.log(' Bash/Zsh (add to ~/.bashrc or ~/.zshrc):');
|
|
84
|
+
console.log(' alias q="exit"');
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
console.log('');
|
|
88
|
+
console.log('Alternatively, use: eval "$(q --eval)" to exit immediately.');
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Prints help information about the q command.
|
|
93
|
+
*
|
|
94
|
+
* @returns {void}
|
|
95
|
+
*/
|
|
96
|
+
function printHelp() {
|
|
97
|
+
console.log('q - Quick exit command');
|
|
98
|
+
console.log('');
|
|
99
|
+
console.log('Usage:');
|
|
100
|
+
console.log(' q Show exit instructions');
|
|
101
|
+
console.log(' q --eval Print "exit" for shell sourcing');
|
|
102
|
+
console.log(' q -e Same as --eval');
|
|
103
|
+
console.log(' q --help Show this help message');
|
|
104
|
+
console.log(' q -h Same as --help');
|
|
105
|
+
console.log('');
|
|
106
|
+
console.log('Examples:');
|
|
107
|
+
console.log(' # Show instructions');
|
|
108
|
+
console.log(' q');
|
|
109
|
+
console.log('');
|
|
110
|
+
console.log(' # Exit shell immediately (Bash/Zsh):');
|
|
111
|
+
console.log(' eval "$(q --eval)"');
|
|
112
|
+
console.log('');
|
|
113
|
+
console.log(' # Exit shell immediately (PowerShell):');
|
|
114
|
+
console.log(' Invoke-Expression (q --eval)');
|
|
115
|
+
console.log('');
|
|
116
|
+
console.log('Note: For true `q` behavior, create a shell alias instead.');
|
|
117
|
+
console.log('This script cannot exit the parent shell directly because');
|
|
118
|
+
console.log('it runs as a child process.');
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Exit guidance on macOS.
|
|
123
|
+
*
|
|
124
|
+
* On macOS, the default shell is Zsh (since Catalina) or Bash (older versions).
|
|
125
|
+
* Both support the `alias q="exit"` syntax.
|
|
126
|
+
*
|
|
127
|
+
* @param {string[]} args - Command line arguments
|
|
128
|
+
* @returns {Promise<void>}
|
|
129
|
+
*/
|
|
130
|
+
async function do_q_macos(args) {
|
|
131
|
+
return do_q_nodejs(args);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Exit guidance on Ubuntu.
|
|
136
|
+
*
|
|
137
|
+
* Ubuntu uses Bash by default. The `alias q="exit"` syntax works.
|
|
138
|
+
*
|
|
139
|
+
* @param {string[]} args - Command line arguments
|
|
140
|
+
* @returns {Promise<void>}
|
|
141
|
+
*/
|
|
142
|
+
async function do_q_ubuntu(args) {
|
|
143
|
+
return do_q_nodejs(args);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Exit guidance on Raspberry Pi OS.
|
|
148
|
+
*
|
|
149
|
+
* Raspberry Pi OS uses Bash by default. The `alias q="exit"` syntax works.
|
|
11
150
|
*
|
|
12
|
-
* @param {string[]} args - Command line arguments
|
|
151
|
+
* @param {string[]} args - Command line arguments
|
|
13
152
|
* @returns {Promise<void>}
|
|
14
153
|
*/
|
|
15
|
-
async function
|
|
16
|
-
|
|
154
|
+
async function do_q_raspbian(args) {
|
|
155
|
+
return do_q_nodejs(args);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Exit guidance on Amazon Linux.
|
|
160
|
+
*
|
|
161
|
+
* Amazon Linux uses Bash by default. The `alias q="exit"` syntax works.
|
|
162
|
+
*
|
|
163
|
+
* @param {string[]} args - Command line arguments
|
|
164
|
+
* @returns {Promise<void>}
|
|
165
|
+
*/
|
|
166
|
+
async function do_q_amazon_linux(args) {
|
|
167
|
+
return do_q_nodejs(args);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Exit guidance in Windows Command Prompt.
|
|
172
|
+
*
|
|
173
|
+
* CMD supports doskey macros or batch files for creating aliases.
|
|
174
|
+
* The `exit` command itself works directly in CMD.
|
|
175
|
+
*
|
|
176
|
+
* @param {string[]} args - Command line arguments
|
|
177
|
+
* @returns {Promise<void>}
|
|
178
|
+
*/
|
|
179
|
+
async function do_q_cmd(args) {
|
|
180
|
+
// Check for --eval flag
|
|
181
|
+
if (args.includes('--eval') || args.includes('-e')) {
|
|
182
|
+
console.log('exit');
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// Check for --help flag
|
|
187
|
+
if (args.includes('--help') || args.includes('-h')) {
|
|
188
|
+
printHelp();
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
console.log('To exit your shell, type: exit');
|
|
193
|
+
console.log('');
|
|
194
|
+
console.log('Note: The `q` command cannot exit your shell directly because');
|
|
195
|
+
console.log('it runs as a child process. For true `q` behavior, you can:');
|
|
196
|
+
console.log('');
|
|
197
|
+
console.log(' Create a doskey macro (temporary, for current session):');
|
|
198
|
+
console.log(' doskey q=exit');
|
|
199
|
+
console.log('');
|
|
200
|
+
console.log(' Or create a q.bat file in a PATH directory:');
|
|
201
|
+
console.log(' @echo off');
|
|
202
|
+
console.log(' exit');
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Exit guidance in Windows PowerShell.
|
|
207
|
+
*
|
|
208
|
+
* PowerShell supports functions for creating aliases to commands with arguments.
|
|
209
|
+
* The `exit` command works directly in PowerShell.
|
|
210
|
+
*
|
|
211
|
+
* @param {string[]} args - Command line arguments
|
|
212
|
+
* @returns {Promise<void>}
|
|
213
|
+
*/
|
|
214
|
+
async function do_q_powershell(args) {
|
|
215
|
+
// Check for --eval flag
|
|
216
|
+
if (args.includes('--eval') || args.includes('-e')) {
|
|
217
|
+
console.log('exit');
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// Check for --help flag
|
|
222
|
+
if (args.includes('--help') || args.includes('-h')) {
|
|
223
|
+
printHelp();
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
console.log('To exit your shell, type: exit');
|
|
228
|
+
console.log('');
|
|
229
|
+
console.log('Note: The `q` command cannot exit your shell directly because');
|
|
230
|
+
console.log('it runs as a child process. For true `q` behavior, add this');
|
|
231
|
+
console.log('to your PowerShell profile ($PROFILE):');
|
|
232
|
+
console.log('');
|
|
233
|
+
console.log(' function q { exit }');
|
|
234
|
+
console.log('');
|
|
235
|
+
console.log('Alternatively, use: Invoke-Expression (q --eval)');
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* Exit guidance in Git Bash.
|
|
240
|
+
*
|
|
241
|
+
* Git Bash is a Bash shell on Windows, so `alias q="exit"` works.
|
|
242
|
+
*
|
|
243
|
+
* @param {string[]} args - Command line arguments
|
|
244
|
+
* @returns {Promise<void>}
|
|
245
|
+
*/
|
|
246
|
+
async function do_q_gitbash(args) {
|
|
247
|
+
return do_q_nodejs(args);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Main entry point - detects environment and executes appropriate implementation.
|
|
252
|
+
*
|
|
253
|
+
* The "q" command is a quick shorthand for "exit" to leave the current shell.
|
|
254
|
+
* Due to process isolation, this script cannot directly exit the parent shell,
|
|
255
|
+
* so it provides guidance on how to achieve the desired behavior.
|
|
256
|
+
*
|
|
257
|
+
* @param {string[]} args - Command line arguments
|
|
258
|
+
* @returns {Promise<void>}
|
|
259
|
+
*/
|
|
260
|
+
async function do_q(args) {
|
|
261
|
+
const platform = os.detect();
|
|
262
|
+
|
|
263
|
+
const handlers = {
|
|
264
|
+
'macos': do_q_macos,
|
|
265
|
+
'ubuntu': do_q_ubuntu,
|
|
266
|
+
'debian': do_q_ubuntu,
|
|
267
|
+
'raspbian': do_q_raspbian,
|
|
268
|
+
'amazon_linux': do_q_amazon_linux,
|
|
269
|
+
'rhel': do_q_amazon_linux,
|
|
270
|
+
'fedora': do_q_ubuntu,
|
|
271
|
+
'linux': do_q_ubuntu,
|
|
272
|
+
'wsl': do_q_ubuntu,
|
|
273
|
+
'cmd': do_q_cmd,
|
|
274
|
+
'windows': do_q_cmd,
|
|
275
|
+
'powershell': do_q_powershell,
|
|
276
|
+
'gitbash': do_q_gitbash
|
|
277
|
+
};
|
|
278
|
+
|
|
279
|
+
const handler = handlers[platform.type];
|
|
280
|
+
if (!handler) {
|
|
281
|
+
// Fallback to generic Node.js implementation
|
|
282
|
+
// This ensures the script works on unknown platforms too
|
|
283
|
+
await do_q_nodejs(args);
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
await handler(args);
|
|
17
288
|
}
|
|
18
289
|
|
|
19
|
-
module.exports = {
|
|
290
|
+
module.exports = {
|
|
291
|
+
main: do_q,
|
|
292
|
+
do_q,
|
|
293
|
+
do_q_nodejs,
|
|
294
|
+
do_q_macos,
|
|
295
|
+
do_q_ubuntu,
|
|
296
|
+
do_q_raspbian,
|
|
297
|
+
do_q_amazon_linux,
|
|
298
|
+
do_q_cmd,
|
|
299
|
+
do_q_powershell,
|
|
300
|
+
do_q_gitbash
|
|
301
|
+
};
|
|
20
302
|
|
|
21
303
|
if (require.main === module) {
|
|
22
|
-
|
|
304
|
+
do_q(process.argv.slice(2));
|
|
23
305
|
}
|