@fredlackey/devutils 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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/scripts/e.js
CHANGED
|
@@ -1,24 +1,390 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* e - Open files in vim editor
|
|
5
|
+
*
|
|
6
|
+
* Migrated from legacy dotfiles alias.
|
|
7
|
+
* Original: alias e="vim --"
|
|
8
|
+
*
|
|
9
|
+
* This script opens the specified file(s) in the vim editor. The "--" ensures
|
|
10
|
+
* that any arguments starting with "-" are treated as file names rather than
|
|
11
|
+
* vim options. This is a common developer shortcut for quickly editing files.
|
|
12
|
+
*
|
|
5
13
|
* @module scripts/e
|
|
6
14
|
*/
|
|
7
15
|
|
|
16
|
+
const os = require('../utils/common/os');
|
|
17
|
+
const { execSync, spawnSync } = require('child_process');
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Helper function to check if a command exists on the system.
|
|
21
|
+
* Used to detect which editor is available.
|
|
22
|
+
*
|
|
23
|
+
* @param {string} cmd - The command name to check
|
|
24
|
+
* @returns {boolean} True if the command exists, false otherwise
|
|
25
|
+
*/
|
|
26
|
+
function isCommandAvailable(cmd) {
|
|
27
|
+
try {
|
|
28
|
+
// Use 'which' on Unix-like systems, 'where' on Windows
|
|
29
|
+
const checkCmd = process.platform === 'win32' ? `where ${cmd}` : `which ${cmd}`;
|
|
30
|
+
execSync(checkCmd, { stdio: 'ignore' });
|
|
31
|
+
return true;
|
|
32
|
+
} catch {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Pure Node.js implementation - NOT APPLICABLE for this script.
|
|
39
|
+
*
|
|
40
|
+
* Launching an interactive terminal editor like vim requires OS-level terminal
|
|
41
|
+
* control and cannot be done in pure Node.js. Each platform must spawn the
|
|
42
|
+
* editor process with proper terminal inheritance.
|
|
43
|
+
*
|
|
44
|
+
* @param {string[]} args - Command line arguments (file paths to open)
|
|
45
|
+
* @returns {Promise<void>}
|
|
46
|
+
* @throws {Error} Always throws - this function should not be called directly
|
|
47
|
+
*/
|
|
48
|
+
async function do_e_nodejs(args) {
|
|
49
|
+
// Launching an interactive editor requires terminal integration that cannot
|
|
50
|
+
// be implemented in pure Node.js. Each platform function spawns the editor
|
|
51
|
+
// with inherited stdio to maintain proper terminal control.
|
|
52
|
+
throw new Error(
|
|
53
|
+
'do_e_nodejs should not be called directly. ' +
|
|
54
|
+
'Launching an interactive editor requires OS-specific terminal handling.'
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Open files in vim on macOS.
|
|
60
|
+
*
|
|
61
|
+
* macOS comes with vim pre-installed. This function spawns vim with the
|
|
62
|
+
* provided file arguments, using "--" to prevent arguments starting with
|
|
63
|
+
* "-" from being interpreted as vim options.
|
|
64
|
+
*
|
|
65
|
+
* @param {string[]} args - Command line arguments (file paths to open)
|
|
66
|
+
* @returns {Promise<void>}
|
|
67
|
+
*/
|
|
68
|
+
async function do_e_macos(args) {
|
|
69
|
+
// Check if vim is available (it should be on macOS, but be safe)
|
|
70
|
+
if (!isCommandAvailable('vim')) {
|
|
71
|
+
console.error('Error: vim is not installed.');
|
|
72
|
+
console.error('vim should be pre-installed on macOS. If missing, install via:');
|
|
73
|
+
console.error(' brew install vim');
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Spawn vim with inherited stdio so the terminal stays interactive
|
|
78
|
+
// The "--" separates vim options from file arguments, ensuring files
|
|
79
|
+
// that start with "-" are not treated as options
|
|
80
|
+
const result = spawnSync('vim', ['--', ...args], {
|
|
81
|
+
stdio: 'inherit',
|
|
82
|
+
shell: false
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
if (result.error) {
|
|
86
|
+
console.error('Error: Failed to launch vim.');
|
|
87
|
+
console.error(result.error.message);
|
|
88
|
+
process.exit(1);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Exit with vim's exit code
|
|
92
|
+
process.exit(result.status || 0);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Open files in vim on Ubuntu.
|
|
97
|
+
*
|
|
98
|
+
* Ubuntu typically has vim or vim-tiny installed. If vim is not available,
|
|
99
|
+
* the function tries vi as a fallback and provides installation instructions.
|
|
100
|
+
*
|
|
101
|
+
* @param {string[]} args - Command line arguments (file paths to open)
|
|
102
|
+
* @returns {Promise<void>}
|
|
103
|
+
*/
|
|
104
|
+
async function do_e_ubuntu(args) {
|
|
105
|
+
// Try vim first, then fall back to vi
|
|
106
|
+
let editor = null;
|
|
107
|
+
if (isCommandAvailable('vim')) {
|
|
108
|
+
editor = 'vim';
|
|
109
|
+
} else if (isCommandAvailable('vi')) {
|
|
110
|
+
editor = 'vi';
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (!editor) {
|
|
114
|
+
console.error('Error: vim is not installed.');
|
|
115
|
+
console.error('Install vim with:');
|
|
116
|
+
console.error(' sudo apt update && sudo apt install vim');
|
|
117
|
+
process.exit(1);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// Spawn the editor with inherited stdio for interactive terminal control
|
|
121
|
+
const result = spawnSync(editor, ['--', ...args], {
|
|
122
|
+
stdio: 'inherit',
|
|
123
|
+
shell: false
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
if (result.error) {
|
|
127
|
+
console.error(`Error: Failed to launch ${editor}.`);
|
|
128
|
+
console.error(result.error.message);
|
|
129
|
+
process.exit(1);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
process.exit(result.status || 0);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Open files in vim on Raspberry Pi OS.
|
|
137
|
+
*
|
|
138
|
+
* Raspberry Pi OS (Raspbian) is Debian-based and typically has vim-tiny
|
|
139
|
+
* pre-installed. Falls back to vi if vim is not available.
|
|
140
|
+
*
|
|
141
|
+
* @param {string[]} args - Command line arguments (file paths to open)
|
|
142
|
+
* @returns {Promise<void>}
|
|
143
|
+
*/
|
|
144
|
+
async function do_e_raspbian(args) {
|
|
145
|
+
// Try vim first, then fall back to vi
|
|
146
|
+
let editor = null;
|
|
147
|
+
if (isCommandAvailable('vim')) {
|
|
148
|
+
editor = 'vim';
|
|
149
|
+
} else if (isCommandAvailable('vi')) {
|
|
150
|
+
editor = 'vi';
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if (!editor) {
|
|
154
|
+
console.error('Error: vim is not installed.');
|
|
155
|
+
console.error('Install vim with:');
|
|
156
|
+
console.error(' sudo apt update && sudo apt install vim');
|
|
157
|
+
process.exit(1);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
const result = spawnSync(editor, ['--', ...args], {
|
|
161
|
+
stdio: 'inherit',
|
|
162
|
+
shell: false
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
if (result.error) {
|
|
166
|
+
console.error(`Error: Failed to launch ${editor}.`);
|
|
167
|
+
console.error(result.error.message);
|
|
168
|
+
process.exit(1);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
process.exit(result.status || 0);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Open files in vim on Amazon Linux.
|
|
176
|
+
*
|
|
177
|
+
* Amazon Linux typically has vim-minimal installed. Falls back to vi
|
|
178
|
+
* if the full vim is not available.
|
|
179
|
+
*
|
|
180
|
+
* @param {string[]} args - Command line arguments (file paths to open)
|
|
181
|
+
* @returns {Promise<void>}
|
|
182
|
+
*/
|
|
183
|
+
async function do_e_amazon_linux(args) {
|
|
184
|
+
// Try vim first, then fall back to vi
|
|
185
|
+
let editor = null;
|
|
186
|
+
if (isCommandAvailable('vim')) {
|
|
187
|
+
editor = 'vim';
|
|
188
|
+
} else if (isCommandAvailable('vi')) {
|
|
189
|
+
editor = 'vi';
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
if (!editor) {
|
|
193
|
+
console.error('Error: vim is not installed.');
|
|
194
|
+
console.error('Install vim with:');
|
|
195
|
+
console.error(' sudo dnf install vim-enhanced');
|
|
196
|
+
console.error(' or');
|
|
197
|
+
console.error(' sudo yum install vim-enhanced');
|
|
198
|
+
process.exit(1);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
const result = spawnSync(editor, ['--', ...args], {
|
|
202
|
+
stdio: 'inherit',
|
|
203
|
+
shell: false
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
if (result.error) {
|
|
207
|
+
console.error(`Error: Failed to launch ${editor}.`);
|
|
208
|
+
console.error(result.error.message);
|
|
209
|
+
process.exit(1);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
process.exit(result.status || 0);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Open files in vim on Windows Command Prompt.
|
|
217
|
+
*
|
|
218
|
+
* vim is not installed by default on Windows. This function checks for
|
|
219
|
+
* common locations where vim might be installed (Git Bash, Chocolatey,
|
|
220
|
+
* or standalone installation) and provides installation guidance.
|
|
221
|
+
*
|
|
222
|
+
* @param {string[]} args - Command line arguments (file paths to open)
|
|
223
|
+
* @returns {Promise<void>}
|
|
224
|
+
*/
|
|
225
|
+
async function do_e_cmd(args) {
|
|
226
|
+
// Check if vim is available
|
|
227
|
+
if (!isCommandAvailable('vim')) {
|
|
228
|
+
console.error('Error: vim is not installed or not in PATH.');
|
|
229
|
+
console.error('');
|
|
230
|
+
console.error('Install vim on Windows using one of these methods:');
|
|
231
|
+
console.error(' choco install vim # Using Chocolatey');
|
|
232
|
+
console.error(' winget install vim.vim # Using winget');
|
|
233
|
+
console.error(' scoop install vim # Using Scoop');
|
|
234
|
+
console.error('');
|
|
235
|
+
console.error('Or download from: https://www.vim.org/download.php');
|
|
236
|
+
process.exit(1);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// Spawn vim with inherited stdio
|
|
240
|
+
const result = spawnSync('vim', ['--', ...args], {
|
|
241
|
+
stdio: 'inherit',
|
|
242
|
+
shell: true // Use shell on Windows for proper PATH resolution
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
if (result.error) {
|
|
246
|
+
console.error('Error: Failed to launch vim.');
|
|
247
|
+
console.error(result.error.message);
|
|
248
|
+
process.exit(1);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
process.exit(result.status || 0);
|
|
252
|
+
}
|
|
253
|
+
|
|
8
254
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
255
|
+
* Open files in vim on Windows PowerShell.
|
|
256
|
+
*
|
|
257
|
+
* Same as CMD - vim is not installed by default. Provides installation
|
|
258
|
+
* instructions for Windows package managers.
|
|
11
259
|
*
|
|
12
|
-
* @param {string[]} args - Command line arguments
|
|
13
|
-
* @param {string} args.0 - File path to open in vim
|
|
260
|
+
* @param {string[]} args - Command line arguments (file paths to open)
|
|
14
261
|
* @returns {Promise<void>}
|
|
15
262
|
*/
|
|
16
|
-
async function
|
|
17
|
-
//
|
|
263
|
+
async function do_e_powershell(args) {
|
|
264
|
+
// Check if vim is available
|
|
265
|
+
if (!isCommandAvailable('vim')) {
|
|
266
|
+
console.error('Error: vim is not installed or not in PATH.');
|
|
267
|
+
console.error('');
|
|
268
|
+
console.error('Install vim on Windows using one of these methods:');
|
|
269
|
+
console.error(' choco install vim # Using Chocolatey');
|
|
270
|
+
console.error(' winget install vim.vim # Using winget');
|
|
271
|
+
console.error(' scoop install vim # Using Scoop');
|
|
272
|
+
console.error('');
|
|
273
|
+
console.error('Or download from: https://www.vim.org/download.php');
|
|
274
|
+
process.exit(1);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
const result = spawnSync('vim', ['--', ...args], {
|
|
278
|
+
stdio: 'inherit',
|
|
279
|
+
shell: true
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
if (result.error) {
|
|
283
|
+
console.error('Error: Failed to launch vim.');
|
|
284
|
+
console.error(result.error.message);
|
|
285
|
+
process.exit(1);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
process.exit(result.status || 0);
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* Open files in vim on Git Bash.
|
|
293
|
+
*
|
|
294
|
+
* Git Bash on Windows comes with vim included as part of the Git for Windows
|
|
295
|
+
* installation. This is the most reliable way to use vim on Windows.
|
|
296
|
+
*
|
|
297
|
+
* @param {string[]} args - Command line arguments (file paths to open)
|
|
298
|
+
* @returns {Promise<void>}
|
|
299
|
+
*/
|
|
300
|
+
async function do_e_gitbash(args) {
|
|
301
|
+
// Git Bash typically includes vim
|
|
302
|
+
if (!isCommandAvailable('vim')) {
|
|
303
|
+
console.error('Error: vim is not found.');
|
|
304
|
+
console.error('Git Bash usually includes vim. If missing, try:');
|
|
305
|
+
console.error(' - Reinstalling Git for Windows with vim option enabled');
|
|
306
|
+
console.error(' - Installing vim separately: choco install vim');
|
|
307
|
+
process.exit(1);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
const result = spawnSync('vim', ['--', ...args], {
|
|
311
|
+
stdio: 'inherit',
|
|
312
|
+
shell: false
|
|
313
|
+
});
|
|
314
|
+
|
|
315
|
+
if (result.error) {
|
|
316
|
+
console.error('Error: Failed to launch vim.');
|
|
317
|
+
console.error(result.error.message);
|
|
318
|
+
process.exit(1);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
process.exit(result.status || 0);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
* Main entry point - detects environment and executes appropriate implementation.
|
|
326
|
+
*
|
|
327
|
+
* The "e" command opens files in the vim editor. This is a common developer
|
|
328
|
+
* shortcut that provides quick access to vim without typing the full command.
|
|
329
|
+
* The "--" separator ensures that file names starting with "-" are handled
|
|
330
|
+
* correctly and not interpreted as vim options.
|
|
331
|
+
*
|
|
332
|
+
* Usage:
|
|
333
|
+
* e file.txt # Open file.txt in vim
|
|
334
|
+
* e file1.js file2.js # Open multiple files
|
|
335
|
+
* e -strange-name.txt # Open file with "-" prefix (handled correctly)
|
|
336
|
+
*
|
|
337
|
+
* @param {string[]} args - Command line arguments (file paths to open)
|
|
338
|
+
* @returns {Promise<void>}
|
|
339
|
+
*/
|
|
340
|
+
async function do_e(args) {
|
|
341
|
+
const platform = os.detect();
|
|
342
|
+
|
|
343
|
+
const handlers = {
|
|
344
|
+
'macos': do_e_macos,
|
|
345
|
+
'ubuntu': do_e_ubuntu,
|
|
346
|
+
'debian': do_e_ubuntu,
|
|
347
|
+
'raspbian': do_e_raspbian,
|
|
348
|
+
'amazon_linux': do_e_amazon_linux,
|
|
349
|
+
'rhel': do_e_amazon_linux,
|
|
350
|
+
'fedora': do_e_ubuntu,
|
|
351
|
+
'linux': do_e_ubuntu,
|
|
352
|
+
'wsl': do_e_ubuntu,
|
|
353
|
+
'cmd': do_e_cmd,
|
|
354
|
+
'windows': do_e_cmd,
|
|
355
|
+
'powershell': do_e_powershell,
|
|
356
|
+
'gitbash': do_e_gitbash
|
|
357
|
+
};
|
|
358
|
+
|
|
359
|
+
const handler = handlers[platform.type];
|
|
360
|
+
if (!handler) {
|
|
361
|
+
console.error(`Platform '${platform.type}' is not supported for this command.`);
|
|
362
|
+
console.error('');
|
|
363
|
+
console.error('Supported platforms:');
|
|
364
|
+
console.error(' - macOS');
|
|
365
|
+
console.error(' - Ubuntu, Debian, and other Linux distributions');
|
|
366
|
+
console.error(' - Raspberry Pi OS');
|
|
367
|
+
console.error(' - Amazon Linux, RHEL, Fedora');
|
|
368
|
+
console.error(' - Windows (CMD, PowerShell, Git Bash)');
|
|
369
|
+
process.exit(1);
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
await handler(args);
|
|
18
373
|
}
|
|
19
374
|
|
|
20
|
-
module.exports = {
|
|
375
|
+
module.exports = {
|
|
376
|
+
main: do_e,
|
|
377
|
+
do_e,
|
|
378
|
+
do_e_nodejs,
|
|
379
|
+
do_e_macos,
|
|
380
|
+
do_e_ubuntu,
|
|
381
|
+
do_e_raspbian,
|
|
382
|
+
do_e_amazon_linux,
|
|
383
|
+
do_e_cmd,
|
|
384
|
+
do_e_powershell,
|
|
385
|
+
do_e_gitbash
|
|
386
|
+
};
|
|
21
387
|
|
|
22
388
|
if (require.main === module) {
|
|
23
|
-
|
|
389
|
+
do_e(process.argv.slice(2));
|
|
24
390
|
}
|