From 563e4d355dd360a89477745e1b04eb75ff609f71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Sat, 2 Jan 2010 10:35:18 +0200 Subject: [PATCH] Split mount and umount completion into contrib/mount. --- CHANGES | 1 + Makefile.am | 1 + bash_completion | 69 ------------------------------------------ contrib/mount | 80 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 82 insertions(+), 69 deletions(-) create mode 100644 contrib/mount diff --git a/CHANGES b/CHANGES index 399f4344..33a78b43 100644 --- a/CHANGES +++ b/CHANGES @@ -51,6 +51,7 @@ bash-completion (2.x) * Deprecate modules completion, upstream modules >= 3.2.7 ships one. * Protect grep invocations from user aliases (Alioth: 312143). * Split sshfs completion from contrib/ssh into contrib/sshfs. + * Split mount and umount completion into contrib/mount. [ Freddy Vulto ] * Added _get_pword() helper function, thanks to Sung Pae (Alioth: #312030) diff --git a/Makefile.am b/Makefile.am index aa677083..8ce08a4e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -80,6 +80,7 @@ bashcomp_DATA = contrib/abook \ contrib/mkinitrd \ contrib/mock \ contrib/monodevelop \ + contrib/mount \ contrib/mplayer \ contrib/msynctool \ contrib/mtx \ diff --git a/bash_completion b/bash_completion index 0747fd66..8eeb1cca 100644 --- a/bash_completion +++ b/bash_completion @@ -987,75 +987,6 @@ _chgrp() complete -F _chgrp -o filenames chgrp -# umount(8) completion. This relies on the mount point being the third -# space-delimited field in the output of mount(8) -# -_umount() -{ - local cur IFS=$'\n' - - COMPREPLY=() - cur=`_get_cword` - - COMPREPLY=( $( compgen -W '$( mount | cut -d" " -f 3 )' -- "$cur" ) ) - - return 0 -} -complete -F _umount -o dirnames umount - - -# mount(8) completion. This will pull a list of possible mounts out of -# /etc/{,v}fstab, unless the word being completed contains a ':', which -# would indicate the specification of an NFS server. In that case, we -# query the server for a list of all available exports and complete on -# that instead. -# -_mount() -{ - 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 - - if [[ -n "$sm" && "$cur" == *:* ]]; then - COMPREPLY=( $( compgen -W "$( $sm -e ${cur%%:*} | \ - awk 'NR>1 {print $1}' )" -- "$cur" ) ) - elif [[ "$cur" == //* ]]; then - host=${cur#//} - host=${host%%/*} - if [ -n "$host" ]; then - COMPREPLY=( $( compgen -P "//$host" -W \ - "$( smbclient -d 0 -NL $host 2>/dev/null | - sed -ne '/^['"$'\t '"']*Sharename/,/^$/p' | - sed -ne '3,$s|^[^A-Za-z]*\([^'"$'\t '"']*\).*$|/\1|p' )" \ - -- "${cur#//$host}" ) ) - fi - elif [ -r /etc/vfstab ]; then - # Solaris - COMPREPLY=( $( compgen -W "$( awk '! /^[ \t]*#/ {if ($3 ~ /\//) print $3}' /etc/vfstab )" -- "$cur" ) ) - elif [ ! -e /etc/fstab ]; then - # probably Cygwin - COMPREPLY=( $( compgen -W "$( mount | awk '! /^[ \t]*#/ {if ($3 ~ /\//) print $3}' )" -- "$cur" ) ) - else - # probably Linux - if [ $prev = -L ]; then - COMPREPLY=( $( compgen -W '$(sed -ne "s/^[[:space:]]*LABEL=\([^[:space:]]*\).*/\1/p" /etc/fstab )' -- "$cur" ) ) - elif [ $prev = -U ]; then - COMPREPLY=( $( compgen -W '$(sed -ne "s/^[[:space:]]*UUID=\([^[:space:]]*\).*/\1/p" /etc/fstab )' -- "$cur" ) ) - else - COMPREPLY=( $( compgen -W "$( awk '! /^[ \t]*#/ {if ($2 ~ /\//) print $2}' /etc/fstab )" -- "$cur" ) ) - fi - fi - - return 0 -} # _mount() -complete -F _mount -o default -o dirnames mount - - # Linux rmmod(8) completion. This completes on a list of all currently # installed kernel modules. # diff --git a/contrib/mount b/contrib/mount new file mode 100644 index 00000000..0474df02 --- /dev/null +++ b/contrib/mount @@ -0,0 +1,80 @@ +# mount(8) completion. This will pull a list of possible mounts out of +# /etc/{,v}fstab, unless the word being completed contains a ':', which +# would indicate the specification of an NFS server. In that case, we +# query the server for a list of all available exports and complete on +# that instead. +# +have mount && +{ + +_mount() +{ + 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 + + if [[ -n "$sm" && "$cur" == *:* ]]; then + COMPREPLY=( $( compgen -W "$( $sm -e ${cur%%:*} | \ + awk 'NR>1 {print $1}' )" -- "$cur" ) ) + elif [[ "$cur" == //* ]]; then + host=${cur#//} + host=${host%%/*} + if [ -n "$host" ]; then + COMPREPLY=( $( compgen -P "//$host" -W \ + "$( smbclient -d 0 -NL $host 2>/dev/null | + sed -ne '/^['"$'\t '"']*Sharename/,/^$/p' | + sed -ne '3,$s|^[^A-Za-z]*\([^'"$'\t '"']*\).*$|/\1|p' )" \ + -- "${cur#//$host}" ) ) + fi + elif [ -r /etc/vfstab ]; then + # Solaris + COMPREPLY=( $( compgen -W "$( awk '! /^[ \t]*#/ {if ($3 ~ /\//) print $3}' /etc/vfstab )" -- "$cur" ) ) + elif [ ! -e /etc/fstab ]; then + # probably Cygwin + COMPREPLY=( $( compgen -W "$( mount | awk '! /^[ \t]*#/ {if ($3 ~ /\//) print $3}' )" -- "$cur" ) ) + else + # probably Linux + if [ $prev = -L ]; then + COMPREPLY=( $( compgen -W '$(sed -ne "s/^[[:space:]]*LABEL=\([^[:space:]]*\).*/\1/p" /etc/fstab )' -- "$cur" ) ) + elif [ $prev = -U ]; then + COMPREPLY=( $( compgen -W '$(sed -ne "s/^[[:space:]]*UUID=\([^[:space:]]*\).*/\1/p" /etc/fstab )' -- "$cur" ) ) + else + COMPREPLY=( $( compgen -W "$( awk '! /^[ \t]*#/ {if ($2 ~ /\//) print $2}' /etc/fstab )" -- "$cur" ) ) + fi + fi + + return 0 +} && +complete -F _mount -o default -o dirnames mount + +# umount(8) completion. This relies on the mount point being the third +# space-delimited field in the output of mount(8) +# +have umount && +_umount() +{ + local cur IFS=$'\n' + + COMPREPLY=() + cur=`_get_cword` + + COMPREPLY=( $( compgen -W '$( mount | cut -d" " -f 3 )' -- "$cur" ) ) + + return 0 +} && +complete -F _umount -o dirnames umount + +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh