d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl# udevadm(8) completion -*- shell-script -*-
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl#
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl# This file is part of systemd.
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl#
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl# Copyright 2010 Ran Benita
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl#
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl# systemd is free software; you can redistribute it and/or modify it
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl# under the terms of the GNU Lesser General Public License as published by
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl# the Free Software Foundation; either version 2.1 of the License, or
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl# (at your option) any later version.
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl#
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl# systemd is distributed in the hope that it will be useful, but
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl# WITHOUT ANY WARRANTY; without even the implied warranty of
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl# General Public License for more details.
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl#
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl# You should have received a copy of the GNU Lesser General Public License
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl# along with systemd; If not, see <http://www.gnu.org/licenses/>.
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl__contains_word () {
a72d698d0d9ff9c158155b44cdc77376df31a317Dave Reisner local w word=$1; shift
a72d698d0d9ff9c158155b44cdc77376df31a317Dave Reisner for w in "$@"; do
a72d698d0d9ff9c158155b44cdc77376df31a317Dave Reisner [[ $w = "$word" ]] && return
a72d698d0d9ff9c158155b44cdc77376df31a317Dave Reisner done
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl}
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl__get_all_sysdevs() {
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl local -a devs=(/sys/bus/*/devices/*/ /sys/class/*/*/)
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl printf '%s\n' "${devs[@]%/}"
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl}
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl_udevadm() {
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl local i verb comps
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl local OPTS='-h --help --version --debug'
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner local verbs=(info trigger settle control monitor hwdb test-builtin test)
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl
3ce09b7da2eb8b888066468663b2b5c81a05a03cZbigniew Jędrzejewski-Szmek for ((i=0; i < COMP_CWORD; i++)); do
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner if __contains_word "${COMP_WORDS[i]}" "${verbs[@]}" &&
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl ! __contains_word "${COMP_WORDS[i-1]}" ${OPTS[ARG]}; then
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl verb=${COMP_WORDS[i]}
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl break
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl fi
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl done
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner if [[ -z $verb ]]; then
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner COMPREPLY=( $(compgen -W '${OPTS[*]} ${verbs[*]}' -- "$cur") )
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl return 0
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl fi
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner case $verb in
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner 'info')
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner if [[ $cur = -* ]]; then
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner comps='--help --query= --path= --name= --root --attribute-walk --export-db --cleanup-db'
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner else
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner comps=$( __get_all_sysdevs )
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner fi
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner ;;
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner 'trigger')
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner comps='--help --verbose --dry-run --type= --action= --subsystem-match=
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner --subsystem-nomatch= --attr-match= --attr-nomatch= --property-match=
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner --tag-match= --sysname-match= --parent-match='
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner ;;
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner 'settle')
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner comps='--help --timeout= --seq-start= --seq-end= --exit-if-exists= --quiet'
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner ;;
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner 'control')
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner comps='--help --exit --log-priority= --stop-exec-queue --start-exec-queue
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner --reload --property= --children-max= --timeout='
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner ;;
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner 'monitor')
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner comps='--help --kernel --udev --property --subsystem-match= --tag-match='
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner ;;
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner 'hwdb')
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner comps='--help --update --test='
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner ;;
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner 'test')
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner if [[ $cur = -* ]]; then
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner comps='--help --action='
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner else
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner comps=$( __get_all_sysdevs )
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner fi
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner ;;
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner 'test-builtin')
0b99c9f8f0cbfe9ab3de443cb6f94ecd7d21eae3Tom Gundersen comps='blkid btrfs hwdb input_id keyboard kmod net_id net_setup_link path_id usb_id uaccess'
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner ;;
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner *)
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner comps=${VERBS[*]}
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner ;;
b5b7ea750388919eee6087eb63f08903b57447cfDave Reisner esac
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl return 0
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl}
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Biebl
d611dadcc74db10ba533ee6859308f5fc505aee1Michael Bieblcomplete -F _udevadm udevadm