From 4ae3672ce8f9ad1ea091295b9e7ceb0279c2fc79 Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Sun, 12 Feb 2006 20:33:58 +0000 Subject: 22235: Eric Mangold: twisted completion --- ChangeLog | 3 ++ Completion/Unix/Command/_twisted | 86 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 Completion/Unix/Command/_twisted diff --git a/ChangeLog b/ChangeLog index a62e2fa9c..39b06c999 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2006-02-12 Peter Stephenson + * 22235: Eric Mangold: Completion/Unix/Command/_twisted: new + completion. + * 22237: Vincent Steman: Completion/Unix/Command/_man: location of packaged manual pages on NetBSD. diff --git a/Completion/Unix/Command/_twisted b/Completion/Unix/Command/_twisted new file mode 100644 index 000000000..09f7edcbc --- /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 + +# 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 dir + os.sep + os.path.join("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" +# -- cgit 1.4.1