zsh-workers
 help / color / mirror / code / Atom feed
* 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

* Re: Completion functions for Twisted
  2006-02-12  2:55 Completion functions for Twisted Eric Mangold
@ 2006-02-12 20:34 ` Peter Stephenson
  0 siblings, 0 replies; 2+ messages in thread
From: Peter Stephenson @ 2006-02-12 20:34 UTC (permalink / raw)
  To: Eric Mangold; +Cc: zsh-workers

"Eric Mangold" wrote:
> 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.

I've added it as Completion/Unix/Command/_twisted.

pws


^ 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).