blob: b3b2427290cc56c37d7343cd134fd24b80e41c8c (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
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 <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"
#
|