about summary refs log tree commit diff
path: root/Completion
diff options
context:
space:
mode:
Diffstat (limited to 'Completion')
-rw-r--r--Completion/Unix/Command/_twisted86
1 files changed, 86 insertions, 0 deletions
diff --git a/Completion/Unix/Command/_twisted b/Completion/Unix/Command/_twisted
new file mode 100644
index 000000000..b3b242729
--- /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 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"
+#