* Completion functions for Twisted
@ 2006-02-12 2:55 Eric Mangold
2006-02-12 20:34 ` Peter Stephenson
0 siblings, 1 reply; 2+ messages in thread
From: Eric Mangold @ 2006-02-12 2:55 UTC (permalink / raw)
To: zsh-workers
[-- Attachment #1: Type: text/plain, Size: 823 bytes --]
Hello all!
I would like to submit a completion function for the various commands that
we have at the Twisted project. Right now, we have 15 command-line
programs that we've implemented zsh completions for.
Back in 2004 I wrote this list regarding inclusion of a "stub" function in
zsh that passes control to completions functions included in the Twisted
distribution.
You may review the rational and discussion about this idea in the thread
here:
http://www.zsh.org/mla/users/2004/msg00100.html
The code has been implemented, and we've been successfully using this
method for about a year now. Various operating system packages, e.g.
Debian, include this stub and it's been working very well for us.
Could someone please review the attached file and let me know what you
think?
Thanks,
Eric Mangold
[-- Attachment #2: _twisted_zsh_stub --]
[-- Type: application/octet-stream, Size: 2842 bytes --]
#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"
#
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2006-02-12 20:34 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-02-12 2:55 Completion functions for Twisted Eric Mangold
2006-02-12 20:34 ` Peter Stephenson
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).