[Bash-completion-commits] [SCM] bash-completion branch, master, updated. 23ff82046f42895b3cafc19c4a1f609ca60ff6b0

Freddy Vulto fvulto at gmail.com
Mon Mar 16 21:01:32 UTC 2009


The following commit has been merged in the master branch:
commit 23ff82046f42895b3cafc19c4a1f609ca60ff6b0
Author: Freddy Vulto <fvulto at gmail.com>
Date:   Mon Mar 16 21:57:12 2009 +0100

    Improved vncviewer completion
        - Split vncviewer completion in _tightvncviewer() and _xvn4viewer()
        - Vncviewer completion automatically selects right completion at
          run-time.  Default is _tightvncviewer().
        - Added _realcommand() global function

diff --git a/bash_completion b/bash_completion
index 51a2325..ce29160 100644
--- a/bash_completion
+++ b/bash_completion
@@ -541,6 +541,25 @@ _usergroup()
 	fi
 }
 
+
+# Get real command.
+# - arg: $1  Command
+# - stdout:  Filename of command in PATH with possible symbolic links resolved.
+#            Empty string if command not found.
+# - return:  True (0) if command found, False (> 0) if not.
+_realcommand() {
+	type -P "$1" > /dev/null && {
+		if type -p realpath > /dev/null; then
+			realpath "$(type -P "$1")"
+		elif type -p readlink > /dev/null; then
+			readlink -f "$(type -P "$1")"
+		else
+			type -P "$1"
+		fi
+	}
+}
+
+
 # this function count the number of mandatory args
 #
 _count_args()
@@ -9064,35 +9083,6 @@ _smartctl()
 complete -F _smartctl smartctl
 }
 
-# vncviewer(1) completion
-#
-have vncviewer &&
-_vncviewer()
-{
-	local cur prev
-	local -a config
-
-	COMPREPLY=()
-	cur=`_get_cword`
-	prev=${COMP_WORDS[COMP_CWORD-1]}
-
-	case "$prev" in
-	-via)
-	   _known_hosts -a
-	   ;;
-	*)
-	   # ssh into the the server, find and ping the broadcast address, then
-	   # sort and show the results.
-	   COMPREPLY=( $( ssh -o 'Batchmode yes' $prev \
-			  "ping -bnc 4 255.255.255.255" 2>/dev/null | \
-			  awk -F ' ' '{print $4}' | \
-			  sort -n | uniq | egrep '[0-9]+\.[0-9]+\.' 2>/dev/null ) )
-	esac
-
-	return 0
-} &&
-complete -F _vncviewer vncviewer
-
 # sysctl(8) completion
 #
 have sysctl &&
