1#####
2#From: ian@linuxcare.com (Ian Macdonald)
3#Newsgroups: comp.unix.shell
4#Subject: More bash 2.04 completions
5#Date: 12 Aug 2000 09:53:40 GMT
6#Organization: Linuxcare, Inc.
7#Lines: 274
8#Message-ID: <slrn8pa7l2.jgm.ian@lovelorn.linuxcare.com>
9#Reply-To: ian@linuxcare.com
10#####
11
12# Turn on extended globbing
13shopt -s extglob
14
15# cvs(1) completion
16#
17_cvs ()
18{
19	local cur prev
20
21        COMPREPLY=()
22        cur=${COMP_WORDS[COMP_CWORD]}
23        prev=${COMP_WORDS[COMP_CWORD-1]}
24
25	if [ $COMP_CWORD -eq 1 ] || [ "${prev:0:1}" = "-" ]; then
26		COMPREPLY=( $( compgen -W 'add admin checkout commit diff \
27		export history import log rdiff release remove rtag status \
28		tag update' $cur ))
29	else
30		COMPREPLY=( $( compgen -f $cur ))
31	fi
32	return 0
33}
34complete -F _cvs cvs
35
36# rpm(8) completion. This isn't exhaustive yet, but still provides
37# quite a lot of functionality.
38# 
39_rpm()
40{
41	dashify()
42	{
43		local i
44
45		for (( i=0; i < ${#COMPREPLY[@]}; i++ )); do
46			if [ ${#COMPREPLY[i]} -le 2 ]; then
47				COMPREPLY[i]=-${COMPREPLY[i]}
48			else
49				COMPREPLY[i]=--${COMPREPLY[i]}
50			fi
51		done
52	}
53
54	local cur cur_nodash prev
55
56        COMPREPLY=()
57        cur=${COMP_WORDS[COMP_CWORD]}
58	cur_nodash=${cur#-}
59        prev=${COMP_WORDS[COMP_CWORD-1]}
60
61	if [ $COMP_CWORD = 1 ]; then
62		# first parameter on line
63		case "$cur" in
64		-b*)
65			COMPREPLY=( $( compgen -W 'ba bb bc bi bl bp bs' \
66				       $cur_nodash ) )
67			dashify
68			return 0
69			;;
70		-t*)
71			COMPREPLY=( $( compgen -W 'ta tb tc ti tl tp ts' \
72				       $cur_nodash ) )
73			dashify
74			return 0
75			;;
76		--*)
77			COMPREPLY=( $( compgen -W 'help version initdb \
78			checksig recompile rebuild resign addsign rebuilddb \
79			showrc setperms setgids' ${cur_nodash#-} ) )
80			dashify;
81			return 0
82			;;
83		*)
84			COMPREPLY=( $( compgen -W 'b e F i q t U V' \
85				       $cur_nodash ) )
86			dashify
87			return 0
88			;;
89		esac
90	fi
91
92	case "${COMP_WORDS[1]}" in
93	-[iFU]*)
94		# complete on list of relevant options
95		COMPREPLY=( $( compgen -W 'percent force test replacepkgs \
96		replacefiles root excludedocs includedocs noscripts rcfile \
97		ignorearch dbpath prefix ignoreos nodeps allfiles ftpproxy \
98		ftpport justdb httpproxy httpport noorder relocate badreloc \
99		notriggers excludepath ignoresize oldpackage' ${cur_nodash#-} ))
100		dashify;
101		# return if $cur is an option
102		[ "${cur:0:1}" = "-" ] && return 0
103		# add a list of RPMS to possible completions
104		COMPREPLY=( ${COMPREPLY[@]} $( compgen -G $cur\*.rpm ) )
105		return 0
106		;;
107	-qp*)
108		# complete on list of relevant options
109		COMPREPLY=( $( compgen -W 'scripts root rcfile whatprovides \
110		whatrequires requires triggeredby ftpport ftpproxy httpproxy \
111		httpport provides triggers dump changelog dbpath filesbypkg' \
112		${cur_nodash#-} ) )
113		dashify;
114		# return if $cur is an option
115		[ "${cur:0:1}" = "-" ] && return 0
116		# add a list of RPMS to possible completions
117		COMPREPLY=( ${COMPREPLY[@]} $( compgen -G $cur\*.rpm ) )
118		return 0
119		;;
120	-*f)
121		# standard filename completion
122		COMPREPLY=( $( compgen -f $cur ) )
123		return 0
124		;;
125	-e)
126		# complete on list of relevant options
127		COMPREPLY=( $( compgen -W 'allmatches noscripts notriggers \
128		nodeps test' ${cur_nodash#-} ) )
129		dashify;
130		# return if $cur is an option
131		[ "${cur:0:1}" = "-" ] && return 0
132		# complete on basename of installed RPMs
133		COMPREPLY=( $( rpm -qa | \
134		   sed -ne 's/^\('$cur'.*\)-[0-9a-zA-Z._]\+-[0-9.]\+$/\1/p' ) )
135		return 0
136		;;
137	-qa*)
138		# complete on list of relevant options
139		COMPREPLY=( $( compgen -W 'scripts root rcfile whatprovides \
140		whatrequires requires triggeredby ftpport ftpproxy httpproxy \
141		httpport provides triggers dump changelog dbpath specfile \
142		querybynumber last filesbypkg' ${cur_nodash#-} ) )
143		dashify;
144		return 0
145		;;
146	-q*)
147		# complete on list of relevant options
148		COMPREPLY=( $( compgen -W 'scripts root rcfile whatprovides \
149		whatrequires requires triggeredby ftpport ftpproxy httpproxy \
150		httpport provides triggers dump changelog dbpath specfile \
151		querybynumber last filesbypkg' ${cur_nodash#-} ) )
152		dashify;
153		# return if $cur is an option
154		[ "${cur:0:1}" = "-" ] && return 0
155		# add a list of RPMS to possible completions
156		COMPREPLY=( ${COMPREPLY[@]} $( rpm -qa | \
157		   sed -ne 's/^\('$cur'.*\)-[0-9a-zA-Z._]\+-[0-9.]\+$/\1/p' ) )
158		return 0
159		;;
160	-[Vy]*)
161		# complete on list of relevant options
162		COMPREPLY=( $( compgen -W 'root rcfile dbpath nodeps nofiles \
163		noscripts nomd5 nopgp' ${cur_nodash#-} ) )
164		dashify;
165		# return if $cur is an option
166		[ "${cur:0:1}" = "-" ] && return 0
167		# add a list of RPMS to possible completions
168		COMPREPLY=( ${COMPREPLY[@]} $( rpm -qa | \
169		   sed -ne 's/^\('$cur'.*\)-[0-9a-zA-Z._]\+-[0-9.]\+$/\1/p' ) )
170		return 0
171		;;
172	-b*)
173		# complete on list of relevant options
174		COMPREPLY=( $( compgen -W 'short-circuit timecheck clean \
175		rmsource test sign buildroot target buildarch buildos' \
176		${cur_nodash#-} ) )
177		dashify;
178		# return if $cur is an option
179		[ "${cur:0:1}" = "-" ] && return 0
180		# complete on .spec files
181		COMPREPLY=( $( compgen -G $cur\*.spec ) )
182		return 0
183		;;
184	-t*)
185		# complete on list of relevant options
186		COMPREPLY=( $( compgen -W 'short-circuit timecheck clean \
187		rmsource test sign buildroot target buildarch buildos' \
188		${cur_nodash#-} ) )
189		dashify;
190		# return if $cur is an option
191		[ "${cur:0:1}" = "-" ] && return 0
192		# complete on .tar.gz files
193		COMPREPLY=( $( compgen -G $cur\*.tar.gz ) )
194		return 0
195		;;
196	--re@(build|compile))
197		# complete on source RPMs
198		COMPREPLY=( $( compgen -G $cur\*.src.rpm ) )
199		return 0
200		;;
201	--@(checksig|@(re|add)sign))
202		# complete on RPMs
203		COMPREPLY=( $( compgen -G $cur\*.rpm ) )
204		return 0
205		;;
206	--set@(perms|gids))
207		# complete on installed RPMs
208		COMPREPLY=( ${COMPREPLY[@]} $( rpm -qa | \
209		   sed -ne 's/^\('$cur'.*\)-[0-9a-zA-Z._]\+-[0-9.]\+$/\1/p' ) )
210		return 0
211		;;
212	esac
213}
214complete -F _rpm rpm
215
216# chsh(1) completion
217#
218_chsh()
219{
220	local cur prev
221
222        COMPREPLY=()
223        cur=${COMP_WORDS[COMP_CWORD]}
224        prev=${COMP_WORDS[COMP_CWORD-1]}
225
226	if [ "$prev" = "-s" ]; then
227		COMPREPLY=( $( chsh -l | grep ^$cur ) )
228	else
229		COMPREPLY=( $( compgen -u $cur ) )
230	fi
231}
232complete -F _chsh chsh
233
234# chkconfig(8) completion
235#
236_chkconfig()
237{
238	local cur prev
239
240        COMPREPLY=()
241        cur=${COMP_WORDS[COMP_CWORD]}
242	cur_nodash=${cur#--}
243        prev=${COMP_WORDS[COMP_CWORD-1]}
244
245	if [ $COMP_CWORD -eq 1 ]; then
246		COMPREPLY=( $( compgen -W 'list add del level' $cur_nodash ) )
247		for (( i=0; i < ${#COMPREPLY[@]}; i++ )); do
248			COMPREPLY[i]=--${COMPREPLY[i]}
249		done
250		return 0
251	fi
252
253	if [ $COMP_CWORD -eq 4 ]; then
254		COMPREPLY=( $( compgen -W 'on off reset' $cur ) )
255		return 0
256	fi
257
258	case "$prev" in
259	@([1-6]|--@(list|add|del)))
260		COMPREPLY=( $( compgen -W "`(cd /etc/rc.d/init.d; echo *)`" \
261			       $cur) )
262		return 0
263		;;
264	--level)
265		COMPREPLY=( $( compgen -W '1 2 3 4 5 6' $cur ) )
266		return 0
267		;;
268	esac
269}
270complete -F _chkconfig chkconfig
271###
272