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
57 # The path to .git, or empty if we're not in a repository.
60 echo "$(git rev-parse --git-dir 2>/dev/null)"
63 # Name of the current branch, or empty if there isn't one.
66 local b
=$
(git symbolic-ref HEAD
2>/dev
/null
)
70 # List of all applied patches.
74 [ "$g" ] && cat "$g/patches/$(_current_branch)/applied"
77 # List of all unapplied patches.
81 [ "$g" ] && cat "$g/patches/$(_current_branch)/unapplied"
84 # List of all patches.
87 local b
=$
(_current_branch
)
89 [ "$g" ] && cat "$g/patches/$b/applied" "$g/patches/$b/unapplied"
92 # List of all patches except the current patch.
95 local b
=$
(_current_branch
)
97 [ "$g" ] && cat "$g/patches/$b/applied" "$g/patches/$b/unapplied" \
98 |
grep -v
"^$(cat $g/patches/$b/current 2> /dev/null)$"
101 # List the command options
104 stg
$1 --help 2>/dev
/null |
grep -e
" --[A-Za-z]" |
sed -e
"s/.*\(--[^ =]\+\).*/\1/"
107 # Generate completions for patches and patch ranges from the given
108 # patch list function, and options from the given list.
109 _complete_patch_range
()
111 local patchlist
="$1" options
="$2"
112 local pfx cur
="${COMP_WORDS[COMP_CWORD]}"
117 COMPREPLY
=($
(compgen
-P
"$pfx" -W
"$($patchlist)" -- "$cur"))
120 COMPREPLY
=($
(compgen
-W
"$options $($patchlist)" -- "$cur"))
125 _complete_patch_range_options
()
127 local patchlist
="$1" options
="$2" patch_options
="$3"
128 local prev
="${COMP_WORDS[COMP_CWORD-1]}"
129 local cur
="${COMP_WORDS[COMP_CWORD]}"
131 for popt
in $patch_options; do
132 if [ $prev == $popt ]; then
133 _complete_patch_range
$patchlist
137 COMPREPLY
=($
(compgen
-W
"$options" -- "$cur"))
140 # Generate completions for options from the given list.
144 COMPREPLY
=($
(compgen
-W
"$options" -- "${COMP_WORDS[COMP_CWORD]}"))
149 _complete_options
"$(_cmd_options $1)"
154 _complete_patch_range
"$2" "$(_cmd_options $1)"
157 _stg_patches_options
()
159 _complete_patch_range_options
"$2" "$(_cmd_options $1)" "$3"
164 _complete_options
"$_stg_commands"
171 while [ $c -lt
$COMP_CWORD ]; do
173 command="${COMP_WORDS[c]}"
178 # Complete name of subcommand.
179 if [ $c -eq
$COMP_CWORD -a
-z
"$command" ]; then
180 COMPREPLY
=($
(compgen \
181 -W
"--help --version copyright help $_stg_commands" \
182 -- "${COMP_WORDS[COMP_CWORD]}"))
186 # Complete arguments to subcommands.
190 # repository commands
191 id
) _stg_patches
$command _all_patches
;;
193 bury
) _stg_patches
$command _all_patches
;;
194 float
) _stg_patches
$command _all_patches
;;
195 goto
) _stg_patches
$command _all_other_patches
;;
196 hide
) _stg_patches
$command _all_patches
;;
197 pop
) _stg_patches
$command _applied_patches
;;
198 push
) _stg_patches
$command _unapplied_patches
;;
199 series
) _stg_patches
$command _all_patches
;;
200 unhide
) _stg_patches
$command _all_patches
;;
202 delete
) _stg_patches
$command _all_patches
;;
203 export) _stg_patches
$command _applied_patches
;;
204 files
) _stg_patches
$command _all_patches
;;
205 log
) _stg_patches
$command _all_patches
;;
206 mail) _stg_patches
$command _all_patches
;;
207 pick
) _stg_patches
$command _unapplied_patches
;;
208 refresh
)_stg_patches_options
$command _applied_patches
"-p --patch" ;;
209 rename
) _stg_patches
$command _all_patches
;;
210 show
) _stg_patches
$command _all_patches
;;
211 sync
) _stg_patches
$command _applied_patches
;;
212 # working-copy commands
213 diff) _stg_patches_options
$command _applied_patches
"-r --range" ;;
214 # all the other commands
215 *) _stg_common
$command ;;
219 complete
-o default
-F _stg stg