diff --git a/dist/commands/alias.js b/dist/commands/alias.js index ba15634..39aed34 100755 --- a/dist/commands/alias.js +++ b/dist/commands/alias.js @@ -1,6 +1,7 @@ 'use strict'; var interfacer = require('./../util/interfacer'); +var preparser = require('./../preparser'); var alias = { exec: function exec(args, options) { @@ -94,7 +95,7 @@ module.exports = function (vorpal) { return alias; } vorpal.api.alias = alias; - vorpal.command('alias [name...]').option('-p', 'print all defined aliases in a reusable format').action(function (args, callback) { + vorpal.command('alias [name...]').parse(preparser).option('-p', 'print all defined aliases in a reusable format').action(function (args, callback) { args.options = args.options || {}; args.options.vorpal = vorpal; return interfacer.call(this, { diff --git a/dist/commands/boilerplate.js b/dist/commands/boilerplate.js index 676c039..431f7b0 100755 --- a/dist/commands/boilerplate.js +++ b/dist/commands/boilerplate.js @@ -1,6 +1,7 @@ 'use strict'; var interfacer = require('./../util/interfacer'); +var preparser = require('./../preparser'); /** * This is a boilerplate for implementing a new command. @@ -81,7 +82,7 @@ module.exports = function (vorpal) { * descriptions should exactly emulate * existing commands. */ - vorpal.command('cmdName [files...]').option('-o, --option', 'option description').action(function (args, callback) { + vorpal.command('cmdName [files...]').parse(preparser).option('-o, --option', 'option description').action(function (args, callback) { args.options = args.options || {}; /** * The interfacer method does a diff --git a/dist/commands/cat.js b/dist/commands/cat.js index 4ed1950..e1f0abb 100755 --- a/dist/commands/cat.js +++ b/dist/commands/cat.js @@ -4,6 +4,7 @@ var fsAutocomplete = require('vorpal-autocomplete-fs'); var fetch = require('./../util/fetch'); var interfacer = require('./../util/interfacer'); +var preparser = require('./../preparser'); var lpad = require('./../util/lpad'); var strip = require('./../util/stripAnsi'); @@ -102,7 +103,7 @@ module.exports = function (vorpal) { return cat; } vorpal.api.cat = cat; - vorpal.command('cat [files...]').option('-A, --show-all', 'equivalent to -vET').option('-b, --number-nonblank', 'number nonempty output lines, overrides -n').option('-e', 'equivalent to -vE').option('-E, --show-ends', 'display $ at end of each line').option('-n, --number', 'number all output lines').option('-s, --squeeze-blank', 'suppress repeated empty output lines').option('-t', 'equivalent to -vT').option('-T, --show-tabs', 'display TAB characters as ^I').option('-v, --show-nonprinting', 'use ^ and M- notation, except for LFD and TAB') // this doesn't work yet... + vorpal.command('cat [files...]').parse(preparser).option('-A, --show-all', 'equivalent to -vET').option('-b, --number-nonblank', 'number nonempty output lines, overrides -n').option('-e', 'equivalent to -vE').option('-E, --show-ends', 'display $ at end of each line').option('-n, --number', 'number all output lines').option('-s, --squeeze-blank', 'suppress repeated empty output lines').option('-t', 'equivalent to -vT').option('-T, --show-tabs', 'display TAB characters as ^I').option('-v, --show-nonprinting', 'use ^ and M- notation, except for LFD and TAB') // this doesn't work yet... .autocomplete(fsAutocomplete()).action(function (args, cb) { args.options = args.options || {}; return interfacer.call(this, { diff --git a/dist/commands/cd.js b/dist/commands/cd.js index c2299bc..af243c2 100755 --- a/dist/commands/cd.js +++ b/dist/commands/cd.js @@ -4,6 +4,7 @@ var fsAutocomplete = require('vorpal-autocomplete-fs'); var delimiter = require('./../delimiter'); var interfacer = require('./../util/interfacer'); +var preparser = require('./../preparser'); var cd = { exec: function exec(dir, options) { @@ -46,7 +47,7 @@ module.exports = function (vorpal) { return cd; } vorpal.api.cd = cd; - vorpal.command('cd [dir]').autocomplete(fsAutocomplete({ directory: true })).action(function (args, callback) { + vorpal.command('cd [dir]').parse(preparser).autocomplete(fsAutocomplete({ directory: true })).action(function (args, callback) { args.options = args.options || {}; args.options.vorpal = vorpal; return interfacer.call(this, { diff --git a/dist/commands/cp.js b/dist/commands/cp.js index b6b16a5..1a52005 100755 --- a/dist/commands/cp.js +++ b/dist/commands/cp.js @@ -7,6 +7,7 @@ var os = require('os'); var expand = require('./../util/expand'); var interfacer = require('./../util/interfacer'); +var preparser = require('./../preparser'); var cp = { exec: function exec(args, options) { @@ -194,7 +195,7 @@ module.exports = function (vorpal) { return cp; } vorpal.api.cp = cp; - vorpal.command('cp [args...]').option('-f, --force', 'do not prompt before overwriting').option('-n, --no-clobber', 'do not overwrite an existing file').option('-r, --recursive', 'copy directories recursively').option('-R', 'copy directories recursively').autocomplete(fsAutocomplete()).action(function (args, callback) { + vorpal.command('cp [args...]').parse(preparser).option('-f, --force', 'do not prompt before overwriting').option('-n, --no-clobber', 'do not overwrite an existing file').option('-r, --recursive', 'copy directories recursively').option('-R', 'copy directories recursively').autocomplete(fsAutocomplete()).action(function (args, callback) { args.options = args.options || {}; return interfacer.call(this, { command: cp, diff --git a/dist/commands/kill.js b/dist/commands/kill.js index 0a0f0cc..9e414a4 100755 --- a/dist/commands/kill.js +++ b/dist/commands/kill.js @@ -4,6 +4,7 @@ var fkill = require('fkill'); var os = require('os'); var interfacer = require('./../util/interfacer'); +var preparser = require('./../preparser'); var usage = 'kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]'; var windows = os.platform().indexOf('win') > -1; @@ -83,7 +84,7 @@ module.exports = function (vorpal) { return kill; } vorpal.api.kill = kill; - vorpal.command('kill [process...]').option('-9', 'sigkill').option('-s [sig]', 'sig is a signal name').option('-n [sig]', 'sig is a signal number').option('-l [sigspec]', 'list the signal names').action(function (args, callback) { + vorpal.command('kill [process...]').parse(preparser).option('-9', 'sigkill').option('-s [sig]', 'sig is a signal name').option('-n [sig]', 'sig is a signal number').option('-l [sigspec]', 'list the signal names').action(function (args, callback) { args.options = args.options || {}; args.options.vorpal = vorpal; return interfacer.call(this, { diff --git a/dist/commands/ls.js b/dist/commands/ls.js index 7e621a6..b5ae1dd 100755 --- a/dist/commands/ls.js +++ b/dist/commands/ls.js @@ -14,6 +14,7 @@ var columnify = require('./../util/columnify'); var dateConverter = require('./../util/converter.date'); var fileFromPath = require('./../util/fileFromPath'); var interfacer = require('./../util/interfacer'); +var preparser = require('./../preparser'); var pad = require('./../util/pad'); var lpad = require('./../util/lpad'); var permissionsConverter = require('./../util/converter.permissions'); @@ -345,7 +346,7 @@ module.exports = function (vorpal) { return ls; } vorpal.api.ls = ls; - vorpal.command('ls [paths...]').option('-a, --all', 'do not ignore entries starting with .').option('-A, --almost-all', 'do not list implied . and ..').option('-d, --directory', 'list directory entries instead of contents, and do not dereference symbolic links').option('-F, --classify', 'append indicator (one of */=>@|) to entries').option('-h, --human-readable', 'with -l, print sizes in human readable format (e.g., 1K 234M 2G)').option('-i, --inode', 'print the index number of each file').option('-l', 'use a long listing format').option('-Q, --quote-name', 'enclose entry names in double quotes').option('-r, --reverse', 'reverse order while sorting').option('-R, --recursive', 'list subdirectories recursively').option('-S', 'sort by file size').option('-t', 'sort by modification time, newest first').option('-U', 'do not sort; list entries in directory order').option('-w, --width [COLS]', 'assume screen width instead of current value').option('-x', 'list entries by lines instead of columns').option('-1', 'list one file per line').autocomplete(fsAutocomplete()).action(function (args, cb) { + vorpal.command('ls [paths...]').parse(preparser).option('-a, --all', 'do not ignore entries starting with .').option('-A, --almost-all', 'do not list implied . and ..').option('-d, --directory', 'list directory entries instead of contents, and do not dereference symbolic links').option('-F, --classify', 'append indicator (one of */=>@|) to entries').option('-h, --human-readable', 'with -l, print sizes in human readable format (e.g., 1K 234M 2G)').option('-i, --inode', 'print the index number of each file').option('-l', 'use a long listing format').option('-Q, --quote-name', 'enclose entry names in double quotes').option('-r, --reverse', 'reverse order while sorting').option('-R, --recursive', 'list subdirectories recursively').option('-S', 'sort by file size').option('-t', 'sort by modification time, newest first').option('-U', 'do not sort; list entries in directory order').option('-w, --width [COLS]', 'assume screen width instead of current value').option('-x', 'list entries by lines instead of columns').option('-1', 'list one file per line').autocomplete(fsAutocomplete()).action(function (args, cb) { return interfacer.call(this, { command: ls, args: args.paths, diff --git a/dist/commands/mkdir.js b/dist/commands/mkdir.js index 8f92c96..1ce969c 100755 --- a/dist/commands/mkdir.js +++ b/dist/commands/mkdir.js @@ -5,6 +5,7 @@ var path = require('path'); var fsAutocomplete = require('vorpal-autocomplete-fs'); var interfacer = require('./../util/interfacer'); +var preparser = require('./../preparser'); var mkdir = { exec: function exec(args, options) { @@ -73,7 +74,7 @@ module.exports = function (vorpal) { return mkdir; } vorpal.api.mkdir = mkdir; - vorpal.command('mkdir [directory...]').option('-p, --parents', 'no error if existing, make parent directories as needed').option('-v, --verbose', 'print a message for each created directory').autocomplete(fsAutocomplete({ directory: true })).action(function (args, callback) { + vorpal.command('mkdir [directory...]').parse(preparser).option('-p, --parents', 'no error if existing, make parent directories as needed').option('-v, --verbose', 'print a message for each created directory').autocomplete(fsAutocomplete({ directory: true })).action(function (args, callback) { args.options = args.options || {}; args.options.vorpal = vorpal; return interfacer.call(this, { diff --git a/dist/commands/mv.js b/dist/commands/mv.js index 893205c..f382f0e 100755 --- a/dist/commands/mv.js +++ b/dist/commands/mv.js @@ -6,6 +6,7 @@ var path = require('path'); var expand = require('./../util/expand'); var interfacer = require('./../util/interfacer'); +var preparser = require('./../preparser'); var mv = { exec: function exec(args, options) { @@ -91,7 +92,7 @@ module.exports = function (vorpal) { return mv; } vorpal.api.mv = mv; - vorpal.command('mv [args...]').option('-f, --force', 'do not prompt before overwriting').option('-n, --no-clobber', 'do not overwrite an existing file').option('--striptrailingslashes', 'remove any trailing slashes from each source') // vorpal bug, need to add dashes between words + vorpal.command('mv [args...]').parse(preparser).option('-f, --force', 'do not prompt before overwriting').option('-n, --no-clobber', 'do not overwrite an existing file').option('--striptrailingslashes', 'remove any trailing slashes from each source') // vorpal bug, need to add dashes between words .option('-v, --verbose', 'explain what is being done').autocomplete(fsAutocomplete()).action(function (args, callback) { args.options = args.options || {}; return interfacer.call(this, { diff --git a/dist/commands/rm.js b/dist/commands/rm.js index 502f359..7866517 100755 --- a/dist/commands/rm.js +++ b/dist/commands/rm.js @@ -5,6 +5,7 @@ var fsAutocomplete = require('vorpal-autocomplete-fs'); var expand = require('./../util/expand'); var interfacer = require('./../util/interfacer'); +var preparser = require('./../preparser'); var unlinkSync = require('./../util/unlinkSync'); var rm = { @@ -159,7 +160,7 @@ module.exports = function (vorpal) { return rm; } vorpal.api.rm = rm; - vorpal.command('rm [files...]').option('-f, --force', 'ignore nonexistent files and arguments, never prompt').option('-r, --recursive', 'remove directories and their contents recursively').option('-R', 'remove directories and their contents recursively').autocomplete(fsAutocomplete()).action(function (args, callback) { + vorpal.command('rm [files...]').parse(preparser).option('-f, --force', 'ignore nonexistent files and arguments, never prompt').option('-r, --recursive', 'remove directories and their contents recursively').option('-R', 'remove directories and their contents recursively').autocomplete(fsAutocomplete()).action(function (args, callback) { args.options = args.options || {}; return interfacer.call(this, { command: rm, diff --git a/dist/commands/sort.js b/dist/commands/sort.js index 5809895..1d398f5 100755 --- a/dist/commands/sort.js +++ b/dist/commands/sort.js @@ -5,6 +5,7 @@ var fsAutocomplete = require('vorpal-autocomplete-fs'); var fetch = require('./../util/fetch'); var interfacer = require('./../util/interfacer'); +var preparser = require('./../preparser'); var strip = require('./../util/stripAnsi'); var shuffle = require('array-shuffle'); @@ -244,7 +245,7 @@ module.exports = function (vorpal) { return sort; } vorpal.api.sort = sort; - vorpal.command('sort [files...]').option('-M, --month-sort', 'compare (unknown) < \'JAN\' < ... < \'DEC\'').option('-h, --human-numeric-sort', 'compare human readable numbers (e.g., 2K 1G)').option('-n, --numeric-sort', 'compare according to string numerical value').option('-R, --random-sort', 'sort by random hash of keys').option('-r, --reverse', 'reverse the result of comparisons').option('-c, --check', 'check for sorted input; do not sort').option('-o, --output [file]', 'write result to file instead of standard output').autocomplete(fsAutocomplete()).action(function (args, callback) { + vorpal.command('sort [files...]').parse(preparser).option('-M, --month-sort', 'compare (unknown) < \'JAN\' < ... < \'DEC\'').option('-h, --human-numeric-sort', 'compare human readable numbers (e.g., 2K 1G)').option('-n, --numeric-sort', 'compare according to string numerical value').option('-R, --random-sort', 'sort by random hash of keys').option('-r, --reverse', 'reverse the result of comparisons').option('-c, --check', 'check for sorted input; do not sort').option('-o, --output [file]', 'write result to file instead of standard output').autocomplete(fsAutocomplete()).action(function (args, callback) { args.options = args.options || {}; return interfacer.call(this, { command: sort, diff --git a/dist/commands/touch.js b/dist/commands/touch.js index 91caa4b..e70def2 100755 --- a/dist/commands/touch.js +++ b/dist/commands/touch.js @@ -4,6 +4,7 @@ var fs = require('fs-extra'); var fsAutocomplete = require('vorpal-autocomplete-fs'); var interfacer = require('./../util/interfacer'); +var preparser = require('./../preparser'); require('./../lib/sugar'); var touch = { @@ -141,7 +142,7 @@ module.exports = function (vorpal) { return touch; } vorpal.api.touch = touch; - vorpal.command('touch ').option('-a', 'change only the access time').option('-c, --no-create', 'do not create any files').option('-d, --date [STRING]', 'parse STRING and use it instead of current time').option('-m', 'change only the modification time').option('-r, --reference [FILE]', 'use this file\'s times instead of current time').option('--time [WORD]', 'change the specified time: WORD is access, atime, or use: equivalent to -a WORD is modify or mtime: equivalent to -m').autocomplete(fsAutocomplete()).action(function (args, callback) { + vorpal.command('touch ').parse(preparser).option('-a', 'change only the access time').option('-c, --no-create', 'do not create any files').option('-d, --date [STRING]', 'parse STRING and use it instead of current time').option('-m', 'change only the modification time').option('-r, --reference [FILE]', 'use this file\'s times instead of current time').option('--time [WORD]', 'change the specified time: WORD is access, atime, or use: equivalent to -a WORD is modify or mtime: equivalent to -m').autocomplete(fsAutocomplete()).action(function (args, callback) { return interfacer.call(this, { command: touch, args: args.files || [], diff --git a/dist/commands/unalias.js b/dist/commands/unalias.js index bf384db..191744e 100755 --- a/dist/commands/unalias.js +++ b/dist/commands/unalias.js @@ -1,6 +1,7 @@ 'use strict'; var interfacer = require('./../util/interfacer'); +var preparser = require('./../preparser'); var unalias = { exec: function exec(args, options) { @@ -85,7 +86,7 @@ module.exports = function (vorpal) { return unalias; } vorpal.api.unalias = unalias; - vorpal.command('unalias [name...]').option('-a', 'remove all alias definitions').action(function (args, callback) { + vorpal.command('unalias [name...]').parse(preparser).option('-a', 'remove all alias definitions').action(function (args, callback) { args.options = args.options || {}; args.options.vorpal = vorpal; return interfacer.call(this, { diff --git a/packages/cat/dist/commands/cat.js b/packages/cat/dist/commands/cat.js index 4ed1950..e1f0abb 100755 --- a/packages/cat/dist/commands/cat.js +++ b/packages/cat/dist/commands/cat.js @@ -4,6 +4,7 @@ var fsAutocomplete = require('vorpal-autocomplete-fs'); var fetch = require('./../util/fetch'); var interfacer = require('./../util/interfacer'); +var preparser = require('./../preparser'); var lpad = require('./../util/lpad'); var strip = require('./../util/stripAnsi'); @@ -102,7 +103,7 @@ module.exports = function (vorpal) { return cat; } vorpal.api.cat = cat; - vorpal.command('cat [files...]').option('-A, --show-all', 'equivalent to -vET').option('-b, --number-nonblank', 'number nonempty output lines, overrides -n').option('-e', 'equivalent to -vE').option('-E, --show-ends', 'display $ at end of each line').option('-n, --number', 'number all output lines').option('-s, --squeeze-blank', 'suppress repeated empty output lines').option('-t', 'equivalent to -vT').option('-T, --show-tabs', 'display TAB characters as ^I').option('-v, --show-nonprinting', 'use ^ and M- notation, except for LFD and TAB') // this doesn't work yet... + vorpal.command('cat [files...]').parse(preparser).option('-A, --show-all', 'equivalent to -vET').option('-b, --number-nonblank', 'number nonempty output lines, overrides -n').option('-e', 'equivalent to -vE').option('-E, --show-ends', 'display $ at end of each line').option('-n, --number', 'number all output lines').option('-s, --squeeze-blank', 'suppress repeated empty output lines').option('-t', 'equivalent to -vT').option('-T, --show-tabs', 'display TAB characters as ^I').option('-v, --show-nonprinting', 'use ^ and M- notation, except for LFD and TAB') // this doesn't work yet... .autocomplete(fsAutocomplete()).action(function (args, cb) { args.options = args.options || {}; return interfacer.call(this, { diff --git a/packages/cp/dist/commands/cp.js b/packages/cp/dist/commands/cp.js index b6b16a5..1a52005 100755 --- a/packages/cp/dist/commands/cp.js +++ b/packages/cp/dist/commands/cp.js @@ -7,6 +7,7 @@ var os = require('os'); var expand = require('./../util/expand'); var interfacer = require('./../util/interfacer'); +var preparser = require('./../preparser'); var cp = { exec: function exec(args, options) { @@ -194,7 +195,7 @@ module.exports = function (vorpal) { return cp; } vorpal.api.cp = cp; - vorpal.command('cp [args...]').option('-f, --force', 'do not prompt before overwriting').option('-n, --no-clobber', 'do not overwrite an existing file').option('-r, --recursive', 'copy directories recursively').option('-R', 'copy directories recursively').autocomplete(fsAutocomplete()).action(function (args, callback) { + vorpal.command('cp [args...]').parse(preparser).option('-f, --force', 'do not prompt before overwriting').option('-n, --no-clobber', 'do not overwrite an existing file').option('-r, --recursive', 'copy directories recursively').option('-R', 'copy directories recursively').autocomplete(fsAutocomplete()).action(function (args, callback) { args.options = args.options || {}; return interfacer.call(this, { command: cp, diff --git a/packages/kill/dist/commands/kill.js b/packages/kill/dist/commands/kill.js index 0a0f0cc..9e414a4 100755 --- a/packages/kill/dist/commands/kill.js +++ b/packages/kill/dist/commands/kill.js @@ -4,6 +4,7 @@ var fkill = require('fkill'); var os = require('os'); var interfacer = require('./../util/interfacer'); +var preparser = require('./../preparser'); var usage = 'kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]'; var windows = os.platform().indexOf('win') > -1; @@ -83,7 +84,7 @@ module.exports = function (vorpal) { return kill; } vorpal.api.kill = kill; - vorpal.command('kill [process...]').option('-9', 'sigkill').option('-s [sig]', 'sig is a signal name').option('-n [sig]', 'sig is a signal number').option('-l [sigspec]', 'list the signal names').action(function (args, callback) { + vorpal.command('kill [process...]').parse(preparser).option('-9', 'sigkill').option('-s [sig]', 'sig is a signal name').option('-n [sig]', 'sig is a signal number').option('-l [sigspec]', 'list the signal names').action(function (args, callback) { args.options = args.options || {}; args.options.vorpal = vorpal; return interfacer.call(this, { diff --git a/packages/ls/dist/commands/ls.js b/packages/ls/dist/commands/ls.js index 7e621a6..b5ae1dd 100755 --- a/packages/ls/dist/commands/ls.js +++ b/packages/ls/dist/commands/ls.js @@ -14,6 +14,7 @@ var columnify = require('./../util/columnify'); var dateConverter = require('./../util/converter.date'); var fileFromPath = require('./../util/fileFromPath'); var interfacer = require('./../util/interfacer'); +var preparser = require('./../preparser'); var pad = require('./../util/pad'); var lpad = require('./../util/lpad'); var permissionsConverter = require('./../util/converter.permissions'); @@ -345,7 +346,7 @@ module.exports = function (vorpal) { return ls; } vorpal.api.ls = ls; - vorpal.command('ls [paths...]').option('-a, --all', 'do not ignore entries starting with .').option('-A, --almost-all', 'do not list implied . and ..').option('-d, --directory', 'list directory entries instead of contents, and do not dereference symbolic links').option('-F, --classify', 'append indicator (one of */=>@|) to entries').option('-h, --human-readable', 'with -l, print sizes in human readable format (e.g., 1K 234M 2G)').option('-i, --inode', 'print the index number of each file').option('-l', 'use a long listing format').option('-Q, --quote-name', 'enclose entry names in double quotes').option('-r, --reverse', 'reverse order while sorting').option('-R, --recursive', 'list subdirectories recursively').option('-S', 'sort by file size').option('-t', 'sort by modification time, newest first').option('-U', 'do not sort; list entries in directory order').option('-w, --width [COLS]', 'assume screen width instead of current value').option('-x', 'list entries by lines instead of columns').option('-1', 'list one file per line').autocomplete(fsAutocomplete()).action(function (args, cb) { + vorpal.command('ls [paths...]').parse(preparser).option('-a, --all', 'do not ignore entries starting with .').option('-A, --almost-all', 'do not list implied . and ..').option('-d, --directory', 'list directory entries instead of contents, and do not dereference symbolic links').option('-F, --classify', 'append indicator (one of */=>@|) to entries').option('-h, --human-readable', 'with -l, print sizes in human readable format (e.g., 1K 234M 2G)').option('-i, --inode', 'print the index number of each file').option('-l', 'use a long listing format').option('-Q, --quote-name', 'enclose entry names in double quotes').option('-r, --reverse', 'reverse order while sorting').option('-R, --recursive', 'list subdirectories recursively').option('-S', 'sort by file size').option('-t', 'sort by modification time, newest first').option('-U', 'do not sort; list entries in directory order').option('-w, --width [COLS]', 'assume screen width instead of current value').option('-x', 'list entries by lines instead of columns').option('-1', 'list one file per line').autocomplete(fsAutocomplete()).action(function (args, cb) { return interfacer.call(this, { command: ls, args: args.paths, diff --git a/packages/mkdir/dist/commands/mkdir.js b/packages/mkdir/dist/commands/mkdir.js index 8f92c96..1ce969c 100755 --- a/packages/mkdir/dist/commands/mkdir.js +++ b/packages/mkdir/dist/commands/mkdir.js @@ -5,6 +5,7 @@ var path = require('path'); var fsAutocomplete = require('vorpal-autocomplete-fs'); var interfacer = require('./../util/interfacer'); +var preparser = require('./../preparser'); var mkdir = { exec: function exec(args, options) { @@ -73,7 +74,7 @@ module.exports = function (vorpal) { return mkdir; } vorpal.api.mkdir = mkdir; - vorpal.command('mkdir [directory...]').option('-p, --parents', 'no error if existing, make parent directories as needed').option('-v, --verbose', 'print a message for each created directory').autocomplete(fsAutocomplete({ directory: true })).action(function (args, callback) { + vorpal.command('mkdir [directory...]').parse(preparser).option('-p, --parents', 'no error if existing, make parent directories as needed').option('-v, --verbose', 'print a message for each created directory').autocomplete(fsAutocomplete({ directory: true })).action(function (args, callback) { args.options = args.options || {}; args.options.vorpal = vorpal; return interfacer.call(this, { diff --git a/packages/mv/dist/commands/mv.js b/packages/mv/dist/commands/mv.js index 893205c..f382f0e 100755 --- a/packages/mv/dist/commands/mv.js +++ b/packages/mv/dist/commands/mv.js @@ -6,6 +6,7 @@ var path = require('path'); var expand = require('./../util/expand'); var interfacer = require('./../util/interfacer'); +var preparser = require('./../preparser'); var mv = { exec: function exec(args, options) { @@ -91,7 +92,7 @@ module.exports = function (vorpal) { return mv; } vorpal.api.mv = mv; - vorpal.command('mv [args...]').option('-f, --force', 'do not prompt before overwriting').option('-n, --no-clobber', 'do not overwrite an existing file').option('--striptrailingslashes', 'remove any trailing slashes from each source') // vorpal bug, need to add dashes between words + vorpal.command('mv [args...]').parse(preparser).option('-f, --force', 'do not prompt before overwriting').option('-n, --no-clobber', 'do not overwrite an existing file').option('--striptrailingslashes', 'remove any trailing slashes from each source') // vorpal bug, need to add dashes between words .option('-v, --verbose', 'explain what is being done').autocomplete(fsAutocomplete()).action(function (args, callback) { args.options = args.options || {}; return interfacer.call(this, { diff --git a/packages/rm/dist/commands/rm.js b/packages/rm/dist/commands/rm.js index 502f359..7866517 100755 --- a/packages/rm/dist/commands/rm.js +++ b/packages/rm/dist/commands/rm.js @@ -5,6 +5,7 @@ var fsAutocomplete = require('vorpal-autocomplete-fs'); var expand = require('./../util/expand'); var interfacer = require('./../util/interfacer'); +var preparser = require('./../preparser'); var unlinkSync = require('./../util/unlinkSync'); var rm = { @@ -159,7 +160,7 @@ module.exports = function (vorpal) { return rm; } vorpal.api.rm = rm; - vorpal.command('rm [files...]').option('-f, --force', 'ignore nonexistent files and arguments, never prompt').option('-r, --recursive', 'remove directories and their contents recursively').option('-R', 'remove directories and their contents recursively').autocomplete(fsAutocomplete()).action(function (args, callback) { + vorpal.command('rm [files...]').parse(preparser).option('-f, --force', 'ignore nonexistent files and arguments, never prompt').option('-r, --recursive', 'remove directories and their contents recursively').option('-R', 'remove directories and their contents recursively').autocomplete(fsAutocomplete()).action(function (args, callback) { args.options = args.options || {}; return interfacer.call(this, { command: rm, diff --git a/packages/sort/dist/commands/sort.js b/packages/sort/dist/commands/sort.js index 5809895..1d398f5 100755 --- a/packages/sort/dist/commands/sort.js +++ b/packages/sort/dist/commands/sort.js @@ -5,6 +5,7 @@ var fsAutocomplete = require('vorpal-autocomplete-fs'); var fetch = require('./../util/fetch'); var interfacer = require('./../util/interfacer'); +var preparser = require('./../preparser'); var strip = require('./../util/stripAnsi'); var shuffle = require('array-shuffle'); @@ -244,7 +245,7 @@ module.exports = function (vorpal) { return sort; } vorpal.api.sort = sort; - vorpal.command('sort [files...]').option('-M, --month-sort', 'compare (unknown) < \'JAN\' < ... < \'DEC\'').option('-h, --human-numeric-sort', 'compare human readable numbers (e.g., 2K 1G)').option('-n, --numeric-sort', 'compare according to string numerical value').option('-R, --random-sort', 'sort by random hash of keys').option('-r, --reverse', 'reverse the result of comparisons').option('-c, --check', 'check for sorted input; do not sort').option('-o, --output [file]', 'write result to file instead of standard output').autocomplete(fsAutocomplete()).action(function (args, callback) { + vorpal.command('sort [files...]').parse(preparser).option('-M, --month-sort', 'compare (unknown) < \'JAN\' < ... < \'DEC\'').option('-h, --human-numeric-sort', 'compare human readable numbers (e.g., 2K 1G)').option('-n, --numeric-sort', 'compare according to string numerical value').option('-R, --random-sort', 'sort by random hash of keys').option('-r, --reverse', 'reverse the result of comparisons').option('-c, --check', 'check for sorted input; do not sort').option('-o, --output [file]', 'write result to file instead of standard output').autocomplete(fsAutocomplete()).action(function (args, callback) { args.options = args.options || {}; return interfacer.call(this, { command: sort, diff --git a/packages/touch/dist/commands/touch.js b/packages/touch/dist/commands/touch.js index 91caa4b..e70def2 100755 --- a/packages/touch/dist/commands/touch.js +++ b/packages/touch/dist/commands/touch.js @@ -4,6 +4,7 @@ var fs = require('fs-extra'); var fsAutocomplete = require('vorpal-autocomplete-fs'); var interfacer = require('./../util/interfacer'); +var preparser = require('./../preparser'); require('./../lib/sugar'); var touch = { @@ -141,7 +142,7 @@ module.exports = function (vorpal) { return touch; } vorpal.api.touch = touch; - vorpal.command('touch ').option('-a', 'change only the access time').option('-c, --no-create', 'do not create any files').option('-d, --date [STRING]', 'parse STRING and use it instead of current time').option('-m', 'change only the modification time').option('-r, --reference [FILE]', 'use this file\'s times instead of current time').option('--time [WORD]', 'change the specified time: WORD is access, atime, or use: equivalent to -a WORD is modify or mtime: equivalent to -m').autocomplete(fsAutocomplete()).action(function (args, callback) { + vorpal.command('touch ').parse(preparser).option('-a', 'change only the access time').option('-c, --no-create', 'do not create any files').option('-d, --date [STRING]', 'parse STRING and use it instead of current time').option('-m', 'change only the modification time').option('-r, --reference [FILE]', 'use this file\'s times instead of current time').option('--time [WORD]', 'change the specified time: WORD is access, atime, or use: equivalent to -a WORD is modify or mtime: equivalent to -m').autocomplete(fsAutocomplete()).action(function (args, callback) { return interfacer.call(this, { command: touch, args: args.files || [], diff --git a/src/commands/alias.js b/src/commands/alias.js index d7a4683..f4f32c2 100755 --- a/src/commands/alias.js +++ b/src/commands/alias.js @@ -1,6 +1,7 @@ 'use strict'; const interfacer = require('./../util/interfacer'); +const preparser = require('./../preparser'); const alias = { @@ -97,6 +98,7 @@ module.exports = function (vorpal) { vorpal.api.alias = alias; vorpal .command('alias [name...]') + .parse(preparser) .option('-p', 'print all defined aliases in a reusable format') .action(function (args, callback) { args.options = args.options || {}; diff --git a/src/commands/boilerplate.js b/src/commands/boilerplate.js index df111ba..36f4099 100755 --- a/src/commands/boilerplate.js +++ b/src/commands/boilerplate.js @@ -1,6 +1,7 @@ 'use strict'; const interfacer = require('./../util/interfacer'); +const preparser = require('./../preparser'); /** * This is a boilerplate for implementing a new command. @@ -83,6 +84,7 @@ module.exports = function (vorpal) { */ vorpal .command('cmdName [files...]') + .parse(preparser) .option('-o, --option', 'option description') .action(function (args, callback) { args.options = args.options || {}; diff --git a/src/commands/cat.js b/src/commands/cat.js index edce1a7..9c514eb 100755 --- a/src/commands/cat.js +++ b/src/commands/cat.js @@ -4,6 +4,7 @@ const fsAutocomplete = require('vorpal-autocomplete-fs'); const fetch = require('./../util/fetch'); const interfacer = require('./../util/interfacer'); +const preparser = require('./../preparser'); const lpad = require('./../util/lpad'); const strip = require('./../util/stripAnsi'); @@ -110,6 +111,7 @@ module.exports = function (vorpal) { vorpal.api.cat = cat; vorpal .command('cat [files...]') + .parse(preparser) .option('-A, --show-all', 'equivalent to -vET') .option('-b, --number-nonblank', 'number nonempty output lines, overrides -n') .option('-e', 'equivalent to -vE') diff --git a/src/commands/cd.js b/src/commands/cd.js index bed8201..e6cfb2c 100755 --- a/src/commands/cd.js +++ b/src/commands/cd.js @@ -4,6 +4,7 @@ const fsAutocomplete = require('vorpal-autocomplete-fs'); const delimiter = require('./../delimiter'); const interfacer = require('./../util/interfacer'); +const preparser = require('./../preparser'); const cd = { @@ -50,6 +51,7 @@ module.exports = function (vorpal) { vorpal.api.cd = cd; vorpal .command('cd [dir]') + .parse(preparser) .autocomplete(fsAutocomplete({directory: true})) .action(function (args, callback) { args.options = args.options || {}; diff --git a/src/commands/cp.js b/src/commands/cp.js index 6021b5c..8f7f3a4 100755 --- a/src/commands/cp.js +++ b/src/commands/cp.js @@ -7,6 +7,7 @@ const os = require('os'); const expand = require('./../util/expand'); const interfacer = require('./../util/interfacer'); +const preparser = require('./../preparser'); const cp = { @@ -195,6 +196,7 @@ module.exports = function (vorpal) { vorpal.api.cp = cp; vorpal .command('cp [args...]') + .parse(preparser) .option('-f, --force', 'do not prompt before overwriting') .option('-n, --no-clobber', 'do not overwrite an existing file') .option('-r, --recursive', 'copy directories recursively') diff --git a/src/commands/kill.js b/src/commands/kill.js index 85e6a71..7bc506e 100755 --- a/src/commands/kill.js +++ b/src/commands/kill.js @@ -4,6 +4,7 @@ const fkill = require('fkill'); const os = require('os'); const interfacer = require('./../util/interfacer'); +const preparser = require('./../preparser'); const usage = `kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]`; const windows = (os.platform().indexOf('win') > -1); @@ -85,6 +86,7 @@ module.exports = function (vorpal) { vorpal.api.kill = kill; vorpal .command('kill [process...]') + .parse(preparser) .option('-9', 'sigkill') .option('-s [sig]', 'sig is a signal name') .option('-n [sig]', 'sig is a signal number') diff --git a/src/commands/ls.js b/src/commands/ls.js index 3d3b03e..3a6cf98 100755 --- a/src/commands/ls.js +++ b/src/commands/ls.js @@ -12,6 +12,7 @@ const columnify = require('./../util/columnify'); const dateConverter = require('./../util/converter.date'); const fileFromPath = require('./../util/fileFromPath'); const interfacer = require('./../util/interfacer'); +const preparser = require('./../preparser'); const pad = require('./../util/pad'); const lpad = require('./../util/lpad'); const permissionsConverter = require('./../util/converter.permissions'); @@ -349,6 +350,7 @@ module.exports = function (vorpal) { vorpal.api.ls = ls; vorpal .command('ls [paths...]') + .parse(preparser) .option('-a, --all', 'do not ignore entries starting with .') .option('-A, --almost-all', 'do not list implied . and ..') .option('-d, --directory', 'list directory entries instead of contents, and do not dereference symbolic links') diff --git a/src/commands/mkdir.js b/src/commands/mkdir.js index 21d623f..eddec0f 100755 --- a/src/commands/mkdir.js +++ b/src/commands/mkdir.js @@ -5,6 +5,7 @@ const path = require('path'); const fsAutocomplete = require('vorpal-autocomplete-fs'); const interfacer = require('./../util/interfacer'); +const preparser = require('./../preparser'); const mkdir = { @@ -74,6 +75,7 @@ module.exports = function (vorpal) { vorpal.api.mkdir = mkdir; vorpal .command('mkdir [directory...]') + .parse(preparser) .option('-p, --parents', 'no error if existing, make parent directories as needed') .option('-v, --verbose', 'print a message for each created directory') .autocomplete(fsAutocomplete({directory: true})) diff --git a/src/commands/mv.js b/src/commands/mv.js index f18a6be..a1e2428 100755 --- a/src/commands/mv.js +++ b/src/commands/mv.js @@ -6,6 +6,7 @@ const path = require('path'); const expand = require('./../util/expand'); const interfacer = require('./../util/interfacer'); +const preparser = require('./../preparser'); const mv = { @@ -90,6 +91,7 @@ module.exports = function (vorpal) { vorpal.api.mv = mv; vorpal .command('mv [args...]') + .parse(preparser) .option('-f, --force', 'do not prompt before overwriting') .option('-n, --no-clobber', 'do not overwrite an existing file') .option('--striptrailingslashes', 'remove any trailing slashes from each source') // vorpal bug, need to add dashes between words diff --git a/src/commands/rm.js b/src/commands/rm.js index 56f4888..a0a37ee 100755 --- a/src/commands/rm.js +++ b/src/commands/rm.js @@ -5,6 +5,7 @@ const fsAutocomplete = require('vorpal-autocomplete-fs'); const expand = require('./../util/expand'); const interfacer = require('./../util/interfacer'); +const preparser = require('./../preparser'); const unlinkSync = require('./../util/unlinkSync'); const rm = { @@ -163,6 +164,7 @@ module.exports = function (vorpal) { vorpal.api.rm = rm; vorpal .command('rm [files...]') + .parse(preparser) .option('-f, --force', 'ignore nonexistent files and arguments, never prompt') .option('-r, --recursive', 'remove directories and their contents recursively') .option('-R', 'remove directories and their contents recursively') diff --git a/src/commands/sort.js b/src/commands/sort.js index 5a08549..07f50ef 100755 --- a/src/commands/sort.js +++ b/src/commands/sort.js @@ -5,6 +5,7 @@ const fsAutocomplete = require('vorpal-autocomplete-fs'); const fetch = require('./../util/fetch'); const interfacer = require('./../util/interfacer'); +const preparser = require('./../preparser'); const strip = require('./../util/stripAnsi'); const shuffle = require('array-shuffle'); @@ -246,6 +247,7 @@ module.exports = function (vorpal) { vorpal.api.sort = sort; vorpal .command('sort [files...]') + .parse(preparser) .option('-M, --month-sort', 'compare (unknown) < \'JAN\' < ... < \'DEC\'') .option('-h, --human-numeric-sort', 'compare human readable numbers (e.g., 2K 1G)') .option('-n, --numeric-sort', 'compare according to string numerical value') diff --git a/src/commands/touch.js b/src/commands/touch.js index 83e771e..700a4d4 100755 --- a/src/commands/touch.js +++ b/src/commands/touch.js @@ -4,6 +4,7 @@ const fs = require('fs-extra'); const fsAutocomplete = require('vorpal-autocomplete-fs'); const interfacer = require('./../util/interfacer'); +const preparser = require('./../preparser'); require('./../lib/sugar'); const touch = { @@ -150,6 +151,7 @@ module.exports = function (vorpal) { vorpal.api.touch = touch; vorpal .command('touch ') + .parse(preparser) .option('-a', 'change only the access time') .option('-c, --no-create', 'do not create any files') .option('-d, --date [STRING]', 'parse STRING and use it instead of current time') diff --git a/src/commands/unalias.js b/src/commands/unalias.js index 5721f62..70928e3 100755 --- a/src/commands/unalias.js +++ b/src/commands/unalias.js @@ -1,6 +1,7 @@ 'use strict'; const interfacer = require('./../util/interfacer'); +const preparser = require('./../preparser'); const unalias = { @@ -81,6 +82,7 @@ module.exports = function (vorpal) { vorpal.api.unalias = unalias; vorpal .command('unalias [name...]') + .parse(preparser) .option('-a', 'remove all alias definitions') .action(function (args, callback) { args.options = args.options || {}; diff --git a/test/preparser.js b/test/preparser.js index 830f7a9..40a83b9 100755 --- a/test/preparser.js +++ b/test/preparser.js @@ -90,6 +90,49 @@ describe('preparser', function () { it('should convert the same variable twice', function () { cash('echo $PATH-$PATH').should.equal(`${path}-${path}\n`); }); + + after(function () { + delete process.env.FOO; + }); + }); + describe('commands are preparsed', function () { + before(function () { + process.env.FOO = 'thisfiledoesntexist'; + }); + + it('should work for cat', function () { + cash('cat $FOO').should.equal(`cat: ${process.env.FOO}: No such file or directory\n`); + }); + + it('should work for cd', function () { + cash('cd $FOO').should.equal(`-bash: cd: ${process.env.FOO}: No such file or directory\n`); + }); + + it('should work for cp', function () { + cash('cp $FOO dest').should.equal(`cp: cannot stat ${process.env.FOO}: No such file or directory\n`); + }); + + it('should work for ls', function () { + cash('ls $FOO').should.equal(''); + cash('ls $NOSUCHENVVAR').should.equal(cash('ls')); + }); + + it('should work for mv', function () { + cash('mv $FOO dest').should.equal(`mv: cannot stat ${process.env.FOO}: No such file or directory\n`); + }); + + it('should work for rm', function () { + cash('rm $FOO').should.equal(`rm: cannot remove ${process.env.FOO}: No such file or directory\n`); + }); + + it('should work for sort', function () { + cash('sort $FOO').should.equal(`sort: cannot read: ${process.env.FOO}: No such file or directory\n`); + }); + + it.skip('should work for kill', function () { + cash('kill $FOO').should.equal(`-cash: kill: (${process.env.FOO}) - No such process\n`); + }); + after(function () { delete process.env.FOO; });