diff options
author | Steve Muckle <smuckle@google.com> | 2017-03-03 04:43:07 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-03-03 04:43:07 +0000 |
commit | 6ef92c0fcb4a8453e312403c1260789b1a6809c2 (patch) | |
tree | 9678ecc0ee37f2ad493e47dbe9589965aef15e88 /shell-completion | |
parent | f6659ebf9ab2435948d43279c54c56171fc04131 (diff) | |
parent | 5837e8351b7a213c3a42fc42e27887d53d61ab5a (diff) | |
download | platform_external_kmod-6ef92c0fcb4a8453e312403c1260789b1a6809c2.tar.gz platform_external_kmod-6ef92c0fcb4a8453e312403c1260789b1a6809c2.tar.bz2 platform_external_kmod-6ef92c0fcb4a8453e312403c1260789b1a6809c2.zip |
Merge remote-tracking branch 'aosp/upstream-master' into HEAD am: 516099405c
am: 5837e8351b
Change-Id: I77373d395f8ae8b22c6f6d091e8129cc538a74a4
Diffstat (limited to 'shell-completion')
-rw-r--r-- | shell-completion/bash/kmod | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/shell-completion/bash/kmod b/shell-completion/bash/kmod new file mode 100644 index 0000000..f530836 --- /dev/null +++ b/shell-completion/bash/kmod @@ -0,0 +1,103 @@ +# kmod completion -*- shell-script -*- +# +# This file is part of kmod. +# +# Copyright 2010 Ran Benita +# Copyright (C) 2013 Intel Corporation. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program; if not, see <http://www.gnu.org/licenses/>. + +__contains_word () { + local word=$1; shift + for w in "$@"; do [[ "$w" = "$word" ]] && return 0; done + return 1 +} + +__is_opt () { + local prevprev=${COMP_WORDS[COMP_CWORD-2]} + local short="$1" long="$2" + + if [[ "$prev" = "$short" || "$prev" = "$long" ]]; then + declare -g cur=${cur#=} + return 0 + elif [[ "$prev" = "=" && "$prevprev" = "$long" ]]; then + return 0 + fi + + return 1 +} + +_kmod_static_nodes () { + local OPTS='-o -f -h --help' + local OPTS_EQUAL='--output --format' + local GROUP_FORMAT='human tmpfiles devname' + + if __is_opt '-o' '--output'; then + compopt -o filenames + COMPREPLY=( $(compgen -f -- "$cur") ) + return 0 + elif __is_opt '-f' '--format'; then + COMPREPLY=( $(compgen -W "$GROUP_FORMAT" -- "$cur" ) ) + return 0 + fi + + local cur=${COMP_WORDS[COMP_CWORD]} + + compopt -o nospace + COMPREPLY=( $(compgen -W "$OPTS" -- "$cur") ) + COMPREPLY+=( $(compgen -W "$OPTS_EQUAL" -S= -- "$cur") ) +} + +_kmod() { + local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} + local VERBS=(help list static-nodes) + local OPTS='-h --help -V --version' + local verb + + # standalone options, no other option or action allowed + for ((i=0; $i < $COMP_CWORD; i++)); do + if __contains_word "${COMP_WORDS[i]}" ${OPTS}; then + return 0 + fi + done + + # find the action + for ((i=0; $i <= $COMP_CWORD; i++)); do + if __contains_word "${COMP_WORDS[i]}" "${VERBS[@]}"; then + verb=${COMP_WORDS[i]} + break + fi + done + + if [[ -z $verb ]]; then + COMPREPLY=( $(compgen -W '${OPTS[*]} ${VERBS[*]}' -- "$cur") ) + return 0 + fi + + local func=${verb//-/_} + + if declare -F _kmod_${func} > /dev/null; then + _kmod_${func} + fi + + # allow the space if there's only one completion and it doesn't end with + # '=' + if [[ ${#COMPREPLY[@]} == 1 && ${COMPREPLY[0]} != *"=" ]] ; then + compopt +o nospace + fi + + return 0 +} + +complete -F _kmod kmod |