1 # bash completion support for StGIT -*- shell-script -*-
3 # Copyright (C) 2006, Karl Hasselström <kha@treskal.com>
4 # Based on git-completion.sh
6 # To use these routines:
8 # 1. Copy this file to somewhere (e.g. ~/.stgit-completion.bash).
10 # 2. Add the following line to your .bashrc:
11 # . ~/.stgit-completion.bash
51 # The path to .git, or empty if we're not in a repository.
54 echo "$(git rev-parse --git-dir 2>/dev/null)"
57 # Name of the current branch, or empty if there isn't one.
60 local b=$(git symbolic-ref HEAD 2>/dev/null)
64 # List of all applied patches.
68 [ "$g" ] && cat "$g/patches/$(_current_branch)/applied"
71 # List of all unapplied patches.
75 [ "$g" ] && cat "$g/patches/$(_current_branch)/unapplied"
78 # List of all patches.
81 local b=$(_current_branch)
83 [ "$g" ] && cat "$g/patches/$b/applied" "$g/patches/$b/unapplied"
86 # List of all patches except the current patch.
89 local b=$(_current_branch)
91 [ "$g" ] && cat "$g/patches/$b/applied" "$g/patches/$b/unapplied" \
92 | grep -v "^$(< $g/patches/$b/current)$"
95 # List the command options
98 stg $1 --help | grep -e " --[A-Za-z]" | sed -e "s/.*\(--[^ =]\+\).*/\1/"
101 # Generate completions for patches and patch ranges from the given
102 # patch list function, and options from the given list.
103 _complete_patch_range ()
105 local patchlist="$1" options="$2"
106 local pfx cur="${COMP_WORDS[COMP_CWORD]}"
111 COMPREPLY=($(compgen -P "$pfx" -W "$($patchlist)" -- "$cur"))
114 COMPREPLY=($(compgen -W "$options $($patchlist)" -- "$cur"))
119 _complete_patch_range_options ()
121 local patchlist="$1" options="$2" patch_options="$3"
122 local prev="${COMP_WORDS[COMP_CWORD-1]}"
123 local cur="${COMP_WORDS[COMP_CWORD]}"
125 for popt in $patch_options; do
126 if [ $prev == $popt ]; then
127 _complete_patch_range $patchlist
131 COMPREPLY=($(compgen -W "$options" -- "$cur"))
134 # Generate completions for options from the given list.
138 COMPREPLY=($(compgen -W "$options" -- "${COMP_WORDS[COMP_CWORD]}"))
143 _complete_options "$(_cmd_options $1)"
148 _complete_patch_range "$2" "$(_cmd_options $1)"
151 _stg_patches_options ()
153 _complete_patch_range_options "$2" "$(_cmd_options $1)" "$3"
158 _complete_options "$_stg_commands"
165 while [ $c -lt $COMP_CWORD ]; do
167 command="${COMP_WORDS[c]}"
172 # Complete name of subcommand.
173 if [ $c -eq $COMP_CWORD -a -z "$command" ]; then
174 COMPREPLY=($(compgen \
175 -W "--help --version copyright help $_stg_commands" \
176 -- "${COMP_WORDS[COMP_CWORD]}"))
180 # Complete arguments to subcommands.
184 # repository commands
185 id) _stg_patches $command _all_patches ;;
187 float) _stg_patches $command _all_patches ;;
188 goto) _stg_patches $command _all_other_patches ;;
189 pop) _stg_patches $command _applied_patches ;;
190 push) _stg_patches $command _unapplied_patches ;;
192 delete) _stg_patches $command _all_patches ;;
193 export) _stg_patches_options $command _applied_patches "-r --range" ;;
194 files) _stg_patches $command _all_patches ;;
195 log) _stg_patches $command _all_patches ;;
196 mail) _stg_patches $command _applied_patches ;;
197 pick) _stg_patches $command _unapplied_patches ;;
198 refresh)_stg_patches_options $command _applied_patches "-p --patch" ;;
199 rename) _stg_patches $command _all_patches ;;
200 show) _stg_patches $command _all_patches ;;
201 # working-copy commands
202 diff) _stg_patches_options $command _applied_patches "-r --range" ;;
203 # all the other commands
204 *) _stg_common $command ;;
208 complete -o default -F _stg stg