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