#8 pip: use @technolize compdef
This commit is contained in:
parent
f2d1eccbb0
commit
c05cc95362
126
_pip
126
_pip
|
@ -5,11 +5,13 @@
|
||||||
#
|
#
|
||||||
# Completion script for pip (http://pypi.python.org/pypi/pip).
|
# Completion script for pip (http://pypi.python.org/pypi/pip).
|
||||||
#
|
#
|
||||||
|
# Source: https://github.com/technolize/zsh-completion-funcs
|
||||||
|
#
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
# Authors
|
# Authors
|
||||||
# -------
|
# -------
|
||||||
#
|
#
|
||||||
# * Dmitry Gladkov (https://github.com/dgladkov)
|
# * technolize (https://github.com/technolize)
|
||||||
#
|
#
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
@ -17,37 +19,101 @@
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
local subcmds
|
local ret=1 state
|
||||||
|
|
||||||
_arguments -C '*::command:->command' && return 0
|
declare -ga common_ops
|
||||||
|
common_ops=(
|
||||||
|
"--version[display version number]"
|
||||||
|
{-h,--help}"[show help]"
|
||||||
|
{-E,--environment=}"[virtualenv environment to run pip]:environment:_directories"
|
||||||
|
{-s,--enable-site-packages}"[include site-packages in virtualenv]"
|
||||||
|
{-v,--verbose}"[give more output]"
|
||||||
|
{-q,--quiet}"[give less output]"
|
||||||
|
"--log=[log file where a complete record will be kept]"
|
||||||
|
"--proxy=[specify a proxy in the form user:passwd@proxy.server:port]:proxy"
|
||||||
|
"--timeout=[set the socket timeout (default 15 seconds)]:second"
|
||||||
|
)
|
||||||
|
|
||||||
|
_directories () {
|
||||||
|
_wanted directories expl directory _path_files -/ "$@" -
|
||||||
|
}
|
||||||
|
|
||||||
|
typeset -A opt_args
|
||||||
|
_arguments \
|
||||||
|
':subcommand:->subcommand' \
|
||||||
|
$common_ops \
|
||||||
|
'*::options:->options' && ret=0
|
||||||
|
|
||||||
case $state in
|
case $state in
|
||||||
command)
|
subcommand)
|
||||||
if [[ $CURRENT != 1 && $words[$CURRENT] != -* && $words[$CURRENT-1] != "-r" ]]; then
|
subcommands=(
|
||||||
state=packages
|
"bundle:create pybundle"
|
||||||
elif [[ $words[$CURRENT-1] == "-r" ]]; then
|
"freeze:put all currently installed packages"
|
||||||
state=files
|
"help:show available commands"
|
||||||
else
|
"install:install packages"
|
||||||
state=subcommands
|
"search:search pypi"
|
||||||
fi
|
"usinstall:uninstall packages"
|
||||||
;;
|
"unzip:unzip undividual packages"
|
||||||
|
"zip:zip dividual packages"
|
||||||
|
)
|
||||||
|
|
||||||
|
_describe -t subcommands 'pip subcommand' subcommands && ret=0
|
||||||
|
;;
|
||||||
|
|
||||||
|
options)
|
||||||
|
declare -a args
|
||||||
|
args=(
|
||||||
|
$common_ops
|
||||||
|
)
|
||||||
|
|
||||||
|
declare -a requirement
|
||||||
|
requirement=(
|
||||||
|
{-r,--requirement=}"[install all the packages listed in the given requirements file]:filename"
|
||||||
|
)
|
||||||
|
|
||||||
|
declare -a findlink
|
||||||
|
findlink=(
|
||||||
|
{-f,--find-links=}"[URL to look for packages at]:url"
|
||||||
|
)
|
||||||
|
|
||||||
|
case $words[1] in
|
||||||
|
bundle | install)
|
||||||
|
args+=(
|
||||||
|
{-e,--editable=}"[install a package directly from a checkout]:VCS+REPOS_URL[@REV]#egg=PACKAGE"
|
||||||
|
$requirement
|
||||||
|
$findlink
|
||||||
|
{-i,--index-url=,--pypi-url=}"[base URL of Python Package Index]:URL"
|
||||||
|
"--extra-index-url=[extra URLs of package indexes to use]:URL"
|
||||||
|
{-b,--build=,--build-dir=}"[unpack packages into DIR]:directory:_directories"
|
||||||
|
{--src=,--source=}"[check out --editable packages into DIR]:directory:_directories"
|
||||||
|
{-U,--upgrade}"[upgrade all packages to the newest available version]"
|
||||||
|
{-I,--ignore-installed}"[ignore the installed packages]"
|
||||||
|
"--noinstall[download and unpack all packages, but don't actually install them]"
|
||||||
|
"--install-option=[extra arguments to be supplied to the setup.py install command]"
|
||||||
|
)
|
||||||
|
;;
|
||||||
|
|
||||||
|
freeze)
|
||||||
|
args+=(
|
||||||
|
$requirement
|
||||||
|
$findlink
|
||||||
|
)
|
||||||
|
;;
|
||||||
|
|
||||||
|
unzip | zip)
|
||||||
|
args+=(
|
||||||
|
"--unzip[unzip a package]"
|
||||||
|
"--no-pyc[do not include .pyc files in zip files]"
|
||||||
|
{-l,--list}"[list the packages available, and their zip status]"
|
||||||
|
"--sort-files[with --list, sort packages according to how many files they contain]"
|
||||||
|
"--path=[restrict operation to the given paths]:paths"
|
||||||
|
{-n,--simulate}"[do not actually perform the zip/unzip operation]"
|
||||||
|
)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
_arguments $args && ret=0
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
case $state in
|
return ret
|
||||||
subcommands)
|
|
||||||
reply=($( COMP_WORDS="$service $words[*]" \
|
|
||||||
COMP_CWORD=0 \
|
|
||||||
PIP_AUTO_COMPLETE=1 $service ))
|
|
||||||
_describe -t commands 'pip commands' reply
|
|
||||||
;;
|
|
||||||
packages)
|
|
||||||
if [[ -n $words[CURRENT] ]]; then
|
|
||||||
packages=($( pip search "$words[CURRENT]" | \
|
|
||||||
grep -i "^$words[CURRENT]" | \
|
|
||||||
cut -d ' ' -f 1 | tr '[A-Z]' '[a-z]' ))
|
|
||||||
_describe -t commands 'packages' packages
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
files)
|
|
||||||
_arguments -C '*:input file:_files' && return 0
|
|
||||||
esac
|
|
||||||
|
|
Loading…
Reference in New Issue