1 |
# bash completion for urpmi and friends |
2 |
# Copyright (c) 2002-2006 Guillaume Rousse <guillomovitch@mandriva.com> |
3 |
# $Id: urpmi.bash-completion 266536 2010-02-26 21:07:37Z guillomovitch $ |
4 |
|
5 |
common_options="-q --quiet -v --verbose --debug -h --help --urpmi-root --wait-lock" |
6 |
|
7 |
# utility functions |
8 |
_urpmi_get_medias() |
9 |
{ |
10 |
medias=( $( urpmq --list-media $1 2>/dev/null \ |
11 |
| sed -e 's/(/\\(/g' -e 's/)/\\)/g' -e 's/ /\\ /g' ) ) |
12 |
} |
13 |
|
14 |
_urpmi_medias() |
15 |
{ |
16 |
local medias IFS=$'\t\n' |
17 |
# get medias list |
18 |
_urpmi_get_medias all |
19 |
# return matching ones |
20 |
COMPREPLY=( $( compgen -W '${medias[@]}' -- $cur ) ) |
21 |
} |
22 |
|
23 |
_urpmi_aliases() |
24 |
{ |
25 |
# return list of available aliases |
26 |
COMPREPLY=( $( awk -F: '{print $1}' /etc/urpmi/parallel.cfg 2>/dev/null \ |
27 |
| grep "^${cur//\\\\/}" ) ) |
28 |
} |
29 |
|
30 |
_urpmi_packages() |
31 |
{ |
32 |
local options |
33 |
|
34 |
|
35 |
# find media selection options |
36 |
for (( i=1; i < COMP_CWORD; i++ )); do |
37 |
case "${COMP_WORDS[i]}" in |
38 |
--@\(excludemedia|media\)) |
39 |
options="$options ${COMP_WORDS[i]} ${COMP_WORDS[i+1]}" |
40 |
i=$(($i+1)) |
41 |
;; |
42 |
--update) |
43 |
options="$options ${COMP_WORDS[i]}" |
44 |
;; |
45 |
esac |
46 |
done |
47 |
|
48 |
COMPREPLY=( $( compgen -W "$(urpmq $options --list | grep ^$cur )" -- ) ) |
49 |
} |
50 |
|
51 |
# urpmi completion |
52 |
# |
53 |
_urpmi() |
54 |
{ |
55 |
local cur prev options |
56 |
|
57 |
COMPREPLY=() |
58 |
cur=`_get_cword` |
59 |
prev=`_get_pword` |
60 |
|
61 |
case "$prev" in |
62 |
--media) |
63 |
_urpmi_medias |
64 |
return 0 |
65 |
;; |
66 |
--excludemedia) |
67 |
_urpmi_medias |
68 |
return 0 |
69 |
;; |
70 |
--sortmedia) |
71 |
_urpmi_medias |
72 |
return 0 |
73 |
;; |
74 |
--searchmedia) |
75 |
_urpmi_medias |
76 |
return 0 |
77 |
;; |
78 |
--parallel) |
79 |
_urpmi_aliases |
80 |
return 0 |
81 |
;; |
82 |
--root|--urpmi-root) |
83 |
_filedir -d |
84 |
return 0 |
85 |
;; |
86 |
esac |
87 |
|
88 |
if [[ "$cur" == -* ]]; then |
89 |
# return list of available options |
90 |
options="$common_options -a -p -P -y --update --media --excludemedia \ |
91 |
--sortmedia --synthesis --auto --auto-select --no-uninstall \ |
92 |
--split-level --split-length --fuzzy --buildrequires --install-src \ |
93 |
--clean --noclean --parallel --wget --prozilla --curl --limit-rate \ |
94 |
--proxy --proxy-user --bug --no-verify-rpm --no-install --test \ |
95 |
--excludepath --excludedocs --searchmedia --ignoresize \ |
96 |
--ignorearch --strict-arch --wget-options --curl-options \ |
97 |
--prozilla-options --rsync-options --resume --retry --skip \ |
98 |
--prefer --nolock --more-choices" |
99 |
# add dangereous option for everything else as rurpmi |
100 |
if [[ ${COMP_WORDS[0]} != *rurpmi ]]; then |
101 |
options="$options --root --use-distrib --env --auto-orphans \ |
102 |
--replacepkgs --justdb --allow-nodeps --allow-force \ |
103 |
--no-suggests --force --noscripts --auto-update --keep \ |
104 |
--nokeep --replacefiles --verify-rpm" |
105 |
for (( i=1; i < COMP_CWORD; i++ )); do |
106 |
case ${COMP_WORDS[i]} in |
107 |
----auto-update) |
108 |
options="$options --no-md5sum \ |
109 |
--force-key" |
110 |
;; |
111 |
esac |
112 |
done |
113 |
fi |
114 |
COMPREPLY=( $( compgen -W "$options" -- $cur ) ) |
115 |
else |
116 |
if [[ ${COMP_WORDS[0]} == *rurpmi ]]; then |
117 |
# return available packages only |
118 |
_urpmi_packages |
119 |
else |
120 |
# return available packages (unless clearly a file) |
121 |
# and rpm files |
122 |
if [[ "$cur" != */* ]]; then |
123 |
_urpmi_packages |
124 |
fi |
125 |
_filedir '@(rpm|spec)' |
126 |
fi |
127 |
fi |
128 |
} |
129 |
complete -F _urpmi $filenames urpmi gurpmi rurpmi |
130 |
|
131 |
# urpmq completion |
132 |
# |
133 |
_urpmq() |
134 |
{ |
135 |
local cur prev |
136 |
|
137 |
COMPREPLY=() |
138 |
cur=${COMP_WORDS[COMP_CWORD]} |
139 |
prev=${COMP_WORDS[COMP_CWORD-1]} |
140 |
|
141 |
case "$prev" in |
142 |
--media) |
143 |
_urpmi_medias |
144 |
return 0 |
145 |
;; |
146 |
--excludemedia) |
147 |
_urpmi_medias |
148 |
return 0 |
149 |
;; |
150 |
--sortmedia) |
151 |
_urpmi_medias |
152 |
return 0 |
153 |
;; |
154 |
--parallel) |
155 |
_urpmi_nodes |
156 |
return 0 |
157 |
;; |
158 |
--list-media) |
159 |
COMPREPLY=( $( compgen -W 'all update active' -- $cur)) |
160 |
return 0 |
161 |
;; |
162 |
esac |
163 |
|
164 |
if [[ "$cur" == -* ]]; then |
165 |
# return list of available options |
166 |
COMPREPLY=( $( compgen -W "$common_options -d -u -m -a -c -y -s -i -g \ |
167 |
-p -r -f -l --update --media --excludemedia --sortmedia \ |
168 |
--synthesis --auto-select --auto-orphans --no-suggests --fuzzy \ |
169 |
--keep --nokeep --list --list-url --list-media --list-nodes \ |
170 |
--list-aliases --src --sources --provides --requires --obsoletes \ |
171 |
--suggests --summary --sourcerpm --force --parallel --wget --curl \ |
172 |
--prozilla --changelog --conflicts --proxy --proxy-user --env \ |
173 |
--dump-config --whatprovides --whatrequires \ |
174 |
--whatrequires-recursive --skip --prefer --use-distrib \ |
175 |
--searchmedia --ignorearch" -- $cur)) |
176 |
else |
177 |
# return rpm files (can't list available packages anymore) |
178 |
_filedir rpm |
179 |
fi |
180 |
} |
181 |
complete -F _urpmq urpmq |
182 |
|
183 |
# urpme completion |
184 |
# |
185 |
_urpme() |
186 |
{ |
187 |
local cur prev |
188 |
|
189 |
COMPREPLY=() |
190 |
cur=${COMP_WORDS[COMP_CWORD]} |
191 |
|
192 |
if [[ "$cur" == -* ]]; then |
193 |
# return list of available options |
194 |
COMPREPLY=( $( compgen -W "$common_options -a --auto --test \ |
195 |
--auto-orphans --parallel --justdb --noscripts" -- $cur ) ) |
196 |
else |
197 |
# return list of available packages |
198 |
_xfunc rpm _rpm_installed_packages |
199 |
fi |
200 |
} |
201 |
complete -F _urpme urpme |
202 |
|
203 |
# urpmf completion |
204 |
# |
205 |
_urpmf() |
206 |
{ |
207 |
local cur prev |
208 |
|
209 |
COMPREPLY=() |
210 |
cur=${COMP_WORDS[COMP_CWORD]} |
211 |
prev=${COMP_WORDS[COMP_CWORD-1]} |
212 |
|
213 |
case "$prev" in |
214 |
--media) |
215 |
_urpmi_medias |
216 |
return 0 |
217 |
;; |
218 |
--excludemedia) |
219 |
_urpmi_medias |
220 |
return 0 |
221 |
;; |
222 |
--sortmedia) |
223 |
_urpmi_medias |
224 |
return 0 |
225 |
;; |
226 |
esac |
227 |
|
228 |
if [[ "$cur" == -* ]]; then |
229 |
# return list of available options |
230 |
COMPREPLY=( $( compgen -W "$common_options -i -f -e -a -o -m --update \ |
231 |
--media --excludemedia --sortmedia --synthesis --use-distrib \ |
232 |
--uniq --name --group --license --size --epoch --summary \ |
233 |
--description --sourcerpm --packager--buildhost --url --provides \ |
234 |
--requires --suggests --files --conflicts --obsoletes --env" \ |
235 |
-- $cur ) ) |
236 |
else |
237 |
# return available files |
238 |
_filedir |
239 |
fi |
240 |
} |
241 |
complete -F _urpmf urpmf |
242 |
|
243 |
# urpmi.update completion |
244 |
# |
245 |
_urpmi_update() |
246 |
{ |
247 |
local cur |
248 |
|
249 |
COMPREPLY=() |
250 |
cur=${COMP_WORDS[COMP_CWORD]} |
251 |
|
252 |
if [[ "$cur" == -* ]]; then |
253 |
# return list of available options |
254 |
COMPREPLY=( $( compgen -W "$common_options -a -f --wget --prozilla \ |
255 |
--curl --limit-rate --proxy --proxy-user --update --ignore \ |
256 |
--no-ignore --no-md5sum --force-key --norebuild" -- $cur)) |
257 |
else |
258 |
# return list of available media |
259 |
_urpmi_medias |
260 |
fi |
261 |
} |
262 |
complete -F _urpmi_update urpmi.update |
263 |
|
264 |
# urpmi.addmedia completion |
265 |
# |
266 |
_urpmi_addmedia() |
267 |
{ |
268 |
local cur i args |
269 |
|
270 |
COMPREPLY=() |
271 |
cur=${COMP_WORDS[COMP_CWORD]} |
272 |
|
273 |
if [[ "$cur" == -* ]]; then |
274 |
# return list of available options |
275 |
COMPREPLY=( $( compgen -W "$common_options -f --wget --curl --prozilla \ |
276 |
--limit-rate --proxy --proxy-user --update --raw \ |
277 |
--probe-synthesis --probe-hdlist --probe-rpms --no-probe --distrib \ |
278 |
--env --version --arch --virtual --norebuild --nopubkey" -- $cur ) ) |
279 |
else |
280 |
# count number of mandatory args given sofar |
281 |
args=$COMP_CWORD |
282 |
for (( i=1; i < COMP_CWORD; i++ )); do |
283 |
if [[ "${COMP_WORDS[i]}" == -* ]]; then |
284 |
args=$(($args-1)) |
285 |
fi |
286 |
done |
287 |
case $args in |
288 |
1) |
289 |
# return list of available media |
290 |
_urpmi_medias |
291 |
;; |
292 |
2) |
293 |
# return list of available protocols |
294 |
COMPREPLY=( $( compgen -W 'file:// http:// \ |
295 |
ftp:// removable:// ssh:// \ |
296 |
rsync://' -- $cur ) ) |
297 |
;; |
298 |
3) |
299 |
# return word "with" |
300 |
COMPREPLY=( 'with' ) |
301 |
;; |
302 |
esac |
303 |
fi |
304 |
} |
305 |
complete -F _urpmi_addmedia urpmi.addmedia |
306 |
|
307 |
# urpmi.removemedia completion |
308 |
# |
309 |
_urpmi_removemedia() |
310 |
{ |
311 |
local cur |
312 |
|
313 |
COMPREPLY=() |
314 |
cur=${COMP_WORDS[COMP_CWORD]} |
315 |
|
316 |
if [[ "$cur" == -* ]]; then |
317 |
# if word begins with a dash, return list of available options |
318 |
COMPREPLY=( $( compgen -W "$common_options -a -y" -- $cur ) ) |
319 |
else |
320 |
# elsewhere, return list of available media |
321 |
_urpmi_medias |
322 |
fi |
323 |
|
324 |
} |
325 |
complete -F _urpmi_removemedia urpmi.removemedia |