• Stars
    star
    165
  • Rank 228,906 (Top 5 %)
  • Language
    JavaScript
  • Created about 13 years ago
  • Updated over 9 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Does your Node.js command line program have lots of arguments? Add custom tab completion!

Synopsis

Custom command line tab completion for node.js applications.

Example

#!/usr/bin/env node

var complete = require('complete'); // get the `complete` module.

//
// list of items to complete on.
//
complete.list = ['apple', 'orange', 'pear', 'lemon', 'mango'];

complete.callback = function(lastSelection, userInput, reducedList) {

  if (lastSelection === 'apple') {
	complete.add('sauce');
  }
};

complete.init();

//
// continue with the application...
//
console.log('program started with the following arguments:', process.argv[2] || 'none provided');

Distribution and Installation

Your installment procedure should place your CLI program in a location made accessible by the PATH variable. If users install your program with the NPM -g option, your program will be in the path.

/usr/local/bin/myprogram -> /usr/local/lib/node_modules/myprogram/bin/myprogram

API

list

Create a list of commands that you want to autocomplete with.

complete.list = ['apple', 'orange', 'pear', 'lemon', 'mango'];

callback

Optionally you can define a callback that will get called when the match when the completion happens.

complete.callback = function(lastSelection, userInput, reducedList) {

  //
  // do something if this is an `orange`. Note that anything that
  // you `process.stdout.write()` will be added to the auto complete
  // list.
  //
};

init()

Initialize the auto completion behavior.

complete.init();

Higher Level Example

var complete = require('complete');

complete({
  program: 'my-program',
  // Commands
  commands: {
    'hello': function(words, prev, cur) {
      complete.output(cur, ['abc', 'def']);
    },
    'world': {
      'hi': function(words, prev, cur) {
        complete.echo('next');
      }
    }
  },
  // Position-independent options.
  // These will attempted to be
  // matched if `commands` fails
  // to match.
  options: {
    '--help': {},
    '-h': {},
    '--version': {},
    '-v': {}
  }
});

The above results in

$ my-program he<TAB>
$ my-program hello
$ my-program hello a<TAB>
$ my-program hello abc

License

(The MIT License)

Copyright (c) 2010 hij1nx http://www.twitter.com/hij1nx

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

More Repositories

1

levelui

A GUI for LevelDB management based on atom-shell.
CSS
723
star
2

lev

The complete REPL & CLI for managing LevelDB instances.
JavaScript
296
star
3

node-chrome

deprecated
JavaScript
281
star
4

cdir

An interactive console.dir() for node.js similar to console.dir() in webkit.
JavaScript
269
star
5

prompt-sync

a synchronous prompt for node.js
JavaScript
217
star
6

ldb

A C++ REPL / CLI for LevelDB
C++
201
star
7

cxx-http

A simple http library in c++ backed by libuv and http-parser.
C++
183
star
8

codesurgeon

[DEPRECATED] Build a subset or superset of a javascript codebase via reading the AST.
JavaScript
163
star
9

liveswap

zero downtime re-deploys with Node.js
JavaScript
162
star
10

Porter

Resource oriented abstraction layer for JSON-REST
JavaScript
156
star
11

EventVat

An evented, in-process key/value store for small volatile working sets in Node.js or the Browser
JavaScript
111
star
12

prohub

A Project Perspective for Github
CSS
90
star
13

paramify

Parameterized routes without a big bloated router, e.g. "showtimes/:start/:end" and "files/*"
JavaScript
84
star
14

gmm

Git Module Manager - http://gitmodules.org
Shell
78
star
15

blog

personal blog
HTML
73
star
16

level-replicator

WIP; Eventually consistent log-based multi-master replication for levelDB (@Level)
JavaScript
70
star
17

JUP

A fast JSON to Markup Engine
JavaScript
62
star
18

jsgit-stream

JavaScript
62
star
19

txl

All your html templating needs in under 10 lines of JS.
JavaScript
62
star
20

logmap

Filter json streams/logging output using JSONSelect and format the output
JavaScript
59
star
21

tsd

spins up a server to receive time-series data via tcp streams and then graphs it in the browser via web-sockets
JavaScript
52
star
22

asde

A low level module for destructuring asynchronous values.
JavaScript
50
star
23

pipe

Unix style pipes for nodejs streams `streamA | streamB | streamA`
JavaScript
46
star
24

pxx

a cli tool to store encrypted values in a json file and easily get them out again
JavaScript
40
star
25

net-log

a very fast network-based application logger
JavaScript
39
star
26

bale

A transpiler/module system polyfill for C++
C++
38
star
27

level-users

Store and get users, salt their passwords, persist them to disk, etc.
JavaScript
38
star
28

node-chat

This is very simple code that can be used to demonstrate the caveats and design issues associated with building real-time chat server that uses socket.io.
JavaScript
35
star
29

vines

[not actively maintained] Vines implements the gossip protocol as well as quorum-based voting machinery to facilitate cooperative decision making in distributed systems.
JavaScript
34
star
30

cxx-eventemitter

A minimalist event emitter for C++
C++
33
star
31

debug

A small debugging library for C++
C++
31
star
32

levelweb

LevelDB over http or https.
JavaScript
29
star
33

d

An git based, infrastructure-agnostic deploy tool for node.js
JavaScript
29
star
34

peerdrop

