# bash completion for urpmi and friends # Copyright (c) 2002-2006 Guillaume Rousse common_options="-q --quiet -v --verbose --debug -h --help --urpmi-root --wait-lock" # utility functions _urpmi_get_medias() { medias=( $( urpmq --list-media $1 2>/dev/null \ | \sed -e 's/(/\\(/g' -e 's/)/\\)/g' -e 's/ /\\ /g' ) ) } _urpmi_medias() { local medias IFS=$'\t\n' # get medias list _urpmi_get_medias all # return matching ones COMPREPLY=( $( compgen -W '${medias[@]}' -- $cur ) ) } _urpmi_aliases() { # return list of available aliases COMPREPLY=( $( awk -F: '{print $1}' /etc/urpmi/parallel.cfg 2>/dev/null \ | \grep "^${cur//\\\\/}" ) ) } _urpmi_packages() { local options # find media selection options for (( i=1; i < COMP_CWORD; i++ )); do case "${COMP_WORDS[i]}" in --@\(excludemedia|media\)) options="$options ${COMP_WORDS[i]} ${COMP_WORDS[i+1]}" i=$(($i+1)) ;; --update) options="$options ${COMP_WORDS[i]}" ;; esac done COMPREPLY=( $( compgen -W "$(urpmq $options --list | \grep ^$cur )" -- ) ) } # urpmi completion # _urpmi() { local cur prev options COMPREPLY=() cur=`_get_cword` prev=`_get_pword` case "$prev" in --media) _urpmi_medias return 0 ;; --excludemedia) _urpmi_medias return 0 ;; --sortmedia) _urpmi_medias return 0 ;; --searchmedia) _urpmi_medias return 0 ;; --parallel) _urpmi_aliases return 0 ;; --root|--urpmi-root) _filedir -d return 0 ;; esac if [[ "$cur" == -* ]]; then # return list of available options options="$common_options -a -p -P -y --update --media --excludemedia \ --sortmedia --synthesis --auto --auto-select --no-uninstall \ --split-level --split-length --fuzzy --buildrequires --install-src \ --clean --noclean --parallel --wget --prozilla --curl --limit-rate \ --proxy --proxy-user --bug --no-verify-rpm --no-install --test \ --excludepath --excludedocs --searchmedia --ignoresize \ --ignorearch --strict-arch --wget-options --curl-options \ --prozilla-options --rsync-options --resume --retry --skip \ --prefer --nolock --more-choices --downgrade --deploops --debug-librpm" # add dangereous option for everything else as rurpmi if [[ ${COMP_WORDS[0]} != *rurpmi ]]; then options="$options --root --use-distrib --env --auto-orphans \ --replacepkgs --justdb --allow-nodeps --allow-force \ --no-recommends --force --noscripts --auto-update --keep \ --nokeep --replacefiles --verify-rpm" for (( i=1; i < COMP_CWORD; i++ )); do case ${COMP_WORDS[i]} in ----auto-update) options="$options --no-md5sum \ --force-key" ;; esac done fi COMPREPLY=( $( compgen -W "$options" -- $cur ) ) else if [[ ${COMP_WORDS[0]} == *rurpmi ]]; then # return available packages only _urpmi_packages else # return available packages (unless clearly a file) # and rpm files if [[ "$cur" != */* ]]; then _urpmi_packages fi _filedir '@(rpm|spec)' fi fi } complete -F _urpmi $filenames urpmi gurpmi rurpmi # urpmq completion # _urpmq() { local cur prev COMPREPLY=() cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} case "$prev" in --media) _urpmi_medias return 0 ;; --excludemedia) _urpmi_medias return 0 ;; --sortmedia) _urpmi_medias return 0 ;; --parallel) _urpmi_nodes return 0 ;; --list-media) COMPREPLY=( $( compgen -W 'all update active' -- $cur)) return 0 ;; esac if [[ "$cur" == -* ]]; then # return list of available options COMPREPLY=( $( compgen -W "$common_options -d -u -m -a -c -y -s -i -g \ -p -r -f -l --update --media --excludemedia --sortmedia \ --synthesis --auto-select --auto-orphans --not-available \ --no-recommends --fuzzy \ --keep --nokeep --list --list-url --list-media --list-nodes \ --list-aliases --src --sources --provides --requires --obsoletes \ --recommends --summary --sourcerpm --force --parallel --wget --curl \ --prozilla --changelog --conflicts --proxy --proxy-user --env \ --dump-config --whatprovides --whatrequires \ --whatrequires-recursive --skip --prefer --use-distrib \ --searchmedia --ignorearch" -- $cur)) else # return rpm files (can't list available packages anymore) _filedir rpm fi } complete -F _urpmq urpmq # urpme completion # _urpme() { local cur prev COMPREPLY=() cur=${COMP_WORDS[COMP_CWORD]} if [[ "$cur" == -* ]]; then # return list of available options COMPREPLY=( $( compgen -W "$common_options -a --auto --test \ --auto-orphans --parallel --justdb --noscripts" -- $cur ) ) else # return list of available packages _xfunc rpm _rpm_installed_packages fi } complete -F _urpme urpme # urpmf completion # _urpmf() { local cur prev COMPREPLY=() cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} case "$prev" in --media) _urpmi_medias return 0 ;; --excludemedia) _urpmi_medias return 0 ;; --sortmedia) _urpmi_medias return 0 ;; esac if [[ "$cur" == -* ]]; then # return list of available options COMPREPLY=( $( compgen -W "$common_options -i -f -e -a -o -m --update \ --media --excludemedia --literal --sortmedia --synthesis --use-distrib \ --uniq --name --group --license --size --epoch --summary \ --description --sourcerpm --packager--buildhost --url --provides \ --recommends --requires --files --conflicts --obsoletes --env" \ -- $cur ) ) else # return available files _filedir fi } complete -F _urpmf urpmf # urpmi.update completion # _urpmi_update() { local cur COMPREPLY=() cur=${COMP_WORDS[COMP_CWORD]} if [[ "$cur" == -* ]]; then # return list of available options COMPREPLY=( $( compgen -W "$common_options -a -f --wget --prozilla \ --curl --limit-rate --proxy --proxy-user --update --ignore \ --no-ignore --no-md5sum --force-key --norebuild" -- $cur)) else # return list of available media _urpmi_medias fi } complete -F _urpmi_update urpmi.update # urpmi.addmedia completion # _urpmi_addmedia() { local cur i args COMPREPLY=() cur=${COMP_WORDS[COMP_CWORD]} if [[ "$cur" == -* ]]; then # return list of available options COMPREPLY=( $( compgen -W "$common_options -f --wget --curl --prozilla \ --limit-rate --proxy --proxy-user --update --raw \ --probe-synthesis --probe-hdlist --probe-rpms --no-probe --distrib \ --env --version --arch --virtual --norebuild --nopubkey" -- $cur ) ) else # count number of mandatory args given sofar args=$COMP_CWORD for (( i=1; i < COMP_CWORD; i++ )); do if [[ "${COMP_WORDS[i]}" == -* ]]; then args=$(($args-1)) fi done case $args in 1) # return list of available media _urpmi_medias ;; 2) # return list of available protocols COMPREPLY=( $( compgen -W 'file:// http:// \ https:// ftp:// removable:// ssh:// \ rsync://' -- $cur ) ) ;; 3) # return word "with" COMPREPLY=( 'with' ) ;; esac fi } complete -F _urpmi_addmedia urpmi.addmedia # urpmi.removemedia completion # _urpmi_removemedia() { local cur COMPREPLY=() cur=${COMP_WORDS[COMP_CWORD]} if [[ "$cur" == -* ]]; then # if word begins with a dash, return list of available options COMPREPLY=( $( compgen -W "$common_options -a -y" -- $cur ) ) else # elsewhere, return list of available media _urpmi_medias fi } complete -F _urpmi_removemedia urpmi.removemedia