Blame bash-completion/oggz

Packit a38265
# Bash completion support for oggz.
Packit a38265
# Conrad Parker, Aug 3 2008
Packit a38265
Packit a38265
# Copyright (C) 2008 Annodex Association
Packit a38265
#
Packit a38265
# Redistribution and use in source and binary forms, with or without
Packit a38265
# modification, are permitted provided that the following conditions
Packit a38265
# are met:
Packit a38265
#
Packit a38265
# - Redistributions of source code must retain the above copyright
Packit a38265
# notice, this list of conditions and the following disclaimer.
Packit a38265
#
Packit a38265
# - Redistributions in binary form must reproduce the above copyright
Packit a38265
# notice, this list of conditions and the following disclaimer in the
Packit a38265
# documentation and/or other materials provided with the distribution.
Packit a38265
#
Packit a38265
# - Neither the name of the Annodex Association nor the names of its
Packit a38265
# contributors may be used to endorse or promote products derived from
Packit a38265
# this software without specific prior written permission.
Packit a38265
#
Packit a38265
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
Packit a38265
# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
Packit a38265
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
Packit a38265
# PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE ASSOCIATION OR
Packit a38265
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
Packit a38265
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
Packit a38265
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
Packit a38265
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
Packit a38265
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
Packit a38265
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
Packit a38265
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Packit a38265
Packit a38265
OGGZ_COMMANDS="chop codecs comment diff dump help info known-codecs merge rip scan sort validate"
Packit a38265
Packit a38265
__oggzcomp ()
Packit a38265
{
Packit a38265
    COMPREPLY=( $( compgen -W '$*' -- $cur ))
Packit a38265
Packit a38265
    return
Packit a38265
}
Packit a38265
Packit a38265
__oggz_commands ()
Packit a38265
{
Packit a38265
    __oggzcomp $OGGZ_COMMANDS
Packit a38265
}
Packit a38265
Packit a38265
__oggz_known_codecs ()
Packit a38265
{
Packit a38265
    local cur=$1
Packit a38265
Packit a38265
    cur_LOWERCASE=$(echo $cur | tr '[:upper:]' '[:lower:]')
Packit a38265
Packit a38265
    KNOWN=$(oggz-known-codecs)
Packit a38265
    KNOWN_LOWERCASE=$(echo $KNOWN | tr '[:upper:]' '[:lower:]')
Packit a38265
Packit a38265
    # If the user has typed nothing, or lowercase, complete on lowercased
Packit a38265
    # codec names
Packit a38265
    if [ -z $cur -o $cur = $cur_LOWERCASE ] ; then
Packit a38265
      __oggzcomp "$KNOWN_LOWERCASE"
Packit a38265
    else
Packit a38265
      __oggzcomp "$KNOWN"
Packit a38265
    fi
Packit a38265
}
Packit a38265
Packit a38265
# See http://wiki.xiph.org/index.php/MIME_Types_and_File_Extensions
Packit a38265
_oggz_filedir ()
Packit a38265
{
Packit a38265
    _filedir '@(ogx|ogv|oga|ogg|spx|anx|axv|axa)'
Packit a38265
}
Packit a38265
Packit a38265
_oggz_ctype_cmd ()
Packit a38265
{
Packit a38265
    local cur="${COMP_WORDS[COMP_CWORD]}"
Packit a38265
    local prev="${COMP_WORDS[COMP_CWORD-1]}"
Packit a38265
Packit a38265
    local command=$1
Packit a38265
Packit a38265
    case "$prev" in
Packit a38265
    -c|--content-type)
Packit a38265
        __oggz_known_codecs $cur
Packit a38265
        return ;;
Packit a38265
    esac
Packit a38265
Packit a38265
    case "$cur" in
Packit a38265
    -*)
Packit a38265
        __oggzcomp $($command -?)
Packit a38265
        return ;;
Packit a38265
    *)  _oggz_filedir
Packit a38265
        return ;;
Packit a38265
    esac
Packit a38265
}
Packit a38265
Packit a38265
_oggz_basic_cmd ()
Packit a38265
{
Packit a38265
    local cur="${COMP_WORDS[COMP_CWORD]}"
Packit a38265
Packit a38265
    local command=$1
Packit a38265
Packit a38265
    case "$cur" in
Packit a38265
    -*)
Packit a38265
        __oggzcomp $($command -?)
Packit a38265
        return ;;
Packit a38265
    *)  _oggz_filedir
Packit a38265
        return ;;
Packit a38265
    esac