diff --git a/contrib/vncviewer b/contrib/vncviewer
new file mode 100644
index 0000000..933783a
--- /dev/null
+++ b/contrib/vncviewer
@@ -0,0 +1,126 @@
+# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*-
+# ex: ts=8 sw=8 noet filetype=sh
+#
+# bash completion for vncviewer
+
+
+_vncviewer_bootstrap() {
+	local fname
+	case "$(_realcommand vncviewer)" in
+		# If `vncviewer' not installed, default file-dir completion 
+		'') _filedir `_get_cword` ;;
+		*xvnc4viewer)      fname=_xvnc4viewer    ;;
+		*tightvncviewer|*) fname=_tightvncviewer ;;
+	esac
+	if [ $fname ]; then
+		# Install real completion for subsequent completions
+		complete -F $fname vncviewer
+		$fname  # Generate completions once for now
+		unset -f _vncviewer_bootstrap
+	fi
+} &&
+complete -F _vncviewer_bootstrap vncviewer
+
+
+_tightvncviewer()
+{
+	local cur prev
+
+	COMPREPLY=()
+	cur=`_get_cword`
+	prev=${COMP_WORDS[COMP_CWORD-1]}
+
+	case $prev in
+		-passwd)
+			_filedir
+			return 0
+			;;
+		-encodings)
+			COMPREPLY=( $( compgen -W 'copyrect tight hextile zlib \
+				corre rre raw' -- $cur ) )
+			return 0
+			;;
+		-via)
+			_known_hosts
+			return 0
+			;;
+	esac
+
+
+	if [[ "$cur" == -* ]]; then
+		COMPREPLY=( $( compgen -W '-help -listen -via -shared -noshared\
+			-viewonly -fullscreen -noraiseonbeep -passwd -encodings\
+			-bgr233 -owncmap -truecolour -truecolor -depth \
+			-compresslevel -quality -nojpeg -nocursorshape \
+			-x11cursor' -- $cur ) )
+	else
+		_known_hosts
+	fi
+} &&
+complete -F _tightvncviewer tightvncviewer
+
+
+# NOTE: - VNC Viewer options are case-insensivite.  Preferred case is taken from -help.
+#       - Both single dash (-) and double dash (--) are allowed as option prefix
+_xvnc4viewer()
+{
+	local cur prev
+
+	COMPREPLY=()
+	cur=`_get_cword`
+	prev=${COMP_WORDS[COMP_CWORD-1]}
+
+	# Convert double dash to single dash
+	case ${prev/#--/-} in
+		# -passwd, -PasswordFile
+		-[pP][aA][sS][sS][wW][dD]|-[pP][aA][sS][sS][wW][oO][rR][dD][fF][iI][lL][eE])
+			_filedir
+			return 0
+			;;
+		# -PreferredEncoding
+		-[pP][rR][eE][fF][eE][rR][rR][eE][dD][eE][nN][cC][oO][dD][iI][nN][gG])
+			COMPREPLY=( $( compgen -W 'zrle hextile raw' -- $cur ) )
+			return 0
+			;;
+		# -via
+		-[vV][iI][aA])
+			_known_hosts
+			return 0
+			;;
+	esac
+
+	if [[ "$cur" == -* || "$cur" == --* ]]; then
+		# Default to vncviewer camelcase options, see `vncviewer -help'
+		local dash options=( \
+			AcceptClipboard AutoSelect DebugDelay display \
+			DotWhenNoCursor FullColor FullColour FullScreen \
+			geometry help listen Log \
+			LowColourLevel MenuKey name Parent \
+			passwd PasswordFile PointerEventInterval PreferredEncoding \
+			SendClipboard SendPrimary Shared UseLocalCursor \
+			via ViewOnly WMDecorationHeight WMDecorationWidth \
+			ZlibLevel \
+		)
+		[[ "$cur" == --* ]] && dash=-- || dash=-
+		# Is a `nocasematch' variable available (bash > v3.1)?
+		if shopt nocasematch 2> /dev/null | grep -q ^nocasematch; then
+			# Variable `nocasematch' is available
+			# Use vncviewer camelcase options
+			local option oldNoCaseMatch=$(shopt -p nocasematch)
+			shopt -s nocasematch
+			COMPREPLY=( $( for option in "${options[@]}"; do
+				[[ $dash$option == "$cur"* ]] && echo $dash$option
+			done ) )
+			eval "$oldNoCaseMatch" 2> /dev/null
+		else
+			# Variable 'nocasematch' isn't available;
+			# Convert completions to lowercase
+			COMPREPLY=( $( compgen -W "$(
+			    echo ${options[@]/#/$dash} | tr [:upper:] [:lower:]	
+			)" -- "$(echo "$cur" | tr [:upper:] [:lower:])" ) )
+		fi
+	else
+		_known_hosts
+	fi
+} &&
+complete -F _xvnc4viewer xvnc4viewer
diff --git a/to_review/vncviewer b/to_review/vncviewer
deleted file mode 100644
index 24d9012..0000000
--- a/to_review/vncviewer
+++ /dev/null
@@ -1,71 +0,0 @@
-# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*-
-# ex: ts=8 sw=8 noet filetype=sh
-#
-# bash completion for vncviewer (4.1.1)
-
-
-# NOTE: - VNC Viewer options are case-insensivite.  Preferred case is taken from -help.
-#       - Both single dash (-) and double dash (--) are allowed as option prefix
-have vncviewer &&
-_vncviewer()
-{
-	local cur prev
-
-	COMPREPLY=()
-	cur=`_get_cword`
-	prev=${COMP_WORDS[COMP_CWORD-1]}
-
-	# Convert double dash to single dash
-	case ${prev/#--/-} in
-		# -passwd, -PasswordFile
-		-[pP][aA][sS][sS][wW][dD]|-[pP][aA][sS][sS][wW][oO][rR][dD][fF][iI][lL][eE])
-			_filedir
-			return 0
-			;;
-		# -PreferredEncoding
-		-[pP][rR][eE][fF][eE][rR][rR][eE][dD][eE][nN][cC][oO][dD][iI][nN][gG])
-			COMPREPLY=( $( compgen -W 'zrle hextile raw' -- $cur ) )
-			return 0
-			;;
-		# -via
-		-[vV][iI][aA])
-			_known_hosts
-			return 0
-			;;
-	esac
-
-	if [[ "$cur" == -* || "$cur" == --* ]]; then
-		# Default to vncviewer camelcase options, see `vncviewer -help'
-		local dash options=( \
-			AcceptClipboard AutoSelect DebugDelay display \
-			DotWhenNoCursor FullColor FullColour FullScreen \
-			geometry help listen Log \
-			LowColourLevel MenuKey name Parent \
-			passwd PasswordFile PointerEventInterval PreferredEncoding \
-			SendClipboard SendPrimary Shared UseLocalCursor \
-			via ViewOnly WMDecorationHeight WMDecorationWidth \
-			ZlibLevel \
-		)
-		[[ "$cur" == --* ]] && dash=-- || dash=-
-		# Is a `nocasematch' variable available (bash > v3.1)?
-		if shopt nocasematch 2> /dev/null | grep -q ^nocasematch; then
-			# Variable `nocasematch' is available
-			# Use vncviewer camelcase options
-			local option oldNoCaseMatch=$(shopt -p nocasematch)
-			shopt -s nocasematch
-			COMPREPLY=( $( for option in "${options[@]}"; do
-				[[ $dash$option == "$cur"* ]] && echo $dash$option
-			done ) )
-			eval "$oldNoCaseMatch" 2> /dev/null
-		else
-			# Variable 'nocasematch' isn't available;
-			# Convert completions to lowercase
-			COMPREPLY=( $( compgen -W "$(
-			    echo ${options[@]/#/$dash} | tr [:upper:] [:lower:]	
-			)" -- "$(echo "$cur" | tr [:upper:] [:lower:])" ) )
-		fi
-	else
-		_known_hosts
-	fi
-} &&
-complete -F _vncviewer vncviewer

-- 
bash-completion



More information about the Bash-completion-commits mailing list