a cross-platform "airdrop" made as a demo for offline camp
JavaScript
27
star
35

route

A simple http router in c++ that can be used with nodeuv-http
C++
27
star
36

level-2pc

A two-phase-commit protocol for leveldb.
JavaScript
26
star
37

cxx-tap

Test Anything Protocol (TAP) Producer for C++
C++
25
star
38

dotfiles

Personal configuration files for unix-like environments.
Vim Script
23
star
39

packvis

package visualizer for the commandline
JavaScript
23
star
40

yl

A tiny flow control module that destructures.
JavaScript
22
star
41

telenode

Multi-vendor cellular network services for node.js
JavaScript
21
star
42

through-cache

a through stream that caches
JavaScript
20
star
43

level-sql

sql for nosql [a work in progress, contributors welcome!]
JavaScript
19
star
44

literate-router

markdown powered routing
JavaScript
17
star
45

cxx-fs

Provides a nodejs-like experience for file I/O in C++ using c++1y and libuv.
C++
17
star
46

level-subtree

build and maintain a tree from the sublevels in a leveldb instance
JavaScript
17
star
47

peerchan

Fully decentralized p2p IRC for your terminal
JavaScript
15
star
48

twitter

A feedless twitter client; broadcast, reply, stay productive. Read a book in your spare time.
JavaScript
15
star
49

to-ml

[deprecated] A tiny module to generate markup
JavaScript
14
star
50

pngify

Text ⇢ PNG ⇢ Text ┈ Pure JS. No dependencies.
JavaScript
13
star
51

cpp-stacktrace

Quick and simple stacktraces for C++
C++
12
star
52

eventemitter

Rust event emitter
Rust
12
star
53

pkp

Public Key Pen! (code from my Nodeconf.eu talk)
JavaScript
12
star
54

redirector

A simple redirect server / URL shortener in C++ backed by nodeuv-http (libuv and http_parser) and leveldb.
C++
12
star
55

forest

Javascript Implementations of SplayTrees, Fusion Trees, BTrees, etc.
JavaScript
11
star
56

node-admin

DEPRECATED
JavaScript
11
star
57

skipfile

Append data, seek forward and seek backward inside a binary file.
JavaScript
10
star
58

TIL

Today I Learned
10
star
59

MacBox

A fork of MacVM that fixes a bunch of UI issues
Swift
10
star
60

json

Better JSON handling for C++
C
10
star
61

tabulate

fit tabular data to the width of your terminal
JavaScript
10
star
62

timeseries-from-gitlog

Represent the git log as time-series data in JSON
JavaScript
10
star
63

cpp-libasync

general purpose asynchronous control flow helpers on thread-safe data structures
C++
9
star
64

stream-response

Respond with `json`, `html`, `text`, or `redirect`. Extend headers easily.
JavaScript
9
star
65

hashd

Recursively hash files in a specified path, appreciate ignore files and patterns.
JavaScript
8
star
66

through2-join

Produce a stream of intersecting data of two or more delimited json streams
JavaScript
8
star
67

go-indexof

The IndexOf() method returns the first index at which a given element can be found in the slice, or -1 if it is not present.
Go
7
star
68

go-tabulate

Column-like layout (padded to fit) for arrays of strings.
Go
7
star
69

ntail

tolerant tailing for your new line delimited json output
JavaScript
7
star
70

node-nosuchmethod

Object.create with a handler for methods that do not exist.
JavaScript
7
star
71

level-key

The easiest way to work with sublevels through multilevel.
JavaScript
7
star
72

subclass

A safe way to extend native types in Node.js and in modern browsers
JavaScript
7
star
73

dtn-website

dtnconf
HTML
7
star
74

level-mget

get multiple values from leveldb
JavaScript
7
star
75

netpeek

this is stupid, dont use it, its just an experiment.
JavaScript
7
star
76

pks

Public Key Server; an invite-only-approach with built in master-master replication.
JavaScript
6
star
77

wc-through

unix wc core util as a through stream, counts into an object
JavaScript
6
star
78

cp-mux

copy files over a multiplexed stream
JavaScript
6
star
79

postmortem

A searchable, issue-only repo for post-mortems (Idea / Template).
6
star
80

admin-template

DEPRECATED
JavaScript
5
star
81

date-at

easily create relative dates. ie: date('+1day')
JavaScript
5
star
82

go-termsize

Get the current size (width and height) of the terminal (nothing more!)
Go
5
star
83

qs

A minimalist dom library
JavaScript
4
star
84

test-env

Conditional output based on an environment variable
JavaScript
3
star
85

platform-module

boilerplate for creating a cross-platform module
JavaScript
3
star
86

getprops

Object.getPropertyDescriptor and Object.getPropertyNames
JavaScript
3
star
87

uvxx

A fork of node.native
C
2
star
88

stream-body

parse a stream correctly (according to the content-type) using raw-body
JavaScript
2
star
89

leveldb

leveldb
C++
2
star
90

electron-issue-17316-poc

Demonstrates issue with missing APIs when contextIsolation is set to true
JavaScript
2
star
91

raylib

C
1
star
92

esauto

Automatic type deduction for javascript
JavaScript
1
star
93

seq-lex

Creates or increments the value of a lexicographically sortable string. useful for creating sequential keys in leveldb
JavaScript
1
star
94

streamordie

A Javascript based band (recorded in front of a async audience)
1
star