summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--Completion/Unix/Command/_twisted86
2 files changed, 89 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index a62e2fa9c..39b06c999 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
2006-02-12 Peter Stephenson <p.w.stephenson@ntlworld.com>
+ * 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 <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 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"
+#