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 --not-available \ |
169 |
--no-suggests --fuzzy \ |
170 |
--keep --nokeep --list --list-url --list-media --list-nodes \ |
171 |
--list-aliases --src --sources --provides --requires --obsoletes \ |
172 |
--suggests --summary --sourcerpm --force --parallel --wget --curl \ |
173 |
--prozilla --changelog --conflicts --proxy --proxy-user --env \ |
174 |
--dump-config --whatprovides --whatrequires \ |
175 |
--whatrequires-recursive --skip --prefer --use-distrib \ |
176 |
--searchmedia --ignorearch" -- $cur)) |
177 |
else |
178 |
# return rpm files (can't list available packages anymore) |
179 |
_filedir rpm |
180 |
fi |
181 |
} |
182 |
complete -F _urpmq urpmq |
183 |
|
184 |
# urpme completion |
185 |
# |
186 |
_urpme() |
187 |
{ |
188 |
local cur prev |
189 |
|
190 |
COMPREPLY=() |
191 |
cur=${COMP_WORDS[COMP_CWORD]} |
192 |
|
193 |
if [[ "$cur" == -* ]]; then |
194 |
# return list of available options |
195 |
COMPREPLY=( $( compgen -W "$common_options -a --auto --test \ |
196 |
--auto-orphans --parallel --justdb --noscripts" -- $cur ) ) |
197 |
else |
198 |
# return list of available packages |
199 |
_xfunc rpm _rpm_installed_packages |
200 |
fi |
201 |
} |
202 |
complete -F _urpme urpme |
203 |
|
204 |
# urpmf completion |
205 |
# |
206 |
_urpmf() |
207 |
{ |
208 |
local cur prev |
209 |
|
210 |
COMPREPLY=() |
211 |
cur=${COMP_WORDS[COMP_CWORD]} |
212 |
prev=${COMP_WORDS[COMP_CWORD-1]} |
213 |
|
214 |
case "$prev" in |
215 |
--media) |
216 |
_urpmi_medias |
217 |
return 0 |
218 |
;; |
219 |
--excludemedia) |
220 |
_urpmi_medias |
221 |
return 0 |
222 |
;; |
223 |
--sortmedia) |
224 |
_urpmi_medias |
225 |
return 0 |
226 |
;; |
227 |
esac |
228 |
|
229 |
if [[ "$cur" == -* ]]; then |
230 |
# return list of available options |
231 |
COMPREPLY=( $( compgen -W "$common_options -i -f -e -a -o -m --update \ |
232 |
--media --excludemedia --sortmedia --synthesis --use-distrib \ |
233 |
--uniq --name --group --license --size --epoch --summary \ |
234 |
--description --sourcerpm --packager--buildhost --url --provides \ |
235 |
--requires --suggests --files --conflicts --obsoletes --env" \ |
236 |
-- $cur ) ) |
237 |
else |
238 |
# return available files |
239 |
_filedir |
240 |
fi |
241 |
} |
242 |
complete -F _urpmf urpmf |
243 |
|
244 |
# urpmi.update completion |
245 |
# |
246 |
_urpmi_update() |
247 |
{ |
248 |
local cur |
249 |
|
250 |
COMPREPLY=() |
251 |
cur=${COMP_WORDS[COMP_CWORD]} |
252 |
|
253 |
if [[ "$cur" == -* ]]; then |
254 |
# return list of available options |
255 |
COMPREPLY=( $( compgen -W "$common_options -a -f --wget --prozilla \ |
256 |
--curl --limit-rate --proxy --proxy-user --update --ignore \ |
257 |
--no-ignore --no-md5sum --force-key --norebuild" -- $cur)) |
258 |
else |
259 |
# return list of available media |
260 |
_urpmi_medias |
261 |
fi |
262 |
} |
263 |
complete -F _urpmi_update urpmi.update |
264 |
|
265 |
# urpmi.addmedia completion |
266 |
# |
267 |
_urpmi_addmedia() |
268 |
{ |
269 |
local cur i args |
270 |
|
271 |
COMPREPLY=() |
272 |
cur=${COMP_WORDS[COMP_CWORD]} |
273 |
|
274 |
if [[ "$cur" == -* ]]; then |
275 |
# return list of available options |
276 |
COMPREPLY=( $( compgen -W "$common_options -f --wget --curl --prozilla \ |
277 |
--limit-rate --proxy --proxy-user --update --raw \ |
278 |
--probe-synthesis --probe-hdlist --probe-rpms --no-probe --distrib \ |
279 |
--env --version --arch --virtual --norebuild --nopubkey" -- $cur ) ) |
280 |
else |
281 |
# count number of mandatory args given sofar |
282 |
args=$COMP_CWORD |
283 |
for (( i=1; i < COMP_CWORD; i++ )); do |
284 |
if [[ "${COMP_WORDS[i]}" == -* ]]; then |
285 |
args=$(($args-1)) |
286 |
fi |
287 |
done |
288 |
case $args in |
289 |
1) |
290 |
# return list of available media |
291 |
_urpmi_medias |
292 |
;; |
293 |
2) |
294 |
# return list of available protocols |
295 |
COMPREPLY=( $( compgen -W 'file:// http:// \ |
296 |
ftp:// removable:// ssh:// \ |
297 |
rsync://' -- $cur ) ) |
298 |
;; |
299 |
3) |
300 |
# return word "with" |
301 |
COMPREPLY=( 'with' ) |
302 |
;; |
303 |
esac |
304 |
fi |
305 |
} |
306 |
complete -F _urpmi_addmedia urpmi.addmedia |
307 |
|
308 |
# urpmi.removemedia completion |
309 |
# |
310 |
_urpmi_removemedia() |
311 |
{ |
312 |
local cur |
313 |
|
314 |
COMPREPLY=() |
315 |
cur=${COMP_WORDS[COMP_CWORD]} |
316 |
|
317 |
if [[ "$cur" == -* ]]; then |
318 |
# if word begins with a dash, return list of available options |
319 |
COMPREPLY=( $( compgen -W "$common_options -a -y" -- $cur ) ) |
320 |
else |
321 |
# elsewhere, return list of available media |
322 |
_urpmi_medias |
323 |
fi |
324 |
|
325 |
} |
326 |
complete -F _urpmi_removemedia urpmi.removemedia |