[Bash-completion-commits] [SCM] bash-completion branch, master, updated. 1924616663fac97f929309c95cbeb450509aa455

David Paleino d.paleino at gmail.com
Fri Jun 5 19:40:08 UTC 2009


The following commit has been merged in the master branch:
commit 1924616663fac97f929309c95cbeb450509aa455
Author: David Paleino <d.paleino at gmail.com>
Date:   Fri Jun 5 21:39:46 2009 +0200

    Split dpkg-related completions to contrib/dpkg (and re-enable usage of grep-status if available)

diff --git a/CHANGES b/CHANGES
index c3213f2..d80f0b3 100644
--- a/CHANGES
+++ b/CHANGES
@@ -27,6 +27,8 @@ bash-completion (1.x)
   * Split cvs-related completions to contrib/cvs
   * Split man completion to contrib/man
   * Split bash builtins completions to contrib/bash-builtins
+  * Split dpkg-related completions to contrib/dpkg (and re-enable usage
+    of grep-status if available)
 
   [ Ville Skyttä ]
   * Split yum and yum-arch completion into contrib/yum.
diff --git a/Makefile.am b/Makefile.am
index f5678ba..3329c50 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -29,6 +29,7 @@ bashcomp_DATA = contrib/ant \
 		contrib/dd \
 		contrib/dhclient \
 		contrib/dict \
+		contrib/dpkg \
 		contrib/dsniff \
 		contrib/findutils \
 		contrib/freeciv \
diff --git a/bash_completion b/bash_completion
index b68f7ee..a8d67f5 100644
--- a/bash_completion
+++ b/bash_completion
@@ -1513,273 +1513,6 @@ _cardctl()
 } &&
 complete -F _cardctl cardctl
 
