diff options
Diffstat (limited to 'Completion')
-rw-r--r-- | Completion/Unix/Command/_twisted | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/Completion/Unix/Command/_twisted b/Completion/Unix/Command/_twisted new file mode 100644 index 000000000..b3b242729 --- /dev/null +++ b/Completion/Unix/Command/_twisted @@ -0,0 +1,86 @@ +#compdef trial conch mktap cftp tapconvert twistd ckeygen lore pyhtmlizer websetroot tap2deb tkmktap tkconch manhole tap2rpm + +# Copyright (c) 2005 Eric Mangold +# Maintainer: Eric Mangold <teratorn@twistedmatrix.com> + +# This file is meant to be in your zsh function path. i.e. in one of those +# directories listed in your $fpath variable. +# +# e.g. /usr/local/share/zsh/site-functions/ +# +# It is responsible for passing completion control to the correct +# completion function for the version of Twisted that is +# currently in use. +# +# Goals: +# +# We want to detect any changes to PYTHONPATH since the last time we ran. +# That way we can re-locate the completion functions so that we are sure +# to be completing for the right version of Twisted. + +local dir old_fpath python_code run shebang + +function debug () { + echo $@ >> /tmp/twisted_stub_debug +} + +#debug "START _twisted_stub" + +function load_twisted_completions() { + [[ -z $commands[twistd] ]] && echo 'ERROR: test command "twistd" not found in path' && return 1 + shebang=$(head -1 $commands[twistd]) + [[ $shebang != \#\!* ]] && echo 'ERROR: invalid shebang line for test script "twistd"' && return 1 + PYTHON=$shebang[3,-1] # strip #! off the shebang + PYTHON=${PYTHON# *} # remove any spaces between #! and command + + #debug PYTHON $PYTHON:q + python_code=' +import twisted, os.path +dir = os.path.dirname(twisted.__file__) +print os.path.join(dir, "python", "zsh") +' + dir=$(${=PYTHON} -c "$python_code") + #debug "Trying to load twisted functions from $dir:q" + if [[ -r $dir/_twistd ]]; then + old_fpath=($fpath) + fpath=( $dir $fpath ) + autoload +X _trial _conch _mktap _cftp _tapconvert _twistd _ckeygen + autoload +X _lore _pyhtmlizer _websetroot _tap2deb _tkmktap _tkconch + autoload +X _manhole _tap2rpm + fpath=($old_fpath) + else + echo 'ERROR: Cannot find twisted completion function files in $dir:q' + return 1 + fi +} + +function twisted_run () { + # run completion function for current command + # the :t modifier strips off any leading pathname components + eval _$words[1]:t +} + +function twisted_save_load_run () { + # save PYTHONPATH, load twisted completions, and run the completion + # function for the current command + load_twisted_completions && twisted_run && PYTHONPATH_last=$PYTHONPATH +} + + +if [[ -n $PYTHONPATH_last ]]; then + #debug "PYTHONPATH_last is set to $PYTHONPATH_last" + #check if it's the same as the last time we ran + if [[ $PYTHONPATH == $PYTHONPATH_last ]]; then + #debug "PYTHONPATH == PYTHONPATH_last" + # it's the same, which means we've already loaded completion + # functions and nothing has changed. + twisted_run + else + twisted_save_load_run + fi +else + twisted_save_load_run +fi + +#debug "END _twisted_stub" +# |