From: Ted Pavlic <ted@xxxxxxxxxxxxx> Signed-off-by: Ted Pavlic <ted@xxxxxxxxxxxxx> --- contrib/completion/stg-completion.bash | 106 ++++++++++++++++++++++++++++++++ 1 files changed, 106 insertions(+), 0 deletions(-) create mode 100755 contrib/completion/stg-completion.bash diff --git a/contrib/completion/stg-completion.bash b/contrib/completion/stg-completion.bash new file mode 100755 index 0000000..13cc792 --- /dev/null +++ b/contrib/completion/stg-completion.bash @@ -0,0 +1,106 @@ +#!bash +# +# bash completion support for Stacked Git (StGit). +# +# Copyright (c) 2009 by Theodore P. Pavlic <ted@xxxxxxxxxxxxx> +# Distributed under the GNU General Public License, version 2.0. +# +# Design is highly influenced by completion scripts for Mercurial and +# git. +# +# To use these routines: +# +# 1) Copy this file to somewhere (e.g. ~/.stg-completion.sh). +# 2) Added the following line to your .bashrc or .bash_profile: +# source ~/.stg-completion.sh +# +# To submit patches: +# +# *) Read Documentation/SubmittingPatches +# *) Send all patches to the Git mailing list +# +# git@xxxxxxxxxxxxxxx +# +# and CC the message to the StGit maintainer +# +# catalin.marinas@xxxxxxxxx +# +# Prefix the subject with something like "[StGit PATCH]", +# "[StGit PATCH i/n]", "[StGit PATCH RFC]", or similar. Patches +# should be "Signed-off-by:" you as described in +# Documentation/SubmittingPatches. +# +# It is recommended that editors submit patches using utilities +# like +# +# stg mail +# git send-email +# git format-patch +# +# In the latter case, make sure e-amils submitted to the list do +# not have "format=flowed" and do not "word wrap" your patch. +# + +# This 'extglob' bash option allows for +# if [[ $param == @(-h|--help) ]] +# type statements. That is, the pattern is true if $param matches -h OR +# --help +shopt -s extglob + +__stg_commands() +{ + local commands + commands="$("$stg" help|grep '^ '|cut -f3 -d' ' 2>/dev/null)" || commands="" + COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$commands' -- "$cur")) +} + +__stg() +{ + local cur prev cmd + local stg="$1" + + COMPREPLY=() + cur="$2" + prev="$3" + + if [ $COMP_CWORD -gt 1 ]; then + # Try to complete the argument to an already complete stg command + # (e.g., "stg command partial<tab>") + cmd=${COMP_WORDS[${COMP_CWORD}-1]} + __stg_specific_command + else + # Try to complete an incomplete stg command (possibly blank) + # (e.g., "stg partial<tab>") + __stg_commands + fi + +} + +# Handle "stg command <tab>" completion +__stg_specific_command() +{ + # Here, try to find (possibly user-defined) functions that match the + # command + if [ "$(type -t "__stg_cmd_$cmd")" = function ]; then + "__stg_cmd_$cmd" + return 0 + fi + + # Special handling of particular stg commands can be placed here + case "$cmd" in + help) + # Complete help with all possible help commands + __stg_commands + ;; + *) + # Bail out to normal bash completion + return 1 + ;; + esac + + return 0 +} + +# Use __stg for stg completion and bail out to normal bash completion +complete -o bashdefault -o default -F __stg stg 2>/dev/null \ + || complete -o default -F __stg stg -- 1.6.1.87.g15624 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html