mirror of
https://github.com/moparisthebest/pacman
synced 2024-12-22 15:58:50 -05:00
de56874cc9
If you are a crazy developer like me and have bogus options in your pacman.conf file, the tab completion gets messed up by the output on stderr. Suppress it. Fix the same basic issue in zsh_completion, thanks to the work by Florian Pritz <bluewind@xinu.at>. Signed-off-by: Dan McGee <dan@archlinux.org>
130 lines
3.7 KiB
Bash
130 lines
3.7 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 ]]
|
|
}
|
|
|
|
_pacman_key() {
|
|
local cur opts prev
|
|
COMPREPLY=()
|
|
_get_comp_words_by_ref cur prev
|
|
if [[ $cur = -* &&
|
|
$prev != -@(a|-add|c|-config|g|-gpgdir|h|-help|import?(-trustdb)) ]]; then
|
|
opts=('add delete export finger help list-keys recv-keys updatedb verify version
|
|
config edit-key gpgdir import import-trustdb init keyserver list-sigs
|
|
lsign-key populate refresh-keys'
|
|
'a d e f h l r u v V')
|
|
_arch_ptr2comp opts
|
|
fi
|
|
true
|
|
}
|
|
|
|
_makepkg() {
|
|
local cur opts prev
|
|
COMPREPLY=()
|
|
_get_comp_words_by_ref cur prev
|
|
if [[ $cur = -* && ! $prev =~ ^-(-(config|help)$|\w*[Chp]) ]]; then
|
|
opts=('allsource asroot check clean config force geninteg help holdver ignorearch
|
|
install log nobuild nocheck nocolor noconfirm nodeps noextract noprogressbar
|
|
nosign pkg repackage rmdeps sign skipinteg source syncdeps'
|
|
'A L R S 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 2>/dev/null | \cut -d' ' -f1 | \sort -u
|
|
else
|
|
\pacman -$1 2>/dev/null
|
|
fi
|
|
)"
|
|
}
|
|
|
|
_pacman() {
|
|
local common core cur database prev query remove sync upgrade o
|
|
COMPREPLY=()
|
|
_get_comp_words_by_ref cur prev
|
|
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 n p s u')
|
|
sync=('asdeps asexplicit clean dbonly downloadonly force groups ignore ignoregroup
|
|
info list needed nodeps print refresh recursive search sysupgrade'
|
|
'c f g i l p s u w y')
|
|
upgrade=('asdeps asexplicit force needed nodeps print recursive' '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
|
|
complete -F _pacman_key -o default pacman-key
|
|
|
|
# ex:et ts=2 sw=2 ft=sh
|