mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-11-04 07:21:06 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			86 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
#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"
 | 
						|
#
 |