[Bash-completion-commits] [SCM] bash-completion branch, master, updated. 584bc520dfbc0e6a7e949b885bb9b949f99a1ff9

David Paleino d.paleino at gmail.com
Thu Sep 17 16:07:35 UTC 2009


The following commit has been merged in the master branch:
commit 584bc520dfbc0e6a7e949b885bb9b949f99a1ff9
Author: David Paleino <d.paleino at gmail.com>
Date:   Thu Sep 17 18:06:24 2009 +0200

    Support "man cmd subcmd" completion in contrib/man (Debian: #545411)

diff --git a/CHANGES b/CHANGES
index 3b08b10..53a369f 100644
--- a/CHANGES
+++ b/CHANGES
@@ -36,6 +36,7 @@ bash-completion (1.x)
   * Improve qemu completion (Debian: #534901)
   * Added sshfs completion (shares the same as scp) (Debian: #545978)
   * Fixed obvious brokenness (typos) in contrib/mdadm
+  * Support "man cmd subcmd" completion in contrib/man (Debian: #545411)
 
   [ Ville Skyttä ]
   * Split yum completion to contrib/_yum (no longer installed by default, the
diff --git a/contrib/man b/contrib/man
index 89bf877..883214f 100644
--- a/contrib/man
+++ b/contrib/man
@@ -8,7 +8,7 @@
   -o $UNAME = OpenBSD ] &&
 _man()
 {
-	local cur i prev sect manpath manext mansect uname
+	local cur i prev sect manpath manext mansect uname version subcommands
 
 	manext="@([0-9lnp]|[0-9][px]|man|3pm)?(.@(gz|bz2|lzma))"
 	mansect="@([0-9lnp]|[0-9][px]|3pm)"
@@ -16,6 +16,7 @@ _man()
 	COMPREPLY=()
 	cur=`_get_cword`
 	prev=${COMP_WORDS[COMP_CWORD-1]}
+	version=$(man --version | cut -d\  -f2)
 
 	if [[ "$prev" == -l ]]; then
 		_filedir $manext
@@ -52,6 +53,19 @@ _man()
 		manpath="${manpath//://*man$sect/ } ${manpath//://*cat$sect/ }"
 	fi
 
+	# Check whether $prev has "subcommand" manpages -- not always right! (try man hg ssh, then $ hg ssh)
+	# Unfortunately, there's no way to check whether a completion is a valid subcommand or not.
+	# man cmd subcmd is only supported from man-db 2.5.6
+	if ([ ${version:0:1} -eq 2 ] && [ ${version:2:1} -eq 5 ] && [ ${version:4:1} -gt 5 ]) ||
+	   ([ ${version:0:1} -eq 2 ] && [ ${version:2:1} -gt 5 ]) ||
+	   [ ${version:0:1} -gt 2 ]; then
+		subcommands=$(whatis -w "$prev-*" | awk '{print $1}' | sed -e "s/$prev-//g" | tr "\n" " ")
+		if [ -n "$subcommands" ]; then
+			COMPREPLY=( $( compgen -W "$subcommands" -- $cur ) )
+			return 0
+		fi
+	fi
+
 	# redirect stderr for when path doesn't exist
 	COMPREPLY=( $( eval command ls "$manpath" 2>/dev/null ) )
 	# weed out directory path names and paths to man pages

-- 
bash-completion



More information about the Bash-completion-commits mailing list