Move important information up in -Si output
[pacman-ng.git] / contrib / bash_completion.in
blobb0901af2d9fd9792fa509c51f6b1fb8ef529eebe
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 _pacman_keyids() {
31   \pacman-key --list-keys 2>/dev/null | awk '
32     $1 == "pub" {
33       # key id
34       split($2, a, "/"); print a[2]
35     }
36     $1 == "uid" {
37       # email
38       if (match($NF, /<[^>]+>/))
39         print substr($NF, RSTART + 1, RLENGTH - 2)
40     }'
43 _pacman_key() {
44   local o cur opts prev wantfiles
45   COMPREPLY=()
46   _get_comp_words_by_ref cur prev
47   opts=('add delete export finger help list-keys recv-keys updatedb verify
48          version config edit-key gpgdir import import-trustdb init keyserver
49          list-sigs lsign-key populate refresh-keys'
50         'a d e f h l r u v V')
52   # operations for which we want to complete keyids
53   for o in 'd delete' 'e export' 'f finger' 'l list-keys' 'r recv-keys' \
54       'edit-key' 'list-sigs' 'refresh-keys'; do
55     _arch_incomp "$o" && break
56     unset o
57   done
59   # options for which we want file completion
60   wantfiles='-@(c|-config|g|-gpgdir)'
62   if [[ $prev = 'pacman-key' || ( $cur = -* && $prev != $wantfiles ) ]]; then
63     _arch_ptr2comp opts
64   elif [[ $prev = @(-k|--keyserver) ]]; then
65     return
66   elif [[ $prev != $wantfiles && $o ]]; then
67     COMPREPLY=($(compgen -W '$(_pacman_keyids)' -- "$cur"))
68   fi
69   true
72 _makepkg() {
73   local cur opts prev
74   COMPREPLY=()
75   _get_comp_words_by_ref cur prev
76   if [[ $cur = -* && ! $prev =~ ^-(-(config|help)$|\w*[Chp]) ]]; then
77     opts=('allsource asdeps asroot check clean config force geninteg help holdver ignorearch
78            install log nobuild nocheck nocolor noconfirm nodeps noextract
79            noprogressbar nosign pkg repackage rmdeps sign skipinteg source syncdeps'
80           'A L R S c d e f g h i m o p r s')
81     _arch_ptr2comp opts
82   fi
83   true
86 _pacman_pkg() {
87   _arch_compgen "$(
88     if [[ $2 ]]; then
89       \pacman -$1 2>/dev/null | \cut -d' ' -f1 | \sort -u
90     else
91       \pacman -$1 2>/dev/null
92     fi
93   )"
96 _pacman() {
97   local common core cur database prev query remove sync upgrade o
98   COMPREPLY=()
99   _get_comp_words_by_ref cur prev
100   database=('asdeps asexplicit')
101   query=('changelog check deps explicit file foreign groups info list owns
102           search unrequired upgrades' 'c e g i k l m o p s t u')
103   remove=('cascade dbonly nodeps nosave print recursive unneeded' 'c n p s u')
104   sync=('asdeps asexplicit clean dbonly downloadonly force groups ignore ignoregroup
105          info list needed nodeps print refresh recursive search sysupgrade'
106         'c g i l p s u w y')
107   upgrade=('asdeps asexplicit force needed nodeps print recursive' 'p')
108   common=('arch cachedir config dbpath debug help logfile noconfirm
109            noprogressbar noscriptlet quiet root verbose' 'b d h q r v')
110   core=('database help query remove sync upgrade version' 'D Q R S U V h')
112   for o in 'D database' 'Q query' 'R remove' 'S sync' 'U upgrade'; do
113     _arch_incomp "$o" && break
114   done
116   if [[ $? != 0 ]]; then
117     _arch_ptr2comp core
118   elif [[ ! $prev =~ ^-\w*[Vbhr] &&
119     ! $prev = --@(cachedir|config|dbpath|help|logfile|root|version) ]]
120   then
121     [[ $cur = -* ]] && _arch_ptr2comp ${o#* } common ||
122       case ${o% *} in
123       D|R)
124           _pacman_pkg Qq;;
125       Q)
126         { _arch_incomp 'g groups' && _pacman_pkg Qg sort; }    ||
127         { _arch_incomp 'p file'   && _pacman_file; }           ||
128           _arch_incomp 'o owns'   || _arch_incomp 'u upgrades' ||
129           _pacman_pkg Qq;;
130       S)
131         { _arch_incomp 'g groups' && _pacman_pkg Sg; }      ||
132         { _arch_incomp 'l list'   && _pacman_pkg Sl sort; } ||
133           _pacman_pkg Slq;;
134       U)
135           _pacman_file;;
136       esac
137   fi
138   true
141 _pacman_file() {
142   compopt -o filenames; _filedir 'pkg.tar*'
145 complete -F _pacman -o default pacman
146 complete -F _makepkg -o default makepkg
147 complete -F _pacman_key -o default pacman-key
149 # ex:et ts=2 sw=2 ft=sh