mirror of
https://github.com/moparisthebest/pacman
synced 2024-11-13 21:05:05 -05:00
6f4f9c1b66
To avoid errors with bash 3.2, compopt will be skipped if it's not a shell builtin. compopt is needed to not append slashes to package names that coincide with directories in PWD. This is currently not possible to fix in bash versions that do not support compopt, so these users will have to bear that regression. Signed-off-by: Andres P <aepd87@gmail.com> Signed-off-by: Allan McRae <allan@archlinux.org>
116 lines
3.2 KiB
Bash
116 lines
3.2 KiB
Bash
# This file is in the public domain.
|
|
|
|
_arch_compgen() {
|
|
local i r
|
|
COMPREPLY=($(compgen -W '$*' -- "$cur"))
|
|
for ((i=1; i < ${#COMP_WORDS[@]}-1; i++)); do
|
|
for r in ${!COMPREPLY[@]}; do
|
|
if [[ ${COMP_WORDS[i]} = ${COMPREPLY[r]} ]]; then
|
|
unset 'COMPREPLY[r]'; break
|
|
fi
|
|
done
|
|
done
|
|
}
|
|
|
|
_arch_ptr2comp() {
|
|
local list= x y
|
|
for x; do
|
|
for y in '0 --' '1 -'; do
|
|
eval 'set -- ${'$x'[${y% *}]}'
|
|
list+=\ ${@/#/${y#* }}
|
|
done
|
|
done
|
|
_arch_compgen $list
|
|
}
|
|
|
|
_arch_incomp() {
|
|
local r="\s-(-${1#* }\s|\w*${1% *})"; [[ $COMP_LINE =~ $r ]]
|
|
}
|
|
|
|
_makepkg() {
|
|
local cur opts prev
|
|
COMPREPLY=()
|
|
cur=$(_get_cword)
|
|
prev=${COMP_WORDS[COMP_CWORD-1]}
|
|
if [[ $cur = -* && ! $prev =~ ^-(-(cleancache|config|help)$|\w*[Chp]) ]]; then
|
|
opts=('allsource asroot clean cleancache config force geninteg help holdver
|
|
ignorearch install log nobuild nocolor noconfirm nodeps noextract
|
|
noprogressbar pkg repackage rmdeps skipinteg source syncdeps'
|
|
'A C L R c d e f g h i m o p r s')
|
|
_arch_ptr2comp opts
|
|
fi
|
|
true
|
|
}
|
|
|
|
_pacman_pkg() {
|
|
_arch_compgen "$(
|
|
if [[ $2 ]]; then
|
|
\pacman -$1 | \cut -d' ' -f1 | \sort -u
|
|
else
|
|
\pacman -$1
|
|
fi
|
|
)"
|
|
}
|
|
|
|
_pacman() {
|
|
local common core cur database prev query remove sync upgrade o
|
|
COMPREPLY=()
|
|
cur=$(_get_cword)
|
|
prev=${COMP_WORDS[COMP_CWORD-1]}
|
|
database=('asdeps asexplicit')
|
|
query=('changelog check deps explicit file foreign groups info list owns
|
|
search unrequired upgrades' 'c e g i k l m o p s t u')
|
|
remove=('cascade dbonly nodeps nosave print recursive unneeded' 'c k n p s u')
|
|
sync=('asdeps asexplicit clean downloadonly force groups ignore ignoregroup
|
|
info list needed nodeps print refresh search sysupgrade'
|
|
'c f g i l p s u w y')
|
|
upgrade=('asdeps asexplicit force nodeps print' 'f p')
|
|
common=('arch cachedir config dbpath debug help logfile noconfirm
|
|
noprogressbar noscriptlet quiet root verbose' 'b d h q r v')
|
|
core=('database help query remove sync upgrade version' 'D Q R S U V h')
|
|
|
|
for o in 'D database' 'Q query' 'R remove' 'S sync' 'U upgrade'; do
|
|
_arch_incomp "$o" && break
|
|
done
|
|
|
|
if [[ $? != 0 ]]; then
|
|
_arch_ptr2comp core
|
|
elif ! [[ $prev =~ ^-\w*[Vbhr] ||
|
|
$prev = --@(cachedir|config|dbpath|help|logfile|root|version) ]]
|
|
then
|
|
[[ $cur = -* ]] && _arch_ptr2comp ${o#* } common ||
|
|
case ${o% *} in
|
|
D|R)
|
|
_pacman_pkg Qq;;
|
|
Q)
|
|
{ _arch_incomp 'g groups' && _pacman_pkg Qg sort; } ||
|
|
{ _arch_incomp 'p file' && _pacman_file; } ||
|
|
_arch_incomp 'o owns' || _arch_incomp 'u upgrades' ||
|
|
_pacman_pkg Qq;;
|
|
S)
|
|
{ _arch_incomp 'g groups' && _pacman_pkg Sg; } ||
|
|
{ _arch_incomp 'l list' && _pacman_pkg Sl sort; } ||
|
|
_pacman_pkg Slq;;
|
|
U)
|
|
_pacman_file;;
|
|
esac
|
|
fi
|
|
true
|
|
}
|
|
|
|
if [[ $(type -t compopt) = "builtin" ]]; then
|
|
_pacman_file() {
|
|
compopt -o filenames; _filedir 'pkg.tar.*'
|
|
}
|
|
complete -F _pacman -o default pacman
|
|
else
|
|
_pacman_file() {
|
|
_filedir 'pkg.tar.*'
|
|
}
|
|
complete -F _pacman -o filenames -o default pacman
|
|
fi
|
|
|
|
complete -F _makepkg -o default makepkg
|
|
|
|
# ex:et ts=2 sw=2 ft=sh
|