annotate contrib/bash_completion @ 935:925563ff1b18

bash: Add smarter completion of add/commit/remove/forget/diff/revert Use hg status to determine which files are interesting for various commands. Thus, hg add [tab] finds unknown files, and hg commit [tab] finds added, modified, or removed files.
author mpm@selenic.com
date Wed, 17 Aug 2005 12:22:12 -0800
parents 26bb67b7ec14
children f15901d053e1 6d21a3488df9 ffb0665028f0 dbfabfcb485e 4f81068ed8cd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
916
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
1 _hg_commands()
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
2 {
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
3 local commands="$(hg -v help | sed -e '1,/^list of commands:/d' \
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
4 -e '/^global options:/Q' \
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
5 -e '/^ [^ ]/!d; s/[,:]//g;')"
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
6
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
7 # hide debug commands from users, but complete them if
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
8 # specifically asked for
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
9 if [[ "$cur" == de* ]]; then
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
10 commands="$commands debugcheckstate debugstate debugindex"
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
11 commands="$commands debugindexdot debugwalk"
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
12 fi
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
13 COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "$commands" -- "$cur") )
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
14 }
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
15
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
16 _hg_paths()
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
17 {
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
18 local paths="$(hg paths | sed -e 's/ = .*$//')"
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
19 COMPREPLY=(${COMPREPLY[@]:-} $( compgen -W "$paths" -- "$cur" ))
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
20 }
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
21
935
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
22 _hg_status()
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
23 {
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
24 local files="$( hg status -$1 | cut -b 3- )"
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
25 COMPREPLY=(${COMPREPLY[@]:-} $( compgen -W "$files" -- "$cur" ))
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
26 }
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
27
916
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
28 _hg_tags()
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
29 {
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
30 local tags="$(hg tags | sed -e 's/[0-9]*:[a-f0-9]\{40\}$//; s/ *$//')"
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
31 COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "$tags" -- "$cur") )
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
32 }
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
33
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
34 # this is "kind of" ugly...
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
35 _hg_count_non_option()
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
36 {
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
37 local i count=0
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
38 local filters="$1"
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
39
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
40 for (( i=1; $i<=$COMP_CWORD; i++ )); do
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
41 if [[ "${COMP_WORDS[i]}" != -* ]]; then
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
42 for f in $filters; do
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
43 if [[ ${COMP_WORDS[i-1]} == $f ]]; then
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
44 continue 2
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
45 fi
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
46 done
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
47 count=$(($count + 1))
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
48 fi
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
49 done
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
50
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
51 echo $(($count - 1))
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
52 }
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
53
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
54 _hg()
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
55 {
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
56 local cur prev cmd opts i
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
57
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
58 COMPREPLY=()
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
59 cur="$2"
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
60 prev="$3"
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
61
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
62 # searching for the command
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
63 # (first non-option argument that doesn't follow -R/--repository)
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
64 for (( i=1; $i<=$COMP_CWORD; i++ )); do
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
65 if [[ ${COMP_WORDS[i]} != -* ]] \
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
66 && [ "${COMP_WORDS[i-1]}" != -R ] \
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
67 && [ "${COMP_WORDS[i-1]}" != --repository ]; then
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
68 cmd="${COMP_WORDS[i]}"
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
69 break
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
70 fi
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
71 done
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
72
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
73 if [[ "$cur" == -* ]]; then
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
74 opts="$(hg -v help | sed -e '1,/^global options/d; /^ -/!d')"
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
75
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
76 if [ -n "$cmd" ]; then
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
77 opts="$opts $(hg help "$cmd" | sed -e '/^ -/!d; s/ [^-][^ ]*//')"
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
78 fi
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
79
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
80 COMPREPLY=( ${COMPREPLY[@]:-} $(compgen -W "$opts" -- "$cur") )
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
81 return
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
82 fi
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
83
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
84 if [ "$prev" = -R ] || [ "$prev" = --repository ]; then
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
85 COMPREPLY=(${COMPREPLY[@]:-} $( compgen -d -- "$cur" ))
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
86 return
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
87 fi
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
88
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
89 if [ -z "$cmd" ] || [ $COMP_CWORD -eq $i ]; then
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
90 _hg_commands
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
91 return
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
92 fi
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
93
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
94 if [ "$cmd" != status ] && [ "$prev" = -r ] || [ "$prev" = --rev ]; then
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
95 _hg_tags
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
96 return
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
97 fi
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
98
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
99 case "$cmd" in
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
100 help)
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
101 _hg_commands
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
102 ;;
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
103 export|manifest|update|checkout|up|co)
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
104 _hg_tags
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
105 ;;
929
26bb67b7ec14 Add incoming to completions
mpm@selenic.com
parents: 922
diff changeset
106 pull|push|outgoing|incoming)
916
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
107 _hg_paths
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
108 COMPREPLY=(${COMPREPLY[@]:-} $( compgen -d -- "$cur" ))
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
109 ;;
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
110 paths)
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
111 _hg_paths
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
112 ;;
935
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
113 add)
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
114 _hg_status "u"
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
115 ;;
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
116 commit)
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
117 _hg_status "mra"
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
118 ;;
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
119 remove)
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
120 _hg_status "r"
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
121 ;;
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
122 forget)
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
123 _hg_status "a"
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
124 ;;
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
125 diff)
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
126 _hg_status "mra"
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
127 ;;
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
128 revert)
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
129 _hg_status "mra"
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
130 ;;
916
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
131 clone)
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
132 local count=$(_hg_count_non_option)
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
133 if [ $count = 1 ]; then
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
134 _hg_paths
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
135 fi
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
136 COMPREPLY=(${COMPREPLY[@]:-} $( compgen -d -- "$cur" ))
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
137 ;;
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
138 cat)
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
139 local count=$(_hg_count_non_option -o --output)
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
140 if [ $count = 2 ]; then
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
141 _hg_tags
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
142 else
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
143 COMPREPLY=(${COMPREPLY[@]:-} $( compgen -f -- "$cur" ))
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
144 fi
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
145 ;;
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
146 *)
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
147 COMPREPLY=(${COMPREPLY[@]:-} $( compgen -f -- "$cur" ))
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
148 ;;
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
149 esac
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
150
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
151 }
fe094cca9915 Add bash_completion to contrib
mpm@selenic.com
parents:
diff changeset
152
935
925563ff1b18 bash: Add smarter completion of add/commit/remove/forget/diff/revert
mpm@selenic.com
parents: 929
diff changeset
153 complete -o default -F _hg hg