bash completion for 'triton account update <TAB>'

This commit is contained in:
Trent Mick 2016-01-18 11:58:01 -08:00
parent 5ee94b04af
commit 989a43f367
6 changed files with 31 additions and 3 deletions

View File

@ -2,6 +2,9 @@
## 4.2.0 (not yet released) ## 4.2.0 (not yet released)
- Bash completion: Add completion for *args* to `triton account update <TAB>`.
This isn't perfect because a space is added after completion of "FIELD=",
but hopefully is helpful.
- #75 `triton account update ...` - #75 `triton account update ...`

View File

@ -6,3 +6,10 @@ function complete_tritonprofile {
| sed -E 's/^.*\/([^\/]+)\.json$/\1/') | sed -E 's/^.*\/([^\/]+)\.json$/\1/')
compgen $compgen_opts -W "$candidates" -- "$word" compgen $compgen_opts -W "$candidates" -- "$word"
} }
function complete_tritonupdateaccountfield {
local word="$1"
local candidates
candidates="{{UPDATE_ACCOUNT_FIELDS}}"
compgen $compgen_opts -W "$candidates" -- "$word"
}

View File

@ -915,7 +915,8 @@ function objFromKeyValueArgs(args, opts)
args.forEach(function (arg) { args.forEach(function (arg) {
var kv = strsplit(arg, '=', 2); var kv = strsplit(arg, '=', 2);
if (kv.length < 2) { if (kv.length < 2) {
throw new TypeError(format('invalid key=value argument: "%s"')); throw new TypeError(format('invalid key=value argument: "%s"',
arg));
} }
var k = kv[0]; var k = kv[0];

View File

@ -169,4 +169,6 @@ do_update.help = [
/* END JSSTYLED */ /* END JSSTYLED */
].join('\n'); ].join('\n');
do_update.completionArgtypes = ['tritonupdateaccountfield'];
module.exports = do_update; module.exports = do_update;

View File

@ -13,6 +13,17 @@
var fs = require('fs'); var fs = require('fs');
var path = require('path'); var path = require('path');
var UPDATE_ACCOUNT_FIELDS
= require('./cloudapi2').CloudApi.prototype.UPDATE_ACCOUNT_FIELDS;
// Replace {{variable}} in `s` with the template data in `d`.
function renderTemplate(s, d) {
return s.replace(/{{([a-zA-Z_]+)}}/g, function (match, key) {
return d.hasOwnProperty(key) ? d[key] : match;
});
}
function do_completion(subcmd, opts, args, cb) { function do_completion(subcmd, opts, args, cb) {
if (opts.help) { if (opts.help) {
@ -23,9 +34,13 @@ function do_completion(subcmd, opts, args, cb) {
if (opts.raw) { if (opts.raw) {
console.log(this.bashCompletionSpec()); console.log(this.bashCompletionSpec());
} else { } else {
var specExtra = fs.readFileSync( var specExtraIn = fs.readFileSync(
path.join(__dirname, '../etc/triton-bash-completion-types.sh'), path.join(__dirname, '../etc/triton-bash-completion-types.sh'),
'utf8'); 'utf8');
var specExtra = renderTemplate(specExtraIn, {
UPDATE_ACCOUNT_FIELDS: Object.keys(UPDATE_ACCOUNT_FIELDS).sort()
.map(function (field) { return field + '='; }).join(' ')
});
console.log(this.bashCompletion({specExtra: specExtra})); console.log(this.bashCompletion({specExtra: specExtra}));
} }
cb(); cb();

View File

@ -8,7 +8,7 @@
"backoff": "2.4.1", "backoff": "2.4.1",
"bigspinner": "3.1.0", "bigspinner": "3.1.0",
"bunyan": "1.5.1", "bunyan": "1.5.1",
"cmdln": "3.5.2", "cmdln": "3.5.3",
"extsprintf": "1.0.2", "extsprintf": "1.0.2",
"lomstream": "1.1.0", "lomstream": "1.1.0",
"mkdirp": "0.5.1", "mkdirp": "0.5.1",