Packit a38265
}
Packit a38265
Packit a38265
_oggz_chop ()
Packit a38265
{
Packit a38265
    _oggz_basic_cmd oggz-chop
Packit a38265
}
Packit a38265
Packit a38265
_oggz_comment ()
Packit a38265
{
Packit a38265
    _oggz_ctype_cmd oggz-comment
Packit a38265
}
Packit a38265
Packit a38265
_oggz_diff ()
Packit a38265
{
Packit a38265
    _oggz_ctype_cmd oggz-diff
Packit a38265
}
Packit a38265
Packit a38265
_oggz_dump ()
Packit a38265
{
Packit a38265
    _oggz_ctype_cmd oggz-dump
Packit a38265
}
Packit a38265
Packit a38265
_oggz_info ()
Packit a38265
{
Packit a38265
    _oggz_basic_cmd oggz-info
Packit a38265
}
Packit a38265
Packit a38265
_oggz_known_codecs ()
Packit a38265
{
Packit a38265
    _oggz_basic_cmd oggz-known-codecs
Packit a38265
}
Packit a38265
Packit a38265
_oggz_merge ()
Packit a38265
{
Packit a38265
    _oggz_basic_cmd oggz-merge
Packit a38265
}
Packit a38265
Packit a38265
_oggz_rip ()
Packit a38265
{
Packit a38265
    _oggz_ctype_cmd oggz-rip
Packit a38265
}
Packit a38265
Packit a38265
_oggz_scan ()
Packit a38265
{
Packit a38265
    _oggz_basic_cmd oggz-scan
Packit a38265
}
Packit a38265
Packit a38265
_oggz_sort ()
Packit a38265
{
Packit a38265
    _oggz_basic_cmd oggz-sort
Packit a38265
}
Packit a38265
Packit a38265
_oggz_validate ()
Packit a38265
{
Packit a38265
    _oggz_basic_cmd oggz-validate
Packit a38265
}
Packit a38265
Packit a38265
_oggz_codecs ()
Packit a38265
{
Packit a38265
    _oggz_basic_cmd oggz-codecs
Packit a38265
}
Packit a38265
Packit a38265
_oggz_help ()
Packit a38265
{
Packit a38265
    __oggz_commands
Packit a38265
}
Packit a38265
Packit a38265
_oggz ()
Packit a38265
{
Packit a38265
    local cur="${COMP_WORDS[COMP_CWORD]}"
Packit a38265
    local prev="${COMP_WORDS[COMP_CWORD-1]}"
Packit a38265
    local i c=1 command
Packit a38265
Packit a38265
    while [ $c -lt $COMP_CWORD ]; do
Packit a38265
        i="${COMP_WORDS[c]}"
Packit a38265
        case "$i" in
Packit a38265
        --version|--help) ;;
Packit a38265
        *) command="$i"; break ;;
Packit a38265
        esac
Packit a38265
        c=$((++c))
Packit a38265
    done
Packit a38265
Packit a38265
    if [ $c -eq $COMP_CWORD -a -z "$command" ]; then
Packit a38265
        case "${COMP_WORDS[COMP_CWORD]}" in
Packit a38265
        --*) COMPREPLY=() ;;
Packit a38265
        *) __oggz_commands ;;
Packit a38265
        esac
Packit a38265
        return
Packit a38265
    fi
Packit a38265
Packit a38265
    case "$command" in
Packit a38265
    chop)	_oggz_chop ;;
Packit a38265
    comment)	_oggz_comment ;;
Packit a38265
    diff)	_oggz_diff ;;
Packit a38265
    dump)	_oggz_dump ;;
Packit a38265
    help)	_oggz_help ;;
Packit a38265
    info)	_oggz_info ;;
Packit a38265
    known-codecs)	_oggz_known-codecs ;;
Packit a38265
    merge)	_oggz_merge ;;
Packit a38265
    rip)	_oggz_rip ;;
Packit a38265
    scan)	_oggz_scan ;;
Packit a38265
    sort)	_oggz_sort ;;
Packit a38265
    validate)	_oggz_validate ;;
Packit a38265
    codecs)	_oggz_codecs ;;
Packit a38265
    *)		COMPREPLY=() ;;
Packit a38265
    esac
Packit a38265
}
Packit a38265
Packit a38265
# Completion for wrapper oggz tool
Packit a38265
complete -o filenames -F _oggz oggz
Packit a38265
Packit a38265
# Completions for commands
Packit a38265
complete -o filenames -F _oggz_chop oggz-chop
Packit a38265
complete -o filenames -F _oggz_comment oggz-comment
Packit a38265
complete -o filenames -F _oggz_diff oggz-diff
Packit a38265
complete -o filenames -F _oggz_dump oggz-dump
Packit a38265
complete -o filenames -F _oggz_info oggz-info
Packit a38265
complete -o default -F _oggz_known-codecs oggz-known-codecs
Packit a38265
complete -o filenames -F _oggz_merge oggz-merge
Packit a38265
complete -o filenames -F _oggz_rip oggz-rip
Packit a38265
complete -o filenames -F _oggz_scan oggz-scan
Packit a38265
complete -o filenames -F _oggz_sort oggz-sort
Packit a38265
complete -o filenames -F _oggz_validate oggz-validate
Packit a38265
complete -o filenames -F _oggz_codecs oggz-codecs