2013-11-14 12 views
13

Desidero aggiungere il completamento della tabulazione a un'app CLI Nodejs (e preferibilmente generare il completamento del tab in modo dinamico).Come aggiungere il completamento della tabulazione a un'app CLI Nodejs

ho trovato un paio di moduli NPM, ma non sicuro di come la loro attuazione davvero:

https://github.com/hij1nx/complete

https://github.com/mklabs/node-tabtab

Quindi quello che sto cercando è così posso avere un file nodejs che è qualcosa come:

my-cmd create arg1 arg2 

Ma allora potrei desiderare di completamento automatico come:

my-cmd cr<tab> -> create 

Grazie!

+0

Questo non è qualcosa implementato nella tua app ma all'interno della shell che l'utente utilizza. Vedi http://askubuntu.com/questions/95211/how-do-i-set-up-bash-completion-for-command-arguments per come 'bash' fa questo. – Joe

+1

Sono sulla stessa situazione. Già trovato diversi moduli 'npm' per gestire il completamento ma non riesco a capire come eseguire gli esempi. – diosney

+0

@diosney. Così ho iniziato a lavorare su un progetto in cui è presente. Https://github.com/Jonovono/um. Presenterò una risposta più completa su come sto ottenendo questo risultato. – Jonovono

risposta

1

Come ha detto @Joe, questo è ciò che fornisce la shell dell'utente. Per bash, in sostanza si crea e si registra una funzione che viene eseguita quando un utente fa tabulazioni dopo aver digitato il nome del programma. La funzione restituisce le stringhe disponibili per il completamento automatico.

Vedi questo tutorial per un intro

http://www.debian-administration.org/article/316/An_introduction_to_bash_completion_part_1

mi piace anche questo esempio, perché è semplice e mostra ciò che deve andare avanti. È per loro tessuto strumento python.

https://raw.githubusercontent.com/marcelor/fabric-bash-autocompletion/master/fab

4

Edit - Risposte rapide

Dopo ho risposto, ho continuato a leggere fonte Tabtab un po 'e ho notato che posso anche correre

pkgname completion install 

per installare il completamento. dal momento che il mio ambiente era già sporco, non so se in realtà ha fatto nulla, ma mi sembra come ha fatto ..

Longer risposta

@CameronLittle ha dato grande documentazione.

Per gli impazienti, si può iniziare eseguendo

sudo bash -c 'pkgname completion > /etc/bash_completion.d/pkgname' 
source /etc/bash_completion.d/pkgname 

Questo aggiungerà completamento alla corrente sessione di bash.

Per quanto ne so, le nuove sessioni completeranno automaticamente il completamento.

per rendere il processo senza soluzione di continuità per l'utente, è possibile utilizzare i install e postinstall ganci in package.json

https://docs.npmjs.com/misc/scripts

Assicurarsi di non stampare qualsiasi cosa per impostazione predefinita. significa che l'esecuzione di pkgname non dovrebbe produrre output, o altrimenti non funzionerà.

importante!installare Tabtab solo dal maestro

sembra Tabtab ha un fastidioso bug che è stato risolto in padrone, ma non ha mai avuto in un rilascio ..

La rilevanti si impegnano a risolvere il problema è questo: https://github.com/mklabs/node-tabtab/commit/f8473555bf7278a300eae31cbe3377421e2eeb26

che gestisce completamento per stringhe che iniziano con --.

Il commit se da febbraio 2014, tuttavia l'ultima versione a partire da (gennaio 2015) è 0.0.2 da gennaio 2014. Presumo che non ci saranno più versioni.

Quindi, se si desidera ottenere questa correzione, e si dovrebbe (!), Installare tabtab solo dal master.

non sprecare 2 ore per capire cosa avete sbagliato come me :)

Come ha raggiungo questa risposta? TL; DR

Mentre la risposta di @ CameronLittle fornisce la spiegazione dietro la scena, vorrei spiegare come ho raggiunto la risposta.

Ho provato a utilizzare il pacchetto tabtab che ha una sezione esplicita sull'installazione. vedi https://www.npmjs.com/package/tabtab#completion-install

Tuttavia, quello non sembra funzionare per me.

Guardando il codice che istruiscono da aggiungere, compaiono i seguenti process.argv.slice(2)[0] === 'completion' che mi ha fatto funzionare l'ordine pkgname completion, il quale emette qualcosa che inizia con

###-begin-pkgname-completion-### 
### credits to npm, this file is coming directly from isaacs/npm repo 
# 
# Just testing for now. (trying to learn this cool stuff) 
# 
# npm command completion script 
# 
# Installation: pkgname completion >> ~/.bashrc (or ~/.zshrc) 
# 

le parole this file is coming directly from isaacs/npm repo mi sono chiesto più. seguendo l'altra risposta, ho visto /etc/bash_completion.d/npm - che ha mostrato lo stesso contenuto esatto .. e quindi il commento.

ho deciso di correre

pkgname completion > /etc/bash_completion.d/pkgname 

, tuttavia, che richiede autorizzazioni sudo e così diventa

sudo bash -c "pkgname completion > /etc/bash_completion.d/pkgname 

e poi, al fine di applicarlo alla corrente sessione di bash ho dovuto correre

source /etc/bash_completion.d/pkgname 

e voilà! Funziona!

quando ho provato ad aprire un altro terminale, ha funzionato ancora, quindi presumo che si applicherà a tutti gli utenti. in caso contrario, dovresti aggiungerlo a .bashrc o qualcosa del genere.

2

Vorrei solo aggiungere che c'è uno npm package yargs che abilita scorciatoie di completamento bash per comandi e opzioni.

Ha la possibilità di generare uno script di completamento .bashrc. I completamenti di Bash vengono quindi abilitati mediante l'individuazione dello script generato.

Attualmente è un pacchetto gestito attivamente NPM, con oltre un milione di download al mese.

6

Utilizzare il pacchetto omelette che ho creato.Se avete domande, per favore contattatemi.