| #compdef trial conch mktap cftp tapconvert twistd ckeygen lore pyhtmlizer tap2deb tkconch manhole tap2rpm |
| |
| # Copyright (c) 2005 Eric Mangold |
| # See LICENSE for details. |
| # |
| # 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/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] |
| 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 _tap2deb _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" |
| # |