[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