-# This function is required by _dpkg() and _dpkg-reconfigure()
-#
-# TODO: Ubuntu (and Debian) folks removed the "have grep-status" part. In my Debian I got it,
-#       and I believe it's ok if we leave it like it is now. Was that removed because
-#       of Ubuntu's (and Debian's? :() inner weirdness? :) -- David (hanska-guest)
-have dpkg && {
-#have grep-status && {
-#_comp_dpkg_installed_packages()
-#{
-#	grep-status -P -e "^$1" -a -FStatus 'install ok installed' -n -s Package
-#}
-#} || {
-_comp_dpkg_installed_packages()
-{
-	grep -A 1 "Package: $1" /var/lib/dpkg/status | \
-		grep -B 1 -Ee "ok installed|half-installed|unpacked| \
-					half-configured|config-files" \
-				  -Ee "^Essential: yes" | \
-		grep "Package: $1" | cut -d\  -f2
-}
-#}
-
-# Debian dpkg(8) completion
-#
-_dpkg()
-{
-	local cur prev i
-
-	COMPREPLY=()
-	cur=`_get_cword`
-	prev=${COMP_WORDS[COMP_CWORD-1]}
-	i=$COMP_CWORD
-
-	_expand || return 0
-
-	_split_longopt
-
-	# find the last option flag
-	if [[ $cur != -* ]]; then
-		while [[ $prev != -* && $i != 1 ]]; do
-			i=$((i-1))
-			prev=${COMP_WORDS[i-1]}
-		done
-	fi
-
-	case "$prev" in
-	-@(c|i|A|I|f|e|x|X|-@(install|unpack|record-avail|contents|info|fsys-tarfile|field|control|extract)))
-		_filedir '?(u)deb'
-		return 0
-		;;
-	-@(b|-build))
-		_filedir -d
-		return 0
-		;;
-   	-@(s|p|l|-@(status|print-avail|list)))
-		COMPREPLY=( $( apt-cache pkgnames $cur 2>/dev/null ) )
-		return 0
-		;;
-	-@(S|-search))
-		_filedir
-		return 0
-		;;
-	-@(r|L|P|-@(remove|purge|listfiles)))
-		COMPREPLY=( $( _comp_dpkg_installed_packages $cur ) )
-		return 0
-		;;
-	*)
-
-	COMPREPLY=( $( compgen -W '-i --install --unpack -A --record-avail \
-			--configure -r --remove -P --purge --get-selections \
-			--set-selections --update-avail --merge-avail \
-			--clear-avail  --command-fd --forget-old-unavail -s \
-			--status -p --print-avail -L --listfiles -l --list \
-			-S --search -C --audit --print-architecture \
-			--print-gnu-build-architecture \
-			--print-installation-architecture \
-			--compare-versions --help --version --force-help \
-			--force-all --force-auto-select --force-downgrade \
-			--force-configure-any --force-hold --force-bad-path \
-			--force-not-root --force-overwrite \
-			--force-overwrite-diverted --force-bad-verify \
-			--force-depends-version --force-depends \
-			--force-confnew --force-confold --force-confdef \
-			--force-confmiss --force-conflicts --force-architecture\
-			--force-overwrite-dir --force-remove-reinstreq \
-			--force-remove-essential -Dh \
-			--debug=help --licence --admindir --root --instdir \
-			-O --selected-only -E --skip-same-version \
-			-G --refuse-downgrade -B --auto-deconfigure \
-			--no-debsig --no-act -D --debug --status-fd \
-			-b --build -I --info -f --field -c --contents \
-			-x --extract -X --vextract --fsys-tarfile -e --control \
-			--ignore-depends --abort-after' -- $cur ) )
-		;;
-	esac
-
-
-}
-complete -F _dpkg $filenames dpkg dpkg-deb
-}
-
-# Debian GNU dpkg-reconfigure(8) completion
-#
-have dpkg-reconfigure &&
-_dpkg_reconfigure()
-{
-	local cur prev opt
-
-	COMPREPLY=()
-	cur=`_get_cword`
-	prev=${COMP_WORDS[COMP_CWORD-1]}
-
-
-	case "$prev" in
-	    -@(f|-frontend))
-		opt=( $( echo /usr/share/perl5/Debconf/FrontEnd/* ) )
-		opt=( ${opt[@]##*/} )
-		opt=( ${opt[@]%.pm} )
-		COMPREPLY=( $( compgen -W '${opt[@]}' -- $cur ) )
-		return 0
-		;;
-	    -@(p|-priority))
-  		COMPREPLY=( $( compgen -W 'low medium high critical' -- $cur ) )
-		return 0
-		;;
-	esac
-
-	if [[ "$cur" == -* ]]; then
-	    COMPREPLY=( $( compgen -W '-f --frontend -p --priority -a --all \
-				       -u --unseen-only -h --help -s --showold \
-				       --force --terse' -- $cur ) )
-	else
-	    COMPREPLY=( $( _comp_dpkg_installed_packages $cur ) )
-	fi
-} &&
-complete -F _dpkg_reconfigure $default dpkg-reconfigure
-
-# Debian dpkg-source completion
-#
-have dpkg-source &&
-_dpkg_source()
-{
-	local cur prev options work i action packopts unpackopts
-
-	packopts="-c -l -F -V -T -D -U -W -E -sa -i -I -sk -sp -su -sr -ss -sn -sA -sK -sP -sU -sR"
-	unpackopts="-sp -sn -su"
-	options=`echo "-x -b $packopts $unpackopts" | xargs echo | sort -u | xargs echo`
-
-	COMPREPLY=()
-	if [ "$1" != "dpkg-source" ]; then
-		return 1
-	fi
-	cur=`_get_cword`
-	prev=${COMP_WORDS[COMP_CWORD-1]}
-	action="options"
-	for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do
-		if [[ ${COMP_WORDS[$i]} == "-x" ]]; then
-			action=unpack
-		elif [[ ${COMP_WORDS[$i]} == "-b" ]]; then
-			action=pack
-		elif [[ ${COMP_WORDS[$i]} == "-h" ]]; then
-			action=help
-		fi
-	done
-	# if currently seeing a complete option, return just itself.
-	for i in $options; do
-		if [ "$cur" = "$i" ]; then
-			COMPREPLY=( "$cur" )
-			return 0
-		fi
-	done
-	case "$action" in
-		"unpack")
-			if [ "$cur" = "-" -o "$cur" = "-s" ]; then
-				COMPREPLY=( $unpackopts )
-				return 0
-			fi
-			case "$prev" in
-				"-x")
-					COMPREPLY=( $( compgen -d -- "$cur" ) \
-						    $( compgen -f -X '!*.dsc' -- "$cur" ) )
-					return 0
-					;;
-				*)
-					COMPREPLY=( $unpackopts $(compgen -d -f -- "$cur" ) )
-					return 0
-					;;
-			esac
-			return 0
-			;;
-		"pack")
-			if [ "$cur" = "-" ]; then
-				COMPREPLY=( $packopts )
-				return 0
-			fi
-			if [ "$cur" = "-s" ]; then
-				COMPREPLY=( "-sa" "-sk" "-sp" "-su" "-sr" "-ss" "-sn" \
-			    		"-sA" "-sK" "-sP" "-sU" "-sR" )
-				return 0
-			fi
-			case "$prev" in
-				"-b")
-					COMPREPLY=( $( compgen -d -- "$cur" ) )
-					return 0
-					;;
-				"-c"|"-l"|"-T"|"-i"|"-I")
-					# -c: get controlfile
-					# -l: get per-version info from this file
-					# -T: read variables here, not debian/substvars
-					# -i: <regexp> filter out files to ignore diffs of.
-					# -I: filter out files when building tarballs.
-					# return directory names and file names
-					COMPREPLY=( $( compgen -d -f ) )
-					return 0
-					;;
-				"-F")
-					# -F: force change log format
-					COMPREPLY=( $( ( cd /usr/lib/dpkg/parsechangelog; compgen -f "$cur" ) ) )
-					return 0
-					;;
-				"-V"|"-D")
-					# -V: set a substitution variable
-					# we don't know anything about possible variables or values
-					# so we don't try to suggest any completion.
-					COMPREPLY=()
-					return 0
-					;;
-				"-D")
-					# -D: override or add a .dsc field and value
-					# if $cur doesn't contain a = yet, suggest variable names
-					if echo -- "$cur" | grep -q "="; then
-						# $cur contains a "="
-						COMPREPLY=()
-						return 0
-					else
-						COMPREPLY=( Format Source Version Binary Maintainer Uploader Architecture Standards-Version Build-Depends Files )
-						return 0
-					fi
-					;;
-				"-U")
-					# -U: remove a field
-					# Suggest possible fieldnames
-					COMPREPLY=( Format Source Version Binary Maintainer Uploader Architecture Standards-Version Build-Depends Files )
-					return 0
-					;;
-				*)
-					COMPREPLY=( $packopts )
-					return 0
-					;;
-			esac
-			return 0
-			;;
-		*)
-			# if seeing a partial option, return possible completions.
-			if [ "$cur" = "-s" ]; then
-				COMPREPLY=( "-sa" "-sk" "-sp" "-su" "-sr" "-ss" "-sn" \
-			    		"-sA" "-sK" "-sP" "-sU" "-sR" )
-				return 0
-			fi
-			# else return all possible options.
-			COMPREPLY=( $options )
-			return 0
-			;;
-	esac
-} &&
-complete -F _dpkg_source dpkg-source
-
 # Debian Linux dselect(8) completion.
 #
 have dselect &&
diff --git a/contrib/dpkg b/contrib/dpkg
new file mode 100644
index 0000000..fac1ae3
--- /dev/null
+++ b/contrib/dpkg
@@ -0,0 +1,262 @@
+# This function is required by _dpkg() and _dpkg-reconfigure()
+have dpkg && {
+have grep-status && {
+_comp_dpkg_installed_packages()
+{
+	grep-status -P -e "^$1" -a -FStatus 'install ok installed' -n -s Package
+}
+} || {
+_comp_dpkg_installed_packages()
+{
+	grep -A 1 "Package: $1" /var/lib/dpkg/status | \
+		grep -B 1 -Ee "ok installed|half-installed|unpacked| \
+					half-configured|config-files" \
+				  -Ee "^Essential: yes" | \
+		grep "Package: $1" | cut -d\  -f2
+}
+}
+
+# Debian dpkg(8) completion
+#
+_dpkg()
+{
+	local cur prev i
+
+	COMPREPLY=()
+	cur=`_get_cword`
+	prev=${COMP_WORDS[COMP_CWORD-1]}
+	i=$COMP_CWORD
+
+	_expand || return 0
+
+	_split_longopt
+
+	# find the last option flag
+	if [[ $cur != -* ]]; then
+		while [[ $prev != -* && $i != 1 ]]; do
+			i=$((i-1))
+			prev=${COMP_WORDS[i-1]}
+		done
+	fi
+
+	case "$prev" in
+	-@(c|i|A|I|f|e|x|X|-@(install|unpack|record-avail|contents|info|fsys-tarfile|field|control|extract)))
+		_filedir '?(u)deb'
+		return 0
+		;;
+	-@(b|-build))
+		_filedir -d
+		return 0
+		;;
+   	-@(s|p|l|-@(status|print-avail|list)))
+		COMPREPLY=( $( apt-cache pkgnames $cur 2>/dev/null ) )
+		return 0
+		;;
+	-@(S|-search))
+		_filedir
+		return 0
+		;;
+	-@(r|L|P|-@(remove|purge|listfiles)))
+		COMPREPLY=( $( _comp_dpkg_installed_packages $cur ) )
+		return 0
+		;;
+	*)
+
+	COMPREPLY=( $( compgen -W '-i --install --unpack -A --record-avail \
+			--configure -r --remove -P --purge --get-selections \
+			--set-selections --update-avail --merge-avail \
+			--clear-avail  --command-fd --forget-old-unavail -s \
+			--status -p --print-avail -L --listfiles -l --list \
+			-S --search -C --audit --print-architecture \
+			--print-gnu-build-architecture \
+			--print-installation-architecture \
+			--compare-versions --help --version --force-help \
+			--force-all --force-auto-select --force-downgrade \
+			--force-configure-any --force-hold --force-bad-path \
+			--force-not-root --force-overwrite \
+			--force-overwrite-diverted --force-bad-verify \
+			--force-depends-version --force-depends \
+			--force-confnew --force-confold --force-confdef \
+			--force-confmiss --force-conflicts --force-architecture\
+			--force-overwrite-dir --force-remove-reinstreq \
+			--force-remove-essential -Dh \
+			--debug=help --licence --admindir --root --instdir \
+			-O --selected-only -E --skip-same-version \
+			-G --refuse-downgrade -B --auto-deconfigure \
+			--no-debsig --no-act -D --debug --status-fd \
+			-b --build -I --info -f --field -c --contents \
+			-x --extract -X --vextract --fsys-tarfile -e --control \
+			--ignore-depends --abort-after' -- $cur ) )
+		;;
+	esac
+
+
+}
+complete -F _dpkg $filenames dpkg dpkg-deb
+}
+
+# Debian GNU dpkg-reconfigure(8) completion
+#
+have dpkg-reconfigure &&
+_dpkg_reconfigure()
+{
+	local cur prev opt
+
+	COMPREPLY=()
+	cur=`_get_cword`
+	prev=${COMP_WORDS[COMP_CWORD-1]}
+
+
+	case "$prev" in
+	    -@(f|-frontend))
+		opt=( $( echo /usr/share/perl5/Debconf/FrontEnd/* ) )
+		opt=( ${opt[@]##*/} )
+		opt=( ${opt[@]%.pm} )
+		COMPREPLY=( $( compgen -W '${opt[@]}' -- $cur ) )
+		return 0
+		;;
+	    -@(p|-priority))
+  		COMPREPLY=( $( compgen -W 'low medium high critical' -- $cur ) )
+		return 0
+		;;
+	esac
+
+	if [[ "$cur" == -* ]]; then
+	    COMPREPLY=( $( compgen -W '-f --frontend -p --priority -a --all \
+				       -u --unseen-only -h --help -s --showold \
+				       --force --terse' -- $cur ) )
+	else
+	    COMPREPLY=( $( _comp_dpkg_installed_packages $cur ) )
+	fi
+} &&
+complete -F _dpkg_reconfigure $default dpkg-reconfigure
+
+# Debian dpkg-source completion
+#
+have dpkg-source &&
+_dpkg_source()
+{
+	local cur prev options work i action packopts unpackopts
+
+	packopts="-c -l -F -V -T -D -U -W -E -sa -i -I -sk -sp -su -sr -ss -sn -sA -sK -sP -sU -sR"
+	unpackopts="-sp -sn -su"
+	options=`echo "-x -b $packopts $unpackopts" | xargs echo | sort -u | xargs echo`
+
+	COMPREPLY=()
+	if [ "$1" != "dpkg-source" ]; then
+		return 1
+	fi
+	cur=`_get_cword`
+	prev=${COMP_WORDS[COMP_CWORD-1]}
+	action="options"
+	for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do
+		if [[ ${COMP_WORDS[$i]} == "-x" ]]; then
+			action=unpack
+		elif [[ ${COMP_WORDS[$i]} == "-b" ]]; then
+			action=pack
+		elif [[ ${COMP_WORDS[$i]} == "-h" ]]; then
+			action=help
+		fi
+	done
+	# if currently seeing a complete option, return just itself.
+	for i in $options; do
+		if [ "$cur" = "$i" ]; then
+			COMPREPLY=( "$cur" )
+			return 0
+		fi
+	done
+	case "$action" in
+		"unpack")
+			if [ "$cur" = "-" -o "$cur" = "-s" ]; then
+				COMPREPLY=( $unpackopts )
+				return 0
+			fi
+			case "$prev" in
+				"-x")
+					COMPREPLY=( $( compgen -d -- "$cur" ) \
+						    $( compgen -f -X '!*.dsc' -- "$cur" ) )
+					return 0
+					;;
+				*)
+					COMPREPLY=( $unpackopts $(compgen -d -f -- "$cur" ) )
+					return 0
+					;;
+			esac
+			return 0
+			;;
+		"pack")
+			if [ "$cur" = "-" ]; then
+				COMPREPLY=( $packopts )
+				return 0
+			fi
+			if [ "$cur" = "-s" ]; then
+				COMPREPLY=( "-sa" "-sk" "-sp" "-su" "-sr" "-ss" "-sn" \
+			    		"-sA" "-sK" "-sP" "-sU" "-sR" )
+				return 0
+			fi
+			case "$prev" in
+				"-b")
+					COMPREPLY=( $( compgen -d -- "$cur" ) )
+					return 0
+					;;
+				"-c"|"-l"|"-T"|"-i"|"-I")
+					# -c: get controlfile
+					# -l: get per-version info from this file
+					# -T: read variables here, not debian/substvars
+					# -i: <regexp> filter out files to ignore diffs of.
+					# -I: filter out files when building tarballs.
+					# return directory names and file names
+					COMPREPLY=( $( compgen -d -f ) )
+					return 0
+					;;
+				"-F")
+					# -F: force change log format
+					COMPREPLY=( $( ( cd /usr/lib/dpkg/parsechangelog; compgen -f "$cur" ) ) )
+					return 0
+					;;
+				"-V"|"-D")
+					# -V: set a substitution variable
+					# we don't know anything about possible variables or values
+					# so we don't try to suggest any completion.
+					COMPREPLY=()
+					return 0
+					;;
+				"-D")
+					# -D: override or add a .dsc field and value
+					# if $cur doesn't contain a = yet, suggest variable names
+					if echo -- "$cur" | grep -q "="; then
+						# $cur contains a "="
+						COMPREPLY=()
+						return 0
+					else
+						COMPREPLY=( Format Source Version Binary Maintainer Uploader Architecture Standards-Version Build-Depends Files )
+						return 0
+					fi
+					;;
+				"-U")
+					# -U: remove a field
+					# Suggest possible fieldnames
+					COMPREPLY=( Format Source Version Binary Maintainer Uploader Architecture Standards-Version Build-Depends Files )
+					return 0
+					;;
+				*)
+					COMPREPLY=( $packopts )
+					return 0
+					;;
+			esac
+			return 0
+			;;
+		*)
+			# if seeing a partial option, return possible completions.
+			if [ "$cur" = "-s" ]; then
+				COMPREPLY=( "-sa" "-sk" "-sp" "-su" "-sr" "-ss" "-sn" \
+			    		"-sA" "-sK" "-sP" "-sU" "-sR" )
+				return 0
+			fi
+			# else return all possible options.
+			COMPREPLY=( $options )
+			return 0
+			;;
+	esac
+} &&
+complete -F _dpkg_source dpkg-source

-- 
bash-completion



More information about the Bash-completion-commits mailing list