##// END OF EJS Templates
Fix "templater object got multiple values for keyword argument 'motd'"...
Fix "templater object got multiple values for keyword argument 'motd'" caused by adding motd to the call to the index template (2896ce093ec4)

File last commit:

r2695:c995d683 default
r3479:bbfb392b default
Show More
bash_completion
390 lines | 8.0 KiB | application/x-sh | BashLexer
Alexis S. L. Carvalho
bash_completion: completion for commands provided by extensions...
r2041 # bash completion for the Mercurial distributed SCM
# Docs:
#
# If you source this file from your .bashrc, bash should be able to
# complete a command line that uses hg with all the available commands
# and options and sometimes even arguments.
#
# Mercurial allows you to define additional commands through extensions.
# Bash should be able to automatically figure out the name of these new
# commands and their options. If you also want to tell it how to
# complete non-option arguments, see below for how to define an
# _hg_cmd_foo function.
#
#
# Notes about completion for specific commands:
#
# - the completion function for the email command from the patchbomb
# extension will try to call _hg_emails to get a list of e-mail
# addresses. It's up to the user to define this function. For
# example, put the addresses of the lists that you usually patchbomb
# in ~/.patchbomb-to and the addresses that you usually use to send
# the patchbombs in ~/.patchbomb-from and use something like this:
#
# _hg_emails()
# {
# if [ -r ~/.patchbomb-$1 ]; then
# cat ~/.patchbomb-$1
# fi
# }
#
#
# Writing completion functions for additional commands:
#
# If it exists, the function _hg_cmd_foo will be called without
# arguments to generate the completion candidates for the hg command
# "foo".
#
# In addition to the regular completion variables provided by bash,
# the following variables are also set:
# - $hg - the hg program being used (e.g. /usr/bin/hg)
# - $cmd - the name of the hg command being completed
# - $cmd_index - the index of $cmd in $COMP_WORDS
# - $cur - the current argument being completed
# - $prev - the argument before $cur
# - $global_args - "|"-separated list of global options that accept
# an argument (e.g. '--cwd|-R|--repository')
# - $canonical - 1 if we canonicalized $cmd before calling the function
# 0 otherwise
#
TK Soh
bash_completion: extended patterns require extglob option
r1311 shopt -s extglob
mpm@selenic.com
Add bash_completion to contrib...
r916 _hg_commands()
{
Thomas Arendsen Hein
Make bash_completion more robust for e.g. broken hgrc or old hg installations.
r1888 local commands
commands="$("$hg" debugcomplete "$cur" 2>/dev/null)" || commands=""
Benoit Boissinot
new command debugcomplete...
r1887 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$commands' -- "$cur"))
mpm@selenic.com
Add bash_completion to contrib...
r916 }
_hg_paths()
{
Thomas Arendsen Hein
Cleanup of spacing in bash_completion
r1684 local paths="$("$hg" paths 2>/dev/null | sed -e 's/ = .*$//')"
COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$paths' -- "$cur"))
mpm@selenic.com
Add bash_completion to contrib...
r916 }
Daniel Kobras
Less annoying directory completion (see http://bugs.debian.org/343458)...
r1587 _hg_repos()
{
local i
Thomas Arendsen Hein
Cleanup of spacing in bash_completion
r1684 for i in $(compgen -d -- "$cur"); do
test ! -d "$i"/.hg || COMPREPLY=(${COMPREPLY[@]:-} "$i")
Daniel Kobras
Less annoying directory completion (see http://bugs.debian.org/343458)...
r1587 done
}
mpm@selenic.com
bash: Add smarter completion of add/commit/remove/forget/diff/revert...
r935 _hg_status()
{
Thomas Arendsen Hein
Cleanup of spacing in bash_completion
r1684 local files="$("$hg" status -n$1 . 2>/dev/null)"
COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$files' -- "$cur"))
mpm@selenic.com
bash: Add smarter completion of add/commit/remove/forget/diff/revert...
r935 }
mpm@selenic.com
Add bash_completion to contrib...
r916 _hg_tags()
{
Thomas Arendsen Hein
Make 'hg tags -q' only list tag names without revision numbers and hashes,...
r2035 local tags="$("$hg" tags -q 2>/dev/null)"
local IFS=$'\n'
Thomas Arendsen Hein
Cleanup of spacing in bash_completion
r1684 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$tags' -- "$cur"))
mpm@selenic.com
Add bash_completion to contrib...
r916 }
# this is "kind of" ugly...
_hg_count_non_option()
{
local i count=0
local filters="$1"
Thomas Arendsen Hein
Cleanup of spacing in bash_completion
r1684 for ((i=1; $i<=$COMP_CWORD; i++)); do
mpm@selenic.com
Add bash_completion to contrib...
r916 if [[ "${COMP_WORDS[i]}" != -* ]]; then
Alexis S. L. Carvalho
bash_completion: small cleanup and bugfix...
r1152 if [[ ${COMP_WORDS[i-1]} == @($filters|$global_args) ]]; then
continue
fi
mpm@selenic.com
Add bash_completion to contrib...
r916 count=$(($count + 1))
fi
done
echo $(($count - 1))
}
_hg()
{
Alexis S. L. Carvalho
bash_completion: completion for commands provided by extensions...
r2041 local cur prev cmd cmd_index opts i
Alexis S. L. Carvalho
teach bash_completion about --cwd
r1151 # global options that receive an argument
local global_args='--cwd|-R|--repository'
Thomas Arendsen Hein
Use user specified path to hg in bash_completion...
r1683 local hg="$1"
mpm@selenic.com
Add bash_completion to contrib...
r916
COMPREPLY=()
cur="$2"
prev="$3"
Thomas Arendsen Hein
Cleanup of tabs and trailing spaces.
r1308 # searching for the command
Alexis S. L. Carvalho
teach bash_completion about --cwd
r1151 # (first non-option argument that doesn't follow a global option that
# receives an argument)
Thomas Arendsen Hein
Cleanup of spacing in bash_completion
r1684 for ((i=1; $i<=$COMP_CWORD; i++)); do
Alexis S. L. Carvalho
teach bash_completion about --cwd
r1151 if [[ ${COMP_WORDS[i]} != -* ]]; then
if [[ ${COMP_WORDS[i-1]} != @($global_args) ]]; then
cmd="${COMP_WORDS[i]}"
Alexis S. L. Carvalho
bash_completion: completion for commands provided by extensions...
r2041 cmd_index=$i
Alexis S. L. Carvalho
teach bash_completion about --cwd
r1151 break
fi
mpm@selenic.com
Add bash_completion to contrib...
r916 fi
done
if [[ "$cur" == -* ]]; then
Alexis S. L. Carvalho
add --options to debugcomplete and change bash_completion to use it...
r2034 opts=$("$hg" debugcomplete --options "$cmd" 2>/dev/null)
mpm@selenic.com
Add bash_completion to contrib...
r916
Thomas Arendsen Hein
Cleanup of spacing in bash_completion
r1684 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$opts' -- "$cur"))
mpm@selenic.com
Add bash_completion to contrib...
r916 return
fi
Alexis S. L. Carvalho
teach bash_completion about --cwd
r1151 # global options
case "$prev" in
-R|--repository)
Daniel Kobras
Less annoying directory completion (see http://bugs.debian.org/343458)...
r1587 _hg_repos
Alexis S. L. Carvalho
teach bash_completion about --cwd
r1151 return
;;
--cwd)
Daniel Kobras
Less annoying directory completion (see http://bugs.debian.org/343458)...
r1587 # Stick with default bash completion
Alexis S. L. Carvalho
teach bash_completion about --cwd
r1151 return
;;
esac
mpm@selenic.com
Add bash_completion to contrib...
r916
if [ -z "$cmd" ] || [ $COMP_CWORD -eq $i ]; then
_hg_commands
return
fi
Alexis S. L. Carvalho
bash_completion: small optimization...
r2039 # try to generate completion candidates for whatever command the user typed
local help
local canonical=0
if _hg_command_specific; then
return
fi
Alexis S. L. Carvalho
bash_completion: better handling of aliases...
r1150
Alexis S. L. Carvalho
bash_completion: small optimization...
r2039 # canonicalize the command name and try again
help=$("$hg" help "$cmd" 2>/dev/null)
if [ $? -ne 0 ]; then
# Probably either the command doesn't exist or it's ambiguous
mpm@selenic.com
Add bash_completion to contrib...
r916 return
fi
Alexis S. L. Carvalho
bash_completion: small optimization...
r2039 cmd=${help#hg }
cmd=${cmd%%[$' \n']*}
canonical=1
_hg_command_specific
}
_hg_command_specific()
{
Alexis S. L. Carvalho
bash_completion: completion for commands provided by extensions...
r2041 if [ "$(type -t "_hg_cmd_$cmd")" = function ]; then
"_hg_cmd_$cmd"
return 0
fi
Alexis S. L. Carvalho
bash_completion: small optimization...
r2039 if [ "$cmd" != status ] && [ "$prev" = -r ] || [ "$prev" == --rev ]; then
if [ $canonical = 1 ]; then
_hg_tags
return 0
elif [[ status != "$cmd"* ]]; then
_hg_tags
return 0
else
return 1
fi
fi
mpm@selenic.com
Add bash_completion to contrib...
r916
case "$cmd" in
help)
_hg_commands
;;
Alexis S. L. Carvalho
bash_completion: better handling of aliases...
r1150 export|manifest|update)
mpm@selenic.com
Add bash_completion to contrib...
r916 _hg_tags
;;
Alexis S. L. Carvalho
bash_completion: better handling of aliases...
r1150 pull|push|outgoing|incoming)
mpm@selenic.com
Add bash_completion to contrib...
r916 _hg_paths
Daniel Kobras
Less annoying directory completion (see http://bugs.debian.org/343458)...
r1587 _hg_repos
mpm@selenic.com
Add bash_completion to contrib...
r916 ;;
paths)
_hg_paths
;;
mpm@selenic.com
bash: Add smarter completion of add/commit/remove/forget/diff/revert...
r935 add)
_hg_status "u"
;;
Alexis S. L. Carvalho
bash_completion: better handling of aliases...
r1150 commit)
Thomas Arendsen Hein
_hg_status improvements in bash_completion:...
r1639 _hg_status "mar"
mpm@selenic.com
bash: Add smarter completion of add/commit/remove/forget/diff/revert...
r935 ;;
remove)
Thomas Arendsen Hein
_hg_status improvements in bash_completion:...
r1639 _hg_status "d"
mpm@selenic.com
bash: Add smarter completion of add/commit/remove/forget/diff/revert...
r935 ;;
forget)
_hg_status "a"
;;
diff)
Thomas Arendsen Hein
_hg_status improvements in bash_completion:...
r1639 _hg_status "mar"
mpm@selenic.com
bash: Add smarter completion of add/commit/remove/forget/diff/revert...
r935 ;;
revert)
Thomas Arendsen Hein
_hg_status improvements in bash_completion:...
r1639 _hg_status "mard"
mpm@selenic.com
bash: Add smarter completion of add/commit/remove/forget/diff/revert...
r935 ;;
mpm@selenic.com
Add bash_completion to contrib...
r916 clone)
local count=$(_hg_count_non_option)
if [ $count = 1 ]; then
_hg_paths
fi
Thomas Arendsen Hein
Cleanup of spacing in bash_completion
r1684 _hg_repos
mpm@selenic.com
Add bash_completion to contrib...
r916 ;;
mpm@selenic.com
bash_completion: add debugindex and debugdata support
r1115 debugindex|debugindexdot)
Thomas Arendsen Hein
Cleanup of spacing in bash_completion
r1684 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -f -X "!*.i" -- "$cur"))
mpm@selenic.com
bash_completion: add debugindex and debugdata support
r1115 ;;
debugdata)
Thomas Arendsen Hein
Cleanup of spacing in bash_completion
r1684 COMPREPLY=(${COMPREPLY[@]:-} $(compgen -f -X "!*.d" -- "$cur"))
mpm@selenic.com
bash_completion: add debugindex and debugdata support
r1115 ;;
Alexis S. L. Carvalho
bash_completion: small optimization...
r2039 *)
return 1
;;
mpm@selenic.com
Add bash_completion to contrib...
r916 esac
Alexis S. L. Carvalho
bash_completion: small optimization...
r2039 return 0
mpm@selenic.com
Add bash_completion to contrib...
r916 }
Thomas Arendsen Hein
Cleanup of spacing in bash_completion
r1684 complete -o bashdefault -o default -F _hg hg 2>/dev/null \
Alexis S. L. Carvalho
bash_completion: try to use bash3 features if they're available...
r1153 || complete -o default -F _hg hg
Alexis S. L. Carvalho
bash_completion: completion for commands provided by extensions...
r2041
# Completion for commands provided by extensions
# mq
_hg_ext_mq_patchlist()
{
local patches=$("$hg" $1 2>/dev/null)
COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$patches' -- "$cur"))
}
_hg_ext_mq_queues()
{
local root=$("$hg" root 2>/dev/null)
local n
for n in $(cd "$root"/.hg && compgen -d -- "$cur"); do
# I think we're usually not interested in the regular "patches" queue
# so just filter it.
if [ "$n" != patches ] && [ -e "$root/.hg/$n/series" ]; then
COMPREPLY=(${COMPREPLY[@]:-} "$n")
fi
done
}
_hg_cmd_qpop()
{
if [[ "$prev" = @(-n|--name) ]]; then
_hg_ext_mq_queues
return
fi
_hg_ext_mq_patchlist qapplied
}
_hg_cmd_qpush()
{
if [[ "$prev" = @(-n|--name) ]]; then
_hg_ext_mq_queues
return
fi
_hg_ext_mq_patchlist qunapplied
}
_hg_cmd_qdelete()
{
"Mathieu Clabaut "
Improve bash_completion for patches in MQ
r2695 _hg_ext_mq_patchlist qunapplied
Alexis S. L. Carvalho
bash_completion: completion for commands provided by extensions...
r2041 }
_hg_cmd_qsave()
{
if [[ "$prev" = @(-n|--name) ]]; then
_hg_ext_mq_queues
return
fi
}
_hg_cmd_strip()
{
_hg_tags
}
_hg_cmd_qcommit()
{
local root=$("$hg" root 2>/dev/null)
# this is run in a sub-shell, so we can't use _hg_status
local files=$(cd "$root/.hg/patches" 2>/dev/null &&
"$hg" status -nmar 2>/dev/null)
COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$files' -- "$cur"))
}
"Mathieu Clabaut "
Improve bash_completion for patches in MQ
r2695 _hg_cmd_export()
{
_hg_ext_mq_patchlist qapplied
}
Alexis S. L. Carvalho
bash_completion: completion for commands provided by extensions...
r2041
# hbisect
_hg_cmd_bisect()
{
local i subcmd
# find the sub-command
for ((i=cmd_index+1; i<=COMP_CWORD; i++)); do
if [[ ${COMP_WORDS[i]} != -* ]]; then
if [[ ${COMP_WORDS[i-1]} != @($global_args) ]]; then
subcmd="${COMP_WORDS[i]}"
break
fi
fi
done
if [ -z "$subcmd" ] || [ $COMP_CWORD -eq $i ] || [ "$subcmd" = help ]; then
COMPREPLY=(${COMPREPLY[@]:-}
$(compgen -W 'bad good help init next reset' -- "$cur"))
return
fi
case "$subcmd" in
good|bad)
_hg_tags
;;
esac
return
}
# patchbomb
_hg_cmd_email()
{
case "$prev" in
-c|--cc|-t|--to|-f|--from)
# we need an e-mail address. let the user provide a function
# to get them
if [ "$(type -t _hg_emails)" = function ]; then
local arg=to
if [[ "$prev" == @(-f|--from) ]]; then
arg=from
fi
local addresses=$(_hg_emails $arg)
COMPREPLY=(${COMPREPLY[@]:-}
$(compgen -W '$addresses' -- "$cur"))
fi
return
;;
-m|--mbox)
# fallback to standard filename completion
return
;;
-s|--subject)
# free form string
return
;;
esac
_hg_tags
return
}
# gpg
_hg_cmd_sign()
{
_hg_tags
}