[Bash-completion-devel] some patches

Raphaël raphael.droz at gmail.com
Sat Jun 11 19:54:35 UTC 2011


So... you'll find:
- a completion specific to the mysql client.
- a completion for the boinc client derived from upstream's wiki.
- the patch previously mentioned about mplayer, options list and i18n
- a patch for sitecopy which avoids a failure with grep in some case
- a patch which adds lpr(1) and lpq(1) to the cups tools completions

hope it helps.


Raph
-------------- next part --------------
commit 5e9d805b953312b84d23dddd3e9c96026b85842e
Author: Rapha?l Droz <raphael.droz+floss at gmail.com>
Date:   Sat Jun 11 18:24:02 2011 +0200

    Added completion scripts for lpr(1) and lpq(1).

diff --git a/completions/cups b/completions/cups
index 6ba7bff..21ddd76 100644
--- a/completions/cups
+++ b/completions/cups
@@ -11,6 +11,66 @@ _cancel()
 } &&
 complete -F _cancel cancel
 
+have lpr || return
+
+_lpr()
+{
+    local cur prev words cword
+    _init_completion || return
+
+    compopt +o nospace
+    case $prev in
+        -P)
+            COMPREPLY=( $( compgen -W "$( lpstat -a | cut -d' ' -f1 )" -- "$cur" ) )
+            return 0
+            ;;
+        -U)
+            COMPREPLY=( $( compgen -u -- "$cur" ) )
+            return 0
+            ;;
+        -o)
+            compopt -o nospace
+            COMPREPLY=( $( compgen -W "media= landscape orientation-requested= sides= fitplot number-up= scaling= cpi= lpi= page-bottom= page-top= page-left= page-right=" -- "$cur" ) )
+            return 0
+            ;;
+    esac
+
+    if [[ "$cur" == - ]]; then
+        COMPREPLY=( $( compgen -W '-E -H -C -J -T -P -U -h -l -m -o -p -q -r' -- "$cur" ) )
+        return 0
+    fi
+
+    _filedir
+} &&
+complete -F _lpr lpr
+
+have lpq || return
+
+_lpq()
+{
+    local cur prev words cword
+    _init_completion || return
+
+    case $prev in
+        -P)
+            COMPREPLY=( $( compgen -W "$( lpstat -a | cut -d' ' -f1 )" -- "$cur" ) )
+            return 0
+            ;;
+        -U)
+            COMPREPLY=( $( compgen -u -- "$cur" ) )
+            return 0
+            ;;
+    esac
+
+    if [[ "$cur" == - ]]; then
+        COMPREPLY=( $( compgen -W '-E -P -U -a -h -l' -- "$cur" ) )
+        return 0
+    fi
+
+    _filedir
+} &&
+complete -F _lpq lpq
+
 # Local variables:
 # mode: shell-script
 # sh-basic-offset: 4
-------------- next part --------------
commit 501339d9960a79ba1f131ed7ed549ef5e4c16f57
Author: Rapha?l Droz <raphael.droz at gmail.com>
Date:   Thu Mar 17 14:14:06 2011 +0100

    fixed a bug with grep and brackets: use of sitecopy -v to fetch sites.

diff --git a/completions/sitecopy b/completions/sitecopy
index 616bc5e..c2c922d 100644
--- a/completions/sitecopy
+++ b/completions/sitecopy
@@ -21,8 +21,8 @@ _sitecopy()
             ;;
         *)
             if [ -r ~/.sitecopyrc ]; then
-                COMPREPLY=( $( compgen -W "$(command grep '^["$'\t '"]*site' \
-                    ~/.sitecopyrc | awk '{print $2}')" -- "$cur" ) )
+                COMPREPLY=( $( compgen -W "$(sitecopy -v | \
+			command sed -n '/^Site:/s/Site: //p')" -- "$cur" ) )
             fi
             ;;
     esac
-------------- next part --------------
commit cc3e2d55e9d684e3e0d1ed4c86c000a2101a75f2
Author: Rapha?l Droz <raphael.droz+floss at gmail.com>
Date:   Sat Jun 11 18:19:56 2011 +0200

    Fixed the completion of the option list in an i17n context.
    
    When mplayer is compiled in french, the sed expression "^[[:space:]]*Name/d"
    does not match "^Nom$" pattern. In such a case no option is available.

diff --git a/completions/mplayer b/completions/mplayer
index 21e0fd9..7ee1b70 100644
--- a/completions/mplayer
+++ b/completions/mplayer
@@ -245,7 +245,7 @@ _mplayer()
     case $cur in
         -*)
             COMPREPLY=( $( compgen -W '$( $cmd -nomsgcolor -nomsgmodule -list-options 2>/dev/null | \
-                sed -ne '1,/^[[:space:]]*Name/d' \
+                sed -ne "1,/^[[:space:]]*\(Name\|Nom\)/d" \
                     -e "s/^[[:space:]]*/-/" -e "s/[[:space:]:].*//" \
                     -e "/^-\(Total\|.*\*\)\{0,1\}$/!p" )' -- "$cur" ) )
             ;;
-------------- next part --------------
#!/bin/bash
# Written by Frank S. Thomas <fst at debian.org>.
# http://boinc.berkeley.edu/trac/export/23575/trunk/boinc/client/scripts/boinc.bash
# http://boinc.berkeley.edu/trac/wiki/BashCommandCompletion
# Enhancements by Rapha?l Droz for the bash-completion project (2011).

have boinc || have boinc_client || return

_boinc_num() {
    local -a toks
    toks=( $(compgen -W "{0..9}" -- "$cur") )
    COMPREPLY=( "${COMPREPLY[@]}" "${toks[@]}" )
}

_boinc_get_tasks() {
    echo $(boinccmd --get_tasks|sed -n '/^ *name:/s/.* //p')
}

_boinc_get_projects_url() {
    echo $(boinccmd --get_tasks|sed -n '/URL:/s/.*: //p'|sort -u)
}

_boinc()
{
    COMPREPLY=()
    local cur prev opts words cword pprev
    _get_comp_words_by_ref cur prev words cword

    opts="$(_parse_help boinc)"

    # Handle options that require one or more arguments.
    case $prev in
        --attach_project|--reset_project|--update_prefs)
            return 0
        ;;

	--@(detach|reset)_project|--update_prefs)
	    COMPREPLY=( $(compgen -W "$(_boinc_get_projects_url)" -- "$cur") )
            return 0
        ;;

	--dir)
	    _filedir -d
	    return 0
	;;

	--exit_after_app_start|--file_xfer_giveup_period|--gui_rpc_port|	\
	    --master_fetch_@(interval|period|retry_cap)|	\
	    --pers_@(giveup|retry_delay_@(max|min))|--retry_cap|	\
	    --sched_retry_delay_@(max|min)|--start_delay)
	    _boinc_num
	    return 0
	;;
    esac

    # Handle options that require two arguments.
    if [[ COMP_CWORD -gt 1 ]]; then
        pprev="${COMP_WORDS[COMP_CWORD-2]}"

        case "$pprev" in
            --attach_project)
                return 0
            ;;
        esac
    fi

    COMPREPLY=( $(compgen -W "$opts" -- "$cur") )
    return 0

}
complete -F _boinc -o default boinc boinc_client

_boinccmd()
{
    COMPREPLY=()
    local cur prev opts words cword pprev
    _get_comp_words_by_ref -n : cur prev words cword

    opts="$(_parse_help boinccmd) --host --passwd -h --help"

    # Handle options/commands that require one or more arguments.
    case $prev in
        --passwd|--create_account|--file_transfer|--get_messages|	\
	    --get_notices|--join_acct_mgr|--lookup_account)
            return 0
        ;;

        --host)
	    # protect _known_hosts_real() from throwing syntax error with invalid $cur patterns
            [[ ! "$cur" =~ ^- ]] && _known_hosts_real "$cur"
            return 0
        ;;

	--set_debts)
	    COMPREPLY=( $(compgen -W "$(_boinc_get_projects_url)" -- "$cur") )
	    return 0
	;;

        --set_run_mode|--set_network_mode|--set_gpu_mode)
            COMPREPLY=( $(compgen -W "always auto never" -- "$cur") )
            return 0
        ;;

        --set_screensaver_mode)
            COMPREPLY=( $(compgen -W "on off" -- "$cur") )
            return 0
        ;;

	--project|--project_attach|--task)
	    COMPREPLY=( $(compgen -W "$(_boinc_get_projects_url)" -- "$cur") )
	    return 0
	;;
    esac

    if [[ $((cword-2)) -gt 1 && $words[$((cword-2))] =~ --* ]]; then
	pprev=$words[$((cword-2))]
	case $pprev in
	    --create_account|--file_transfer|--join_acct_mgr|--lookup_account)
		return 0
	    ;;

	    --project)
		COMPREPLY=( $(compgen -W "reset detach update suspend resume nomorework allowmorework" -- "$cur") )
		return 0
	    ;;

	    --project_attach)
		return 0
	    ;;

	    --set_debts)
		_boinc_num
		return 0
	    ;;

	    # a duration...
	    --set_gpu_mode|--set_network_mode|--set_run_mode)
		_boinc_num
		return 0
	    ;;

	    --task)
		COMPREPLY=( $(compgen -W "$(_boinc_get_tasks)" -- "$cur") )
		return 0
	    ;;
	esac
    fi

    if [[ $((cword-3)) -gt 1 && $words[$((cword-3))] =~ --* ]]; then
	pprev=$words[$((cword-3))]
	case $pprev in
	    --file_transfer)
		COMPREPLY=( $(compgen -W "$(retry abort)" -- "$cur") )
		return 0
	    ;;

	    --join_acct_mgr)
		return 0
	    ;;

            --set_debts)
		_boinc_num
		return 0
	    ;;

	    --task)
		COMPREPLY=( $(compgen -W "$(suspend resume abort graphics_window graphics_fullscreen)" -- "$cur") )
		return 0
	    ;;
	esac
    fi

    # catch-all
    [[ "${words[@]}" =~ "--passwd" ]] && opts="${opts/--passwd/}"
    [[ "${words[@]}" =~ "--host" ]] && opts="${opts/--host/}"
    # TODO: check --host and --passwd come *before* other "commands", then stop to offer them
    COMPREPLY=( $(compgen -W "$opts" -- "$cur") )

    return 0
}
complete -F _boinccmd boinccmd


_boincmgr()
{
    COMPREPLY=()
    local cur prev opts
    _get_comp_words_by_ref cur prev

    opts="$(_parse_help boincmgr)"

    case $prev in
        -e|--clientdir|-d|--datadir)
	    _filedir -d
	    return 0
	    ;;
	-n|--namehost)
	    # protect _known_hosts_real() from throwing syntax error with invalid $cur patterns
            [[ ! "$cur" =~ ^- ]] && _known_hosts_real "$cur"
	    return 0
	    ;;
	-g|--gui_rpc_port)
	    _boinc_num
            return 0
	    ;;
	-p|--password)
	    return 0
	    ;;
	-b|--boincargs)
	    COMPREPLY=( $(compgen -W "$(_parse_help boinc)" -- "$cur") )
            return 0
            ;;
    esac

    # catch-all
    COMPREPLY=( $(compgen -W "$opts" -- "$cur") )

    return 0
}
complete -F _boincmgr boincmgr


# vim: syntax=sh
-------------- next part --------------
# mysql(1) completion

have mysql &&
_mysql()
{
    local cur prev split=false

    COMPREPLY=()
    _get_comp_words_by_ref cur prev

    _split_longopt && split=true

    case $prev in
        -u|--user)
            COMPREPLY=( $( compgen -u -- "$cur" ) )
            return 0
            ;;
        -D|--database)
            COMPREPLY=( $( compgen -W "$(mysqlshow|sed -ne '2d' -e 's/^|.\([^|]\+\)|.*/\1/p')" -- "$cur" ) )
            return 0
            ;;

        -h|--host)
            _known_hosts_real "$cur"
            return 0
            ;;
        --default-character-set)
            [ -d /usr/share/mysql/charsets ] && \
                COMPREPLY=( $( compgen -W "$(command ls /usr/share/mysql/charsets|sed -e '/^\(README\|Index\.xml\)$/d' -e 's/.xml$//') utf8" -- "$cur" ) )
            return 0
            ;;

        --character-sets-dir|--ssl-capath)
            _filedir -d
            return 0
            ;;
        -S|--socket)
            _filedir sock
            return 0
            ;;
        --protocol)
            COMPREPLY=( $( compgen -W 'tcp socket pipe memory' -- "$cur" ) )
            return 0
            ;;
        --defaults-file|--defaults-extra-file|--tee)
            _filedir
            return 0
            ;;
        --default-character-set|-P|--port|--set-variable|\
        --ssl-ca|--ssl-cert|--ssl-cipher|--ssl-key|\
        --connect_timeout|max_allowed_packet|--prompt|\
	--net_buffer_length|--select_limit|--max_join_size|\
	--server-arg|--debug|--delimiter|--execute|-e|--pager)
            # Argument required but no completions available
            return 0
            ;;
        '-?'|-I|--help|-V|--version)
            # All other options are noop with these
            return 0
            ;;
    esac

    $split && return 0

    # generated from mysql 5.1.51 with
    # mysql --help|grep -woE -- '--[a-z0-9-]+'|sort -u|grep -v 'variable-name'
    COMPREPLY=( $( compgen -W '--auto-rehash --batch --character-sets-dir --column-names --column-type-info --comments --compress --database --debug --debug-check --debug-info --default-character-set --defaults-extra-file --defaults-file --delimiter --disable-auto-rehash --disable-named-commands --disable-pager --disable-reconnect --disable-tee --execute --force --help --host --html --i-am-a-dummy --ignore-spaces --line-numbers --local-infile --named-commands --no-auto-rehash --no-beep --no-defaults --no-named-commands --no-pager --no-tee --one-database --pager --password --port --print-defaults --prompt --protocol --quick --raw --reconnect --safe-updates --secure-auth --server-arg --set-variable --show-warnings --sigint-ignore --silent --skip-column-names --skip-comments --skip-line-numbers --skip-ssl --socket --ssl --ssl-ca --ssl-capath --ssl-cert --ssl-cipher --ssl-key --ssl-verify-server-cert --table --tee --unbuffered --user --verbose --version --vertical --wait --xml' -- "$cur" ) )
} &&
complete -F _mysql mysql

# Local variables:
# mode: shell-script
# sh-basic-offset: 4
# sh-indent-comment: t
# indent-tabs-mode: nil
# End:
# ex: ts=4 sw=4 et filetype=sh
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 490 bytes
Desc: not available
URL: <http://lists.alioth.debian.org/pipermail/bash-completion-devel/attachments/20110611/eace1541/attachment-0001.pgp>


More information about the Bash-completion-devel mailing list