[xiph-commits] r3676 - in liboggz/trunk: . bash-completion

conrad at svn.annodex.net conrad at svn.annodex.net
Sun Aug 3 00:28:39 PDT 2008


Author: conrad
Date: 2008-08-03 00:28:38 -0700 (Sun, 03 Aug 2008)
New Revision: 3676

Added:
   liboggz/trunk/bash-completion/
   liboggz/trunk/bash-completion/oggz
Modified:
   liboggz/trunk/Makefile.am
   liboggz/trunk/README
Log:
Add bash-completion/oggz script. Source it from your .profile, or add it
to /etc/bash_completion.d to enable completion of oggz tool options and
codec names.


Modified: liboggz/trunk/Makefile.am
===================================================================
--- liboggz/trunk/Makefile.am	2008-08-03 06:31:33 UTC (rev 3675)
+++ liboggz/trunk/Makefile.am	2008-08-03 07:28:38 UTC (rev 3676)
@@ -22,6 +22,8 @@
 
 # Extra files to distribute in the source tarball.
 EXTRA_DIST = oggz.pc.in oggz-uninstalled.pc.in \
+	apache-install.sh \
+	bash-completion/oggz \
 	$(SYMBIAN_extra_dist) $(WIN32_extra_dist)
 
 # Extra files to distribute for the Symbian build.

Modified: liboggz/trunk/README
===================================================================
--- liboggz/trunk/README	2008-08-03 06:31:33 UTC (rev 3675)
+++ liboggz/trunk/README	2008-08-03 07:28:38 UTC (rev 3676)
@@ -124,6 +124,10 @@
 
     * oggz-validate: Validate the Ogg framing of one or more files.
 
+The script bash-completion/oggz enables completion of tool options and codec
+names when using the bash shell. Source it from your .profile, or install it
+in /etc/bash_completion.d to enable it system-wide.
+
 License
 -------
 

Added: liboggz/trunk/bash-completion/oggz
===================================================================
--- liboggz/trunk/bash-completion/oggz	                        (rev 0)
+++ liboggz/trunk/bash-completion/oggz	2008-08-03 07:28:38 UTC (rev 3676)
@@ -0,0 +1,222 @@
+# 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 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_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 ;;
+    *)		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



More information about the commits mailing list