2 # bash completion support for tig
4 # Copyright (C) 2007 Jonas fonseca
5 # Copyright (C) 2006,2007 Shawn Pearce
7 # Based git's git-completion.sh: http://repo.or.cz/w/git/fastimport.git
9 # The contained completion routines provide support for completing:
11 # *) local and remote branch names
12 # *) local and remote tag names
13 # *) tig 'subcommands'
14 # *) tree paths within 'ref:path/to/file' expressions
16 # To use these routines:
18 # 1) Copy this file to somewhere (e.g. ~/.tig-completion.sh).
19 # 2) Added the following line to your .bashrc:
20 # source ~/.tig-completion.sh
22 # 3) You may want to make sure the git executable is available
23 # in your PATH before this script is sourced, as some caching
24 # is performed while the script loads. If git isn't found
25 # at source time then all lookups will be done on demand,
26 # which may be slightly slower.
32 if [ -n
"$__git_dir" ]; then
34 elif [ -d .git
]; then
37 git rev-parse
--git-dir
2>/dev
/null
39 elif [ -d
"$1/.git" ]; then
48 local all c s
=$
'\n' IFS
=' '$
'\t'$
'\n'
49 local cur
="${COMP_WORDS[COMP_CWORD]}"
55 --*=*) all
="$all$c$4$s" ;;
56 *.
) all
="$all$c$4$s" ;;
57 *) all
="$all$c$4 $s" ;;
61 COMPREPLY
=($
(compgen
-P
"$2" -W
"$all" -- "$cur"))
67 local cmd i is_hash
=y dir
="$(__tigdir "$1")"
68 if [ -d
"$dir" ]; then
69 if [ -e
"$dir/HEAD" ]; then echo HEAD
; fi
70 for i
in $
(git
--git-dir
="$dir" \
71 for-each-ref
--format
='%(refname)' \
72 refs
/tags refs
/heads refs
/remotes
); do
74 refs
/tags
/*) echo "${i#refs/tags/}" ;;
75 refs
/heads
/*) echo "${i#refs/heads/}" ;;
76 refs
/remotes
/*) echo "${i#refs/remotes/}" ;;
82 for i
in $
(git-ls-remote
"$dir" 2>/dev
/null
); do
86 n
,refs
/tags
/*) is_hash
=y
; echo "${i#refs/tags/}" ;;
87 n
,refs
/heads
/*) is_hash
=y
; echo "${i#refs/heads/}" ;;
88 n
,refs
/remotes
/*) is_hash
=y
; echo "${i#refs/remotes/}" ;;
89 n
,*) is_hash
=y
; echo "$i" ;;
94 __tig_complete_file
()
96 local pfx
ls ref cur
="${COMP_WORDS[COMP_CWORD]}"
112 COMPREPLY
=($
(compgen
-P
"$pfx" \
113 -W
"$(git --git-dir="$
(__tigdir
)" ls-tree "$ls" \
114 | sed '/^100... blob /s,^.* ,,
123 tigcomp
"$(__tig_refs)"
128 __tig_complete_revlist
()
130 local pfx cur
="${COMP_WORDS[COMP_CWORD]}"
135 tigcomp
"$(__tig_refs)" "$pfx" "$cur"
140 tigcomp
"$(__tig_refs)" "$pfx" "$cur"
146 tigcomp
"$(__tig_refs)"
158 local cur
="${COMP_WORDS[COMP_CWORD]}"
162 oneline short medium full fuller email raw
163 " "" "${cur##--pretty=}"
168 --max-count= --max-age= --since= --after=
169 --min-age= --before= --until=
170 --root --not --topo-order --date-order
172 --abbrev-commit --abbrev=
174 --author= --committer= --grep=
176 --pretty= --name-status --name-only
182 __tig_complete_revlist
187 local cur
="${COMP_WORDS[COMP_CWORD]}"
191 oneline short medium full fuller email raw
192 " "" "${cur##--pretty=}"
205 local i c
=1 command __tig_dir
207 while [ $c -lt
$COMP_CWORD ]; do
210 --) command="log"; break;;
212 *) command="$i"; break ;;
217 if [ $c -eq
$COMP_CWORD -a
-z
"$command" ]; then
218 case "${COMP_WORDS[COMP_CWORD]}" in
219 --*=*) COMPREPLY
=() ;;
221 --line-number= --tab-size= --version --help
224 *) __gitcomp
"log diff show $(__tig_refs)" ;;
234 $(__tig_complete_file)
240 complete
-o default
-o nospace
-F _tig tig
242 # The following are necessary only for Cygwin, and only are needed
243 # when the user has tab-completed the executable name and consequently
244 # included the '.exe' suffix.
245 if [ Cygwin
= "$(uname -o 2>/dev/null)" ]; then
246 complete
-o default
-o nospace
-F _tig tig.exe