mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-27 04:40:59 +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"
 | |
| #
 |