Added a 'contrib' directory for other stuff that might be a good idea to maintain here.
* moved bash_completion from the "archlinux" script in the official bash_completion package * moved zsh_completion from the AUR zsh-pacman package
This commit is contained in:
parent
17e72ff882
commit
a1f36454c2
3 changed files with 668 additions and 2 deletions
348
contrib/bash_completion
Normal file
348
contrib/bash_completion
Normal file
|
@ -0,0 +1,348 @@
|
||||||
|
# vim: set ft=sh:
|
||||||
|
# file: /etc/bash_completion.d/pacman
|
||||||
|
|
||||||
|
# Bash completion for ArchLinux
|
||||||
|
# Original: v.1.1 Manolis Tzanidakis <mtzanidakis@freemail.gr>
|
||||||
|
#
|
||||||
|
# Distributed under the terms of the GNU General Public License, v2 or later.
|
||||||
|
#
|
||||||
|
|
||||||
|
## Changelog ####################################################
|
||||||
|
# #
|
||||||
|
# * 1.1 (20040117) #
|
||||||
|
# - Code cleanup #
|
||||||
|
# - Updated to pacman 2.7.2-2 #
|
||||||
|
# * 20040216 (orelien) #
|
||||||
|
# - Improved available_{pkgs,groups) functions #
|
||||||
|
# - Added support for querying groups #
|
||||||
|
# #
|
||||||
|
#################################################################
|
||||||
|
|
||||||
|
## initial functions
|
||||||
|
#
|
||||||
|
|
||||||
|
rem_selected ()
|
||||||
|
{
|
||||||
|
# (Adapted from bash_completion by Ian Macdonald <ian@caliban.org>)
|
||||||
|
# This removes any options from the list of completions that have
|
||||||
|
# already been specified on the command line.
|
||||||
|
COMPREPLY=($(echo "${COMP_WORDS[@]}" | \
|
||||||
|
(while read -d ' ' i; do
|
||||||
|
[ "${i}" == "" ] && continue
|
||||||
|
# flatten array with spaces on either side,
|
||||||
|
# otherwise we cannot grep on word boundaries of
|
||||||
|
# first and last word
|
||||||
|
COMPREPLY=" ${COMPREPLY[@]} "
|
||||||
|
# remove word from list of completions
|
||||||
|
COMPREPLY=(${COMPREPLY/ ${i%% *} / })
|
||||||
|
done
|
||||||
|
echo ${COMPREPLY[@]})))
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
_available_repos ()
|
||||||
|
{
|
||||||
|
COMPREPLY=( $( compgen -W "$(grep '\[' /etc/pacman.conf | grep -v -e 'options' -e '^#' | tr -d '[]' )" -- $cur ) )
|
||||||
|
}
|
||||||
|
|
||||||
|
_installed_pkgs ()
|
||||||
|
{
|
||||||
|
local installed_pkgs
|
||||||
|
installed_pkgs=$( ls /var/lib/pacman/local/ )
|
||||||
|
COMPREPLY=( $( compgen -W "$( for i in $installed_pkgs; do echo ${i%-*-*}; done )" -- $cur ) )
|
||||||
|
}
|
||||||
|
|
||||||
|
_available_pkgs ()
|
||||||
|
{
|
||||||
|
#find balks easilly on a find /foo/*/* type dir, especially one like
|
||||||
|
# /var/lib/pacman/*/*
|
||||||
|
# This little change-up removes the find *and* only uses enabled repos
|
||||||
|
local available_pkgs
|
||||||
|
local enabled_repos
|
||||||
|
enabled_repos=$( grep '\[' /etc/pacman.conf | grep -v -e 'options' -e '^#' | tr -d '[]' )
|
||||||
|
available_pkgs=$( for r in $enabled_repos; do echo /var/lib/pacman/$r/*; done )
|
||||||
|
COMPREPLY=( $( compgen -W "$( for i in $available_pkgs; do j=${i##*/}; echo ${j%-*-*}; done )" -- $cur ) )
|
||||||
|
}
|
||||||
|
|
||||||
|
_installed_groups ()
|
||||||
|
{
|
||||||
|
local installed_groups
|
||||||
|
installed_groups=$( find /var/lib/pacman/local -name desc -exec sed -ne '/%GROUPS%/,/^$/{//d; p}' {} \; | sort -u )
|
||||||
|
COMPREPLY=( $( compgen -W "$( for i in $installed_groups; do echo ${i%-*-*}; done )" -- $cur ) )
|
||||||
|
}
|
||||||
|
|
||||||
|
_available_groups ()
|
||||||
|
{
|
||||||
|
#find balks easilly on a find /foo/*/* type dir, especially one like
|
||||||
|
# /var/lib/pacman/*/*
|
||||||
|
# This little change-up removes the find *and* only uses enabled repos
|
||||||
|
local available_groups
|
||||||
|
local enabled_repos
|
||||||
|
enabled_repos=$( grep '\[' /etc/pacman.conf | grep -v -e 'options' -e '^#' | tr -d '[]' )
|
||||||
|
available_groups=$( for r in $enabled_repos; do sed '/%GROUPS%/,/^$/{//d; p}' /var/lib/pacman/$r/*/desc | sort -u; done )
|
||||||
|
COMPREPLY=( $( compgen -W "$( for i in $available_groups; do echo ${i%-*-*}; done )" -- $cur ) )
|
||||||
|
}
|
||||||
|
|
||||||
|
## init (/etc/rc.d) script completion (quick 'n' dirty ;-)
|
||||||
|
#
|
||||||
|
|
||||||
|
complete -W "start stop restart" \
|
||||||
|
$(for i in /etc/rc.d/*; do echo ${i##*/}; done)
|
||||||
|
|
||||||
|
## makepkg completion
|
||||||
|
#
|
||||||
|
|
||||||
|
_makepkg ()
|
||||||
|
{
|
||||||
|
local cur prev
|
||||||
|
COMPREPLY=()
|
||||||
|
cur=${COMP_WORDS[COMP_CWORD]}
|
||||||
|
prev=${COMP_WORDS[COMP_CWORD-1]}
|
||||||
|
|
||||||
|
case "$prev" in
|
||||||
|
-@(p|w))
|
||||||
|
_filedir
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--help|--cleancache|--genmd5)
|
||||||
|
COMPREPLY=''
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [[ "$cur" == -* ]]; then
|
||||||
|
COMPREPLY=( $( compgen -W '-b --builddeps \
|
||||||
|
-c --clean \
|
||||||
|
-C --cleancache \
|
||||||
|
-d --nodeps \
|
||||||
|
-f --force \
|
||||||
|
-g --genmd5 \
|
||||||
|
-h --help \
|
||||||
|
-i --install \
|
||||||
|
-m --nocolor \
|
||||||
|
-n --nostrip \
|
||||||
|
-r --rmdeps \
|
||||||
|
-s --syncdeps \
|
||||||
|
-p -w' -- $cur ) )
|
||||||
|
fi
|
||||||
|
|
||||||
|
rem_selected
|
||||||
|
}
|
||||||
|
complete -o default -F _makepkg makepkg
|
||||||
|
|
||||||
|
## pacman completion
|
||||||
|
#
|
||||||
|
|
||||||
|
_instring ()
|
||||||
|
{
|
||||||
|
str="${1}"
|
||||||
|
shift 1
|
||||||
|
for c in "${@}"; do
|
||||||
|
if [ $(expr index "${str}" "${c}") -gt 0 ]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
_pacman ()
|
||||||
|
{
|
||||||
|
local a arg toparse op mod cur
|
||||||
|
COMPREPLY=()
|
||||||
|
|
||||||
|
# This argument parsing is done so we can check for flag existance later
|
||||||
|
# right now it's a tad crappy, but does the job
|
||||||
|
for (( i=1; i < ${#COMP_WORDS[@]}-1; i++ )); do
|
||||||
|
a=${COMP_WORDS[i]}
|
||||||
|
arg="${a:0:2}"
|
||||||
|
toparse="${a:2}"
|
||||||
|
|
||||||
|
case "${arg}" in
|
||||||
|
-@(A|U|F|R|S|Q|h|V))
|
||||||
|
op="${arg/-}"
|
||||||
|
mod="${mod}${a:2}"
|
||||||
|
;;
|
||||||
|
--)
|
||||||
|
arg="${a:2}"
|
||||||
|
case "${arg}" in
|
||||||
|
add) op="A" ;;
|
||||||
|
remove) op="R" ;;
|
||||||
|
upgrade) op="U" ;;
|
||||||
|
freshen) op="F" ;;
|
||||||
|
query) op="Q" ;;
|
||||||
|
sync) op="S" ;;
|
||||||
|
help) op="h" ;;
|
||||||
|
version) op="V" ;;
|
||||||
|
verbose) mod="${mod}v" ;;
|
||||||
|
root) mod="${mod}r" ;;
|
||||||
|
dbpath) mod="${mod}b" ;;
|
||||||
|
nodeps) mod="${mod}d" ;;
|
||||||
|
force) mod="${mod}f" ;;
|
||||||
|
groups) mod="${mod}g" ;;
|
||||||
|
info) mod="${mod}i" ;;
|
||||||
|
list) mod="${mod}l" ;;
|
||||||
|
print-uris) mod="${mod}p" ;;
|
||||||
|
search) mod="${mod}s" ;;
|
||||||
|
sysupgrade) mod="${mod}u" ;;
|
||||||
|
downloadonly) mod="${mod}w" ;;
|
||||||
|
refresh) mod="${mod}y" ;;
|
||||||
|
orphans) mod="${mod}e" ;;
|
||||||
|
foreign) mod="${mod}m" ;;
|
||||||
|
owns) mod="${mod}o" ;;
|
||||||
|
file) mod="${mod}p" ;;
|
||||||
|
search) mod="${mod}s" ;;
|
||||||
|
cascade) mod="${mod}c" ;;
|
||||||
|
nodeps) mod="${mod}d" ;;
|
||||||
|
dbonly) mod="${mod}k" ;;
|
||||||
|
nosave) mod="${mod}n" ;;
|
||||||
|
recursive) mod="${mod}s" ;;
|
||||||
|
esac ;;
|
||||||
|
*) toparse="${a}" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
arglen=$(( ${#toparse}-1 ))
|
||||||
|
for c in $(seq 0 "${arglen}"); do
|
||||||
|
arg=${toparse:$c:1}
|
||||||
|
[ "${arg}" != "-" ] && mod="${mod}${arg}"
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
cur=${COMP_WORDS[COMP_CWORD]}
|
||||||
|
|
||||||
|
if [ $COMP_CWORD -eq 1 ] && [[ "$cur" == -* ]]; then
|
||||||
|
COMPREPLY=( $( compgen -W '\
|
||||||
|
-A --add \
|
||||||
|
-F --freshen \
|
||||||
|
-h --help \
|
||||||
|
-Q --query \
|
||||||
|
-R --remove \
|
||||||
|
-S --sync \
|
||||||
|
-U --upgrade \
|
||||||
|
-V --version \
|
||||||
|
' -- $cur ) )
|
||||||
|
rem_selected
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$cur" == -* ]]; then
|
||||||
|
case "${op}" in
|
||||||
|
A|U|F)
|
||||||
|
COMPREPLY=( $( compgen -W '\
|
||||||
|
-d --nodeps \
|
||||||
|
-f --force \
|
||||||
|
-h --help \
|
||||||
|
--config \
|
||||||
|
--noconfirm \
|
||||||
|
--noprogressbar \
|
||||||
|
-v --verbose \
|
||||||
|
-r --root \
|
||||||
|
-b --dbpath \
|
||||||
|
' -- $cur ) )
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
R)
|
||||||
|
COMPREPLY=( $( compgen -W '\
|
||||||
|
-c --cascade \
|
||||||
|
-d --nodeps \
|
||||||
|
-f --force \
|
||||||
|
-h --help \
|
||||||
|
-k --dbonly \
|
||||||
|
-n --nosave \
|
||||||
|
-s --recursive \
|
||||||
|
--config \
|
||||||
|
--noconfirm \
|
||||||
|
--noprogressbar \
|
||||||
|
-v --verbose \
|
||||||
|
-r --root \
|
||||||
|
-b --dbpath \
|
||||||
|
' -- $cur ) )
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
S)
|
||||||
|
COMPREPLY=( $( compgen -W '\
|
||||||
|
-c --clean \
|
||||||
|
-d --nodeps \
|
||||||
|
-f --force \
|
||||||
|
-g --groups \
|
||||||
|
-h --help \
|
||||||
|
-i --info \
|
||||||
|
-l --list \
|
||||||
|
-p --print-uris \
|
||||||
|
-s --search \
|
||||||
|
-u --sysupgrade \
|
||||||
|
-w --downloadonly \
|
||||||
|
-y --refresh \
|
||||||
|
--config \
|
||||||
|
--noconfirm \
|
||||||
|
--noprogressbar \
|
||||||
|
-v --verbose \
|
||||||
|
-r --root \
|
||||||
|
-b --dbpath \
|
||||||
|
' -- $cur ) )
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
Q)
|
||||||
|
COMPREPLY=( $( compgen -W '\
|
||||||
|
-e --orphans \
|
||||||
|
-g --groups \
|
||||||
|
-h --help \
|
||||||
|
-i --info \
|
||||||
|
-l --list \
|
||||||
|
-m --foreign \
|
||||||
|
-o --owns \
|
||||||
|
-p --file \
|
||||||
|
-s --search \
|
||||||
|
--config \
|
||||||
|
--noconfirm \
|
||||||
|
--noprogressbar \
|
||||||
|
-v --verbose \
|
||||||
|
-r --root \
|
||||||
|
-b --dbpath \
|
||||||
|
' -- $cur ) )
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
rem_selected
|
||||||
|
else
|
||||||
|
case "${op}" in
|
||||||
|
A|U)
|
||||||
|
COMPREPLY=( $( compgen -d -- "$cur" ) \
|
||||||
|
$( compgen -f -X '!*.pkg.tar.gz' -- "$cur" ) )
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
h|V)
|
||||||
|
COMPREPLY=''
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
Q)
|
||||||
|
if _instring $mod g; then
|
||||||
|
_installed_groups
|
||||||
|
elif _instring $mod o; then
|
||||||
|
COMPREPLY=( $( compgen -d -- "$cur" ) \
|
||||||
|
$( compgen -f -- "$cur" ) )
|
||||||
|
elif _instring $mod p; then
|
||||||
|
COMPREPLY=( $( compgen -d -- "$cur" ) \
|
||||||
|
$( compgen -f -X '!*.pkg.tar.gz' -- "$cur" ) )
|
||||||
|
else
|
||||||
|
_installed_pkgs
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
R)
|
||||||
|
_installed_pkgs
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
S)
|
||||||
|
if _instring $mod l; then
|
||||||
|
_available_repos
|
||||||
|
else
|
||||||
|
_available_pkgs
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
rem_selected
|
||||||
|
}
|
||||||
|
complete -o filenames -F _pacman pacman
|
320
contrib/zsh_completion
Normal file
320
contrib/zsh_completion
Normal file
|
@ -0,0 +1,320 @@
|
||||||
|
# file: /usr/share/zsh/site-functions/_pacman
|
||||||
|
# use the following in your zsh config:
|
||||||
|
# compdef pacman pacman.static=pacman
|
||||||
|
|
||||||
|
typeset -A opt_args
|
||||||
|
|
||||||
|
# options for passing to _arguments: main pacman commands
|
||||||
|
_pacman_opts_commands=(
|
||||||
|
'-A[Add a package to the system]'
|
||||||
|
'-F[Upgrade an installed package]'
|
||||||
|
'-Q[Query the package database]'
|
||||||
|
'-R[Remove a package from the system]'
|
||||||
|
'-S[Synchronize packages]'
|
||||||
|
'-U[Upgrade a package]'
|
||||||
|
'-V[Display version and exit]'
|
||||||
|
'-h[Display usage]'
|
||||||
|
)
|
||||||
|
|
||||||
|
# options for passing to _arguments: options common to all commands
|
||||||
|
_pacman_opts_common=(
|
||||||
|
'-b[Alternate database location]:database_location:_files -/'
|
||||||
|
'-h[Display syntax for the given operation]'
|
||||||
|
'-r[Set alternate installation root]:installation root:_files -/'
|
||||||
|
'-v[Be more verbose]'
|
||||||
|
'--config[An alternate configuration file]:config file:_files'
|
||||||
|
'--noconfirm[Do not ask for confirmation]'
|
||||||
|
)
|
||||||
|
|
||||||
|
# options for passing to _arguments: options for --add, --freshen and --update commands
|
||||||
|
_pacman_opts_pkgfile=(
|
||||||
|
'-d[Skip dependency checks]'
|
||||||
|
'-f[Overwrite conflicting files]'
|
||||||
|
'*:package file:_files -g "*.pkg.tar.gz(.)"'
|
||||||
|
)
|
||||||
|
|
||||||
|
# options for passing to _arguments: subactions for --query command
|
||||||
|
_pacman_opts_query_actions=(
|
||||||
|
'-e[List orphaned packages]:*:orphans:->query_orphans'
|
||||||
|
'-g[View all members of a package group]:*:package groups:->query_group'
|
||||||
|
'-o[Query the package that owns a file]:file:_files'
|
||||||
|
'-p[Package file to query]:*:package file:->query_file'
|
||||||
|
'-s[Search package names and descriptions]:*:search text:->query_search'
|
||||||
|
)
|
||||||
|
|
||||||
|
# options for passing to _arguments: options for --query and subcommands
|
||||||
|
_pacman_opts_query_modifiers=(
|
||||||
|
'-i[View package information]'
|
||||||
|
'-l[List package contents]'
|
||||||
|
)
|
||||||
|
|
||||||
|
# options for passing to _arguments: options for --remove command
|
||||||
|
_pacman_opts_remove=(
|
||||||
|
'-c[Remove all dependent packages]'
|
||||||
|
'-d[Skip dependency checks]'
|
||||||
|
'-k[Only remove database entry, do not remove files]'
|
||||||
|
'-n[Remove protected configuration files]'
|
||||||
|
'-s[Remove dependencies not required by other packages]'
|
||||||
|
'*:installed package:_pacman_completions_installed_packages'
|
||||||
|
)
|
||||||
|
|
||||||
|
# options for passing to _arguments: options for --sync command
|
||||||
|
_pacman_opts_sync_actions=(
|
||||||
|
'*-c[Remove old packages from cache]:*:clean:->sync_clean'
|
||||||
|
'-g[View all members of a package group]:*:package groups:->sync_group'
|
||||||
|
'-s[Search package names and descriptions]:*:search text:->sync_search'
|
||||||
|
)
|
||||||
|
|
||||||
|
# options for passing to _arguments: options for --sync command
|
||||||
|
_pacman_opts_sync_modifiers=(
|
||||||
|
'-d[Skip dependency checks]'
|
||||||
|
'-f[Overwrite conflicting files]'
|
||||||
|
'-i[View package information]'
|
||||||
|
'-l[List all packages in a repository]'
|
||||||
|
'-p[Print download URIs for each package to be installed]'
|
||||||
|
'-u[Upgrade all out-of-date packages]'
|
||||||
|
'-w[Download packages only]'
|
||||||
|
'-y[Download fresh package databases]'
|
||||||
|
'*--ignore[Ignore a package upgrade]:package:_pacman_completions_installed_packages'
|
||||||
|
)
|
||||||
|
|
||||||
|
# handles --action subcommand
|
||||||
|
_pacman_action_add() {
|
||||||
|
_arguments -s : \
|
||||||
|
"$_pacman_opts_common[@]" \
|
||||||
|
"$_pacman_opts_pkgfile[@]"
|
||||||
|
}
|
||||||
|
|
||||||
|
# handles --freshen subcommand
|
||||||
|
_pacman_action_freshen() {
|
||||||
|
_arguments -s : \
|
||||||
|
"$_pacman_opts_common[@]" \
|
||||||
|
"$_pacman_opts_pkgfile[@]"
|
||||||
|
}
|
||||||
|
|
||||||
|
# handles --help subcommand
|
||||||
|
_pacman_action_help() {
|
||||||
|
_arguments -s : \
|
||||||
|
"$_pacman_opts_commands[@]"
|
||||||
|
}
|
||||||
|
|
||||||
|
# handles cases where no subcommand has yet been given
|
||||||
|
_pacman_action_none() {
|
||||||
|
_arguments -s : \
|
||||||
|
"$_pacman_opts_commands[@]"
|
||||||
|
}
|
||||||
|
|
||||||
|
# handles --query subcommand
|
||||||
|
_pacman_action_query() {
|
||||||
|
local context state line
|
||||||
|
typeset -A opt_args
|
||||||
|
|
||||||
|
# _arguments -s : \
|
||||||
|
# "$_pacman_opts_common[@]" \
|
||||||
|
# "$_pacman_opts_query_actions[@]" \
|
||||||
|
# "$_pacman_opts_query_modifiers[@]"
|
||||||
|
|
||||||
|
case $state in
|
||||||
|
query_file)
|
||||||
|
_arguments -s : \
|
||||||
|
"$_pacman_opts_common[@]" \
|
||||||
|
"$_pacman_opts_query_modifiers[@]" \
|
||||||
|
'*:package file:_files -g "*.pkg.tar.gz"'
|
||||||
|
;;
|
||||||
|
query_group)
|
||||||
|
_arguments -s : \
|
||||||
|
"$_pacman_opts_common[@]" \
|
||||||
|
"$_pacman_opts_query_modifiers[@]" \
|
||||||
|
'*:groups:_pacman_completions_installed_groups'
|
||||||
|
;;
|
||||||
|
query_orphans)
|
||||||
|
_arguments -s : \
|
||||||
|
"$_pacman_opts_common[@]" \
|
||||||
|
"$_pacman_opts_query_modifiers[@]"
|
||||||
|
;;
|
||||||
|
query_owner)
|
||||||
|
_arguments -s : \
|
||||||
|
"$_pacman_opts_common[@]" \
|
||||||
|
"$_pacman_opts_query_modifiers[@]" \
|
||||||
|
'*:file:_files'
|
||||||
|
;;
|
||||||
|
query_search)
|
||||||
|
_arguments -s : \
|
||||||
|
"$_pacman_opts_common[@]" \
|
||||||
|
"$_pacman_opts_query_modifiers[@]" \
|
||||||
|
'*:search text: '
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
_arguments -s : \
|
||||||
|
"$_pacman_opts_common[@]" \
|
||||||
|
"$_pacman_opts_query_actions[@]" \
|
||||||
|
"$_pacman_opts_query_modifiers[@]" \
|
||||||
|
'*:package:_pacman_completions_installed_packages'
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# handles --remove subcommand
|
||||||
|
_pacman_action_remove() {
|
||||||
|
_arguments -s : \
|
||||||
|
"$_pacman_opts_common[@]" \
|
||||||
|
"$_pacman_opts_remove[@]"
|
||||||
|
}
|
||||||
|
|
||||||
|
# handles --sync subcommand
|
||||||
|
_pacman_action_sync() {
|
||||||
|
local context state line
|
||||||
|
typeset -A opt_args
|
||||||
|
|
||||||
|
# _arguments -s : \
|
||||||
|
# "$_pacman_opts_common[@]" \
|
||||||
|
# "$_pacman_opts_sync_actions[@]" #\
|
||||||
|
# #"$_pacman_opts_sync_modifiers[@]"
|
||||||
|
|
||||||
|
case $state in
|
||||||
|
sync_clean)
|
||||||
|
_arguments -s : \
|
||||||
|
"$_pacman_opts_common[@]" \
|
||||||
|
"$_pacman_opts_sync_modifiers[@]" \
|
||||||
|
'*-c[Remove old packages from cache]' \
|
||||||
|
;;
|
||||||
|
sync_group)
|
||||||
|
_arguments -s : \
|
||||||
|
"$_pacman_opts_common[@]" \
|
||||||
|
"$_pacman_opts_sync_modifiers[@]" \
|
||||||
|
'*:package group:_pacman_completions_all_groups'
|
||||||
|
;;
|
||||||
|
sync_search)
|
||||||
|
_arguments -s : \
|
||||||
|
"$_pacman_opts_common[@]" \
|
||||||
|
"$_pacman_opts_sync_modifiers[@]" \
|
||||||
|
'*:search text: '
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
_arguments -s : \
|
||||||
|
"$_pacman_opts_common[@]" \
|
||||||
|
"$_pacman_opts_sync_modifiers[@]" \
|
||||||
|
'*:package:_pacman_completions_all_packages'
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# handles --upgrade subcommand
|
||||||
|
_pacman_action_upgrade() {
|
||||||
|
_arguments -s : \
|
||||||
|
"$_pacman_opts_common[@]" \
|
||||||
|
"$_pacman_opts_pkgfile[@]"
|
||||||
|
}
|
||||||
|
|
||||||
|
# handles --version subcommand
|
||||||
|
_pacman_action_version() {
|
||||||
|
# no further arguments
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# provides completions for package groups
|
||||||
|
_pacman_completions_all_groups() {
|
||||||
|
local -a cmd groups
|
||||||
|
_pacman_get_command
|
||||||
|
groups=( $(_call_program groups $cmd[@] -Sg | grep -e \^$PREFIX) )
|
||||||
|
compadd "$@" -a groups
|
||||||
|
}
|
||||||
|
|
||||||
|
# provides completions for packages available from repositories
|
||||||
|
_pacman_completions_all_packages() {
|
||||||
|
local -a cmd packages repositories
|
||||||
|
|
||||||
|
repositories=( $(_call_program repositories cat /etc/pacman.conf | grep "^\[" | sed "s,\(\[\|\]\),,g" | grep -v "^options" | sort -u) )
|
||||||
|
# these can be specified as either 'package' or 'repository/package'
|
||||||
|
if [[ "$PREFIX" == "" ]] ; then
|
||||||
|
packages=( $(_call_program packages ls /var/lib/pacman/${^repositories} | grep -v "^/" | sed "s,\-[^-]*\-[^-]*$,," | sort -u) )
|
||||||
|
else
|
||||||
|
packages=( $(_call_program packages ls /var/lib/pacman/${^repositories} | grep -v "^/" | grep -e \^$PREFIX | sed "s,\-[^-]*\-[^-]*$,," | sort -u) )
|
||||||
|
fi
|
||||||
|
compadd "$@" -a packages
|
||||||
|
}
|
||||||
|
|
||||||
|
# provides completions for package groups
|
||||||
|
_pacman_completions_installed_groups() {
|
||||||
|
local -a cmd groups
|
||||||
|
_pacman_get_command
|
||||||
|
groups=( $(_call_program installed_groups $cmd[@] -Qg | cut -d' ' -f1 | grep -e \^$PREFIX | sort -u) )
|
||||||
|
compadd "$@" -a groups
|
||||||
|
}
|
||||||
|
|
||||||
|
# provides completions for installed packages
|
||||||
|
_pacman_completions_installed_packages() {
|
||||||
|
local -a cmd packages
|
||||||
|
packages=( $(_call_program installed_packages ls /var/lib/pacman/local | grep "^$PREFIX" | sed "s,\-[^-]*\-[^-]*$,,") )
|
||||||
|
compadd "$@" -a packages
|
||||||
|
}
|
||||||
|
|
||||||
|
# provides completions for repository names
|
||||||
|
_pacman_completions_repositories() {
|
||||||
|
local -a cmd repositories
|
||||||
|
repositories=( $(_call_program repositories cat /etc/pacman.conf | grep "^\[" | sed "s,\(\[\|\]\),,g" | grep -v "^options" | grep "^$PREFIX" | sort -u) )
|
||||||
|
compadd "$@" -a repositories
|
||||||
|
}
|
||||||
|
|
||||||
|
# builds command for invoking pacman in a _call_program command - extracts
|
||||||
|
# relevant options already specified (config file, etc)
|
||||||
|
# $cmd must be declared by calling function
|
||||||
|
_pacman_get_command() {
|
||||||
|
# this is mostly nicked from _perforce
|
||||||
|
cmd=( "pacman" )
|
||||||
|
integer i
|
||||||
|
for (( i = 2; i < CURRENT - 1; i++ )); do
|
||||||
|
if [[ ${words[i]} = "--config" || ${words[i]} = "--root" ]]; then
|
||||||
|
cmd+=( ${words[i,i+1]} )
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# main dispatcher
|
||||||
|
_pacman() {
|
||||||
|
case $words[2] in
|
||||||
|
-A*) _pacman_action_add ;;
|
||||||
|
-F*) _pacman_action_freshen ;;
|
||||||
|
-Qg) # ipkg groups
|
||||||
|
_arguments -s : \
|
||||||
|
"$_pacman_opts_common[@]" \
|
||||||
|
"$_pacman_opts_query_modifiers[@]" \
|
||||||
|
'*:groups:_pacman_completions_installed_groups'
|
||||||
|
;;
|
||||||
|
-Qo) # file *.pkg.tar.gz
|
||||||
|
_arguments -s : \
|
||||||
|
"$_pacman_opts_common[@]" \
|
||||||
|
"$_pacman_opts_query_modifiers[@]" \
|
||||||
|
'*:package file:_files'
|
||||||
|
;;
|
||||||
|
-Qp) # file *.pkg.tar.gz
|
||||||
|
_arguments -s : \
|
||||||
|
"$_pacman_opts_common[@]" \
|
||||||
|
"$_pacman_opts_query_modifiers[@]" \
|
||||||
|
'*:package file:_files -g "*.pkg.tar.gz"'
|
||||||
|
;;
|
||||||
|
-Q*) _pacman_action_query ;;
|
||||||
|
-R*) _pacman_action_remove ;;
|
||||||
|
-Sl) # repos
|
||||||
|
_arguments -s : \
|
||||||
|
"$_pacman_opts_common[@]" \
|
||||||
|
"$_pacman_opts_sync_modifiers[@]" \
|
||||||
|
'*:package repo:_pacman_completions_repositories' \
|
||||||
|
;;
|
||||||
|
-Sg) # pkg groups
|
||||||
|
_arguments -s : \
|
||||||
|
"$_pacman_opts_common[@]" \
|
||||||
|
"$_pacman_opts_sync_modifiers[@]" \
|
||||||
|
'*:package group:_pacman_completions_all_groups'
|
||||||
|
;;
|
||||||
|
-S*) _pacman_action_sync ;;
|
||||||
|
-U*) _pacman_action_upgrade ;;
|
||||||
|
-V*) _pacman_action_version ;;
|
||||||
|
-h*) _pacman_action_help ;;
|
||||||
|
- ) _pacman_action_none ;;
|
||||||
|
* ) return 1 ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# run the main dispatcher
|
||||||
|
_pacman "$@"
|
|
@ -156,12 +156,10 @@ int alpm_pkg_compare_versions(pmpkg_t *local_pkg, pmpkg_t *pkg)
|
||||||
/* package should be ignored (IgnorePkg) */
|
/* package should be ignored (IgnorePkg) */
|
||||||
_alpm_log(PM_LOG_WARNING, _("%s-%s: ignoring package upgrade (%s)"),
|
_alpm_log(PM_LOG_WARNING, _("%s-%s: ignoring package upgrade (%s)"),
|
||||||
local_pkg->name, local_pkg->version, pkg->version);
|
local_pkg->name, local_pkg->version, pkg->version);
|
||||||
cmp = 0;
|
|
||||||
} else if(_alpm_pkg_istoonew(pkg)) {
|
} else if(_alpm_pkg_istoonew(pkg)) {
|
||||||
/* package too new (UpgradeDelay) */
|
/* package too new (UpgradeDelay) */
|
||||||
_alpm_log(PM_LOG_WARNING, _("%s-%s: delaying upgrade of package (%s)"),
|
_alpm_log(PM_LOG_WARNING, _("%s-%s: delaying upgrade of package (%s)"),
|
||||||
local_pkg->name, local_pkg->version, pkg->version);
|
local_pkg->name, local_pkg->version, pkg->version);
|
||||||
cmp = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue