1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- var fs = require('fs'),
- path = require('path')
- // add bash completions to your
- // yargs-powered applications.
- module.exports = function (yargs, usage) {
- var self = {
- completionKey: 'get-yargs-completions'
- }
- // get a list of completion commands.
- self.getCompletion = function (done) {
- var completions = [],
- current = process.argv[process.argv.length - 1],
- previous = process.argv.slice(process.argv.indexOf('--' + self.completionKey) + 1),
- argv = yargs.parse(previous)
- // a custom completion function can be provided
- // to completion().
- if (completionFunction) {
- if (completionFunction.length < 3) {
- // synchronous completion function.
- return done(completionFunction(current, argv))
- } else {
- // asynchronous completion function
- return completionFunction(current, argv, function (completions) {
- done(completions)
- })
- }
- }
- if (!current.match(/^-/)) {
- usage.getCommands().forEach(function (command) {
- completions.push(command[0])
- })
- }
- if (current.match(/^-/)) {
- Object.keys(yargs.getOptions().key).forEach(function (key) {
- completions.push('--' + key)
- })
- }
- done(completions)
- }
- // generate the completion script to add to your .bashrc.
- self.generateCompletionScript = function ($0) {
- var script = fs.readFileSync(
- path.resolve(__dirname, '../completion.sh.hbs'),
- 'utf-8'
- ),
- name = path.basename($0)
- // add ./to applications not yet installed as bin.
- if ($0.match(/\.js$/)) $0 = './' + $0
- script = script.replace(/{{app_name}}/g, name)
- return script.replace(/{{app_path}}/g, $0)
- }
- // register a function to perform your own custom
- // completions., this function can be either
- // synchrnous or asynchronous.
- var completionFunction = null
- self.registerFunction = function (fn) {
- completionFunction = fn
- }
- return self
- }
|