Hi,
Modified as suggested, tested (but not "heavily") and it seems to work.
As a note :
- if no completion meet : filedir is used (maybe it shouldn't happens
  because of the -[UL] swith)
- I postulated uuidgen always output lower-case hex
- don't know if solaris &| cygwin are label|uuid-capable

Raph

On Mon, Apr 13, 2009 at 11:04:02PM +0300, Ville Skyttä wrote:
> On Sunday 12 April 2009, [email protected] wrote:
> 
> > COMPREPLY=( $( sed -n "/UUID/s/^UUID=\($cur[0-9a-f-]\{,36\}\).*/\1/Ip" 
> /etc/fstab ) )
> 
> I think this would be better put as:
> 
> COMPREPLY=( $( compgen -W '$( sed -ne "s/^UUID=\([^[:space:]]*\).*/\1/p" 
> /etc/fstab )' -- $cur ) )
> 
> "compgen -W ... -- $cur" is safer against unusual characters in $cur, and "I" 
> in sed's s///I only works with GNU sed as far as I know.
> 
> > COMPREPLY=( $( sed -n "/LABEL/s/^LABEL=\($cur[0-9a-z_]*\).*/\1/Ip" 
> /etc/fstab ) )
> 
> Ditto here:
> 
> COMPREPLY=( $( compgen -W '$( sed -ne "s/^LABEL=\([^[:space:]]*\).*/\1/p" 
> /etc/fstab )' -- $cur ) )
> 
> Could you test these changes and submit a new patch if they work for you?
diff --git a/bash_completion b/bash_completion
index 688adbd..021d820 100644
--- a/bash_completion
+++ b/bash_completion
@@ -855,11 +855,12 @@ complete -F _umount $dirnames umount
 #
 _mount()
 {
-       local cur i sm host
+       local cur i sm host prev
 
        COMPREPLY=()
        cur=`_get_cword`
        [[ "$cur" == \\ ]] && cur="/"
+       prev=${COMP_WORDS[COMP_CWORD-1]}
 
        for i in {,/usr}/{,s}bin/showmount; do [ -x $i ] && sm=$i && break; done
 
@@ -884,8 +885,14 @@ _mount()
                                 | grep "^$cur" ) )
        else
                # probably Linux
-               COMPREPLY=( $( awk '! /^[ \t]*#/ {if ($2 ~ /\//) print $2}' \
+               if [ $prev = -L ]; then
+                       COMPREPLY=( $( compgen -W '$(sed -n 
"/LABEL/s/^LABEL=\([^[:space:]]*\).*/\1/p" /etc/fstab)' -- $cur ) )
+               elif [ $prev = -U ]; then
+                       COMPREPLY=( $( compgen -W '$(sed -n 
"/UUID/s/^UUID=\([0-9a-f-]\{36\}\).*/\1/p" /etc/fstab)' -- $cur ) )
+               else
+                       COMPREPLY=( $( awk '! /^[ \t]*#/ {if ($2 ~ /\//) print 
$2}' \
                                /etc/fstab | grep "^$cur" ) )
+               fi
        fi
 
        return 0
_______________________________________________
Bash-completion-devel mailing list
[email protected]
http://lists.alioth.debian.org/mailman/listinfo/bash-completion-devel

Reply via email to