Rehash efficiently
[pacman-ng.git] / contrib / bash_completion.in
blob7f47f4b43da0b3642964b449412c9fd436926d0f
1 # This file is in the public domain.
3 _arch_compgen() {
4   local i r
5   COMPREPLY=($(compgen -W '$*' -- "$cur"))
6   for ((i=1; i < ${#COMP_WORDS[@]}-1; i++)); do
7     for r in ${!COMPREPLY[@]}; do
8       if [[ ${COMP_WORDS[i]} = ${COMPREPLY[r]} ]]; then
9         unset 'COMPREPLY[r]'; break
10       fi
11     done
12   done
15 _arch_ptr2comp() {
16   local list= x y
17   for x; do
18     for y in '0 --' '1 -'; do
19       eval 'set -- ${'$x'[${y% *}]}'
20       list+=\ ${@/#/${y#* }}
21     done
22   done
23   _arch_compgen $list
26 _arch_incomp() {
27   local r="\s-(-${1#* }\s|\w*${1% *})"; [[ $COMP_LINE =~ $r ]]
30 _makepkg() {
31   local cur opts prev
32   COMPREPLY=()
33   _get_comp_words_by_ref cur prev
34   if [[ $cur = -* && ! $prev =~ ^-(-(cleancache|config|help)$|\w*[Chp]) ]]; then
35     opts=('allsource asroot clean cleancache config force geninteg help holdver
36            ignorearch install log nobuild nocolor noconfirm nodeps noextract
37            noprogressbar pkg repackage rmdeps skipinteg source syncdeps'
38           'A C L R c d e f g h i m o p r s')
39     _arch_ptr2comp opts
40   fi
41   true
44 _pacman_pkg() {
45   _arch_compgen "$(
46     if [[ $2 ]]; then
47       \pacman -$1 | \cut -d' ' -f1 | \sort -u
48     else
49       \pacman -$1
50     fi
51   )"
54 _pacman() {
55   local common core cur database prev query remove sync upgrade o
56   COMPREPLY=()
57   _get_comp_words_by_ref cur prev
58   database=('asdeps asexplicit')
59   query=('changelog check deps explicit file foreign groups info list owns
60           search unrequired upgrades' 'c e g i k l m o p s t u')
61   remove=('cascade dbonly nodeps nosave print recursive unneeded' 'c k n p s u')
62   sync=('asdeps asexplicit clean downloadonly force groups ignore ignoregroup
63          info list needed nodeps print refresh search sysupgrade'
64         'c f g i l p s u w y')
65   upgrade=('asdeps asexplicit force nodeps print' 'f p')
66   common=('arch cachedir config dbpath debug help logfile noconfirm
67            noprogressbar noscriptlet quiet root verbose' 'b d h q r v')
68   core=('database help query remove sync upgrade version' 'D Q R S U V h')
70   for o in 'D database' 'Q query' 'R remove' 'S sync' 'U upgrade'; do
71     _arch_incomp "$o" && break
72   done
74   if [[ $? != 0 ]]; then
75     _arch_ptr2comp core
76   elif [[ ! $prev =~ ^-\w*[Vbhr] &&
77     ! $prev = --@(cachedir|config|dbpath|help|logfile|root|version) ]]
78   then
79     [[ $cur = -* ]] && _arch_ptr2comp ${o#* } common ||
80       case ${o% *} in
81       D|R)
82           _pacman_pkg Qq;;
83       Q)
84         { _arch_incomp 'g groups' && _pacman_pkg Qg sort; }    ||
85         { _arch_incomp 'p file'   && _pacman_file; }           ||
86           _arch_incomp 'o owns'   || _arch_incomp 'u upgrades' ||
87           _pacman_pkg Qq;;
88       S)
89         { _arch_incomp 'g groups' && _pacman_pkg Sg; }      ||
90         { _arch_incomp 'l list'   && _pacman_pkg Sl sort; } ||
91           _pacman_pkg Slq;;
92       U)
93           _pacman_file;;
94       esac
95   fi
96   true
99 if [[ $(type -t compopt) = "builtin" ]]; then
100   _pacman_file() {
101     compopt -o filenames; _filedir 'pkg.tar.*'
102   }
103   complete -F _pacman -o default pacman
104 else
105   _pacman_file() {
106     _filedir 'pkg.tar.*'
107   }
108   complete -F _pacman -o filenames -o default pacman
111 complete -F _makepkg -o default makepkg
113 # ex:et ts=2 sw=2 ft=sh