Disable the confirmation dialog when deleting files in the VS Code explorer to streamline the development workflow and reduce friction during file management operations.
113 lines
2.6 KiB
JavaScript
113 lines
2.6 KiB
JavaScript
#!/usr/bin/env node
|
|
const touch = require("../index.js")
|
|
|
|
const usage = code => {
|
|
console[code ? 'error' : 'log'](
|
|
'usage:\n' +
|
|
'touch [-acfm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file ...'
|
|
)
|
|
process.exit(code)
|
|
}
|
|
|
|
const singleFlags = {
|
|
a: 'atime',
|
|
m: 'mtime',
|
|
c: 'nocreate',
|
|
f: 'force'
|
|
}
|
|
|
|
const singleOpts = {
|
|
r: 'ref',
|
|
t: 'time'
|
|
}
|
|
|
|
const files = []
|
|
const args = process.argv.slice(2)
|
|
const options = {}
|
|
for (let i = 0; i < args.length; i++) {
|
|
const arg = args[i]
|
|
if (!arg.match(/^-/)) {
|
|
files.push(arg)
|
|
continue
|
|
}
|
|
|
|
// expand shorthands
|
|
if (arg.charAt(1) !== '-') {
|
|
const expand = []
|
|
for (let f = 1; f < arg.length; f++) {
|
|
const fc = arg.charAt(f)
|
|
const sf = singleFlags[fc]
|
|
const so = singleOpts[fc]
|
|
if (sf)
|
|
expand.push('--' + sf)
|
|
else if (so) {
|
|
const soslice = arg.slice(f + 1)
|
|
const soval = soslice.charAt(0) === '=' ? soslice : '=' + soslice
|
|
expand.push('--' + so + soval)
|
|
f = arg.length
|
|
} else if (arg !== '-' + fc)
|
|
expand.push('-' + fc)
|
|
}
|
|
if (expand.length) {
|
|
args.splice.apply(args, [i, 1].concat(expand))
|
|
i--
|
|
continue
|
|
}
|
|
}
|
|
|
|
const argsplit = arg.split('=')
|
|
const key = argsplit.shift().replace(/^\-\-/, '')
|
|
const val = argsplit.length ? argsplit.join('=') : null
|
|
|
|
switch (key) {
|
|
case 'time':
|
|
const timestr = val || args[++i]
|
|
// [-t [[CC]YY]MMDDhhmm[.SS]]
|
|
const parsedtime = timestr.match(
|
|
/^(([0-9]{2})?([0-9]{2}))?([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})(\.([0-9]{2}))?$/
|
|
)
|
|
if (!parsedtime) {
|
|
console.error('touch: out of range or illegal ' +
|
|
'time specification: ' +
|
|
'[[CC]YY]MMDDhhmm[.SS]')
|
|
process.exit(1)
|
|
} else {
|
|
const y = +parsedtime[1]
|
|
const year = parsedtime[2] ? y
|
|
: y <= 68 ? 2000 + y
|
|
: 1900 + y
|
|
|
|
const MM = +parsedtime[4] - 1
|
|
const dd = +parsedtime[5]
|
|
const hh = +parsedtime[6]
|
|
const mm = +parsedtime[7]
|
|
const ss = +parsedtime[8]
|
|
|
|
options.time = new Date(Date.UTC(year, MM, dd, hh, mm, ss))
|
|
}
|
|
continue
|
|
|
|
case 'ref':
|
|
options.ref = val || args[++i]
|
|
continue
|
|
|
|
case 'mtime':
|
|
case 'nocreate':
|
|
case 'atime':
|
|
case 'force':
|
|
options[key] = true
|
|
continue
|
|
|
|
default:
|
|
console.error('touch: illegal option -- ' + arg)
|
|
usage(1)
|
|
}
|
|
}
|
|
|
|
if (!files.length)
|
|
usage()
|
|
|
|
process.exitCode = 0
|
|
Promise.all(files.map(f => touch(f, options)))
|
|
.catch(er => process.exitCode = 1)
|