2014-09-22 9 views
5

Sto scrivendo uno strumento da riga di comando in python e utilizzando pip per distribuirlo. Ho scritto alcuni script (uno per bash e uno per zsh) per consentire allo strumento di avere il completamento della tabulazione. C'è un modo per ottenere pip per installare questi script quando qualcuno installa un pip?installazione pip con completamento shell

Ad esempio: Ho un file completion.bash. Quando qualcuno fa

PIP installare mypackage

Sarà anche rifornirsi il file bash.

Sono abbastanza sicuro di poterlo fare per linux e bash inserendo lo script nella sezione data_files nello script setup.py.

data_file=[ 
    ('/etc/bash_completion.d', ['bin/completion.bash']) 
], 

Ma come posso fare questo quindi è la piattaforma e le coperture indipendente? Ho bisogno che funzioni per mac/linux sia in bash che in zsh. Se possibile, supporta anche le finestre.

È possibile? E se sì, come?


Nel caso in cui conta, qui è il mio script bash:

_foo_complete() { 
COMPREPLY=() 
local words=("${COMP_WORDS[@]}") 
local word="${COMP_WORDS[COMP_CWORD]}" 
words=("${words[@]:1}") 
local completions="$(foo completer --cmplt=\""${words[*]}"\")" 
COMPREPLY=($(compgen -W "$completions" -- "$word")) 
} 

complete -F _foo_complete foo 

Attualmente sto installando il programma semplicemente eseguendo source completion.bash

risposta

2

Stai chiedendo molte domande differenti.

In primo luogo, non esiste una soluzione cross-platform o cross-shell per definire i completamenti di shell personalizzati. Quello che hai postato funziona per bash, ma in tcsh, ad esempio, usi il comando complete di tcsh, che funziona diversamente da bash.

In secondo luogo, l'acquisizione dei file che contengono quelle definizioni di completamento al momento di pip install non andrebbe molto bene. I completamenti potrebbero funzionare in quella stessa sessione, ma probabilmente vorrai che abbiano effetto anche in sessioni future (ad esempio invocazioni di shell). Per questo, i tuoi file dovrebbero essere originati ogni volta che la shell si avvia (ad es. Da parte dell'utente .bashrc, in caso di bash).

Questa misura per cui "installare" i file significa semplicemente posizionarli da qualche parte e suggerire agli utenti di procurarseli dal rispettivo file dot-rc. Anche se tu potessi, non dovresti provare a "forzarlo". Offri ai tuoi utenti la possibilità di aggiungerlo al loro file dot-rc, se lo desiderano.

L'approccio migliore sarebbe probabilmente quello di includere nel pacchetto un file di definizioni di completamento per shell supportata, ad es. complete.bash, complete.tcsh, e dio sa cosa per Windows (mi dispiace, non sono un utente di Windows).