#compdef trial conch mktap cftp tapconvert twistd ckeygen lore pyhtmlizer websetroot tap2deb tkmktap tkconch manhole tap2rpm # Copyright (c) 2005 Eric Mangold # See LICENSE for details. # # Maintainer: Eric Mangold # 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/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 -n1 $commands[twistd]) [[ $shebang != \#\!* ]] && echo 'ERROR: invalid shebang line for test script "twistd"' && return 1 PYTHON=$shebang[3,-1] PYTHON=${PYTHON# *} #debug PYTHON -$PYTHON- python_code=' import twisted, os.path dir = os.path.dirname(twisted.__file__) print dir + os.sep + os.path.join("python", "zsh") ' dir=$($PYTHON -c "$python_code") #debug "Trying to load twisted functions from $dir" 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:' echo "$dir" 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" #