Blame completions/mount

Packit 8462d6
# mount(8) completion                                      -*- shell-script -*-
Packit 8462d6
Packit 8462d6
if [[ $OSTYPE == *linux* ]]; then
Packit 8462d6
    . "$BASH_SOURCE.linux"
Packit 8462d6
    return
Packit 8462d6
fi
Packit 8462d6
Packit 8462d6
# This will pull a list of possible mounts out of
Packit 8462d6
# /etc/{,v}fstab, unless the word being completed contains a ':', which
Packit 8462d6
# would indicate the specification of an NFS server. In that case, we
Packit 8462d6
# query the server for a list of all available exports and complete on
Packit 8462d6
# that instead.
Packit 8462d6
#
Packit 8462d6
_mount()
Packit 8462d6
{
Packit 8462d6
    local cur prev words cword
Packit 8462d6
    _init_completion -n : || return
Packit 8462d6
Packit 8462d6
    local sm host
Packit 8462d6
Packit 8462d6
    case $prev in
Packit 8462d6
        -t|--types)
Packit 8462d6
            _fstypes
Packit 8462d6
            return
Packit 8462d6
            ;;
Packit 8462d6
    esac
Packit 8462d6
Packit 8462d6
    [[ "$cur" == \\ ]] && cur="/"
Packit 8462d6
Packit 8462d6
    if [[ "$cur" == *:* ]]; then
Packit 8462d6
        for sm in "$(type -P showmount)" {,/usr}/{,s}bin/showmount; do
Packit 8462d6
            [[ -x $sm ]] || continue
Packit 8462d6
            COMPREPLY=( $( compgen -W "$( "$sm" -e ${cur%%:*} | \
Packit 8462d6
                awk 'NR>1 {print $1}' )" -- "${cur#*:}" ) )
Packit 8462d6
            return
Packit 8462d6
        done
Packit 8462d6
    fi
Packit 8462d6
Packit 8462d6
    if [[ "$cur" == //* ]]; then
Packit 8462d6
        host=${cur#//}
Packit 8462d6
        host=${host%%/*}
Packit 8462d6
        if [[ -n $host ]]; then
Packit 8462d6
            COMPREPLY=( $( compgen -P "//$host" -W \
Packit 8462d6
                "$( smbclient -d 0 -NL $host 2>/dev/null |
Packit 8462d6
                command sed -ne '/^[[:blank:]]*Sharename/,/^$/p' |
Packit 8462d6
                command sed -ne '3,$s|^[^A-Za-z]*\([^[:blank:]]*\).*$|/\1|p' )" \
Packit 8462d6
                    -- "${cur#//$host}" ) )
Packit 8462d6
        fi
Packit 8462d6
    elif [[ -r /etc/vfstab ]]; then
Packit 8462d6
        # Solaris
Packit 8462d6
        COMPREPLY=( $( compgen -W "$( awk '! /^[ \t]*#/ {if ($3 ~ /\//) print $3}' /etc/vfstab )" -- "$cur" ) )
Packit 8462d6
    elif [[ ! -e /etc/fstab ]]; then
Packit 8462d6
        # probably Cygwin
Packit 8462d6
        COMPREPLY=( $( compgen -W "$( $1 | awk '! /^[ \t]*#/ {if ($3 ~ /\//) print $3}' )" -- "$cur" ) )
Packit 8462d6
    else
Packit 8462d6
        # probably BSD
Packit 8462d6
        COMPREPLY=( $( compgen -W "$( awk '! /^[ \t]*#/ {if ($2 ~ /\//) print $2}' /etc/fstab )" -- "$cur" ) )
Packit 8462d6
    fi
Packit 8462d6
} &&
Packit 8462d6
complete -F _mount -o default -o dirnames mount
Packit 8462d6
Packit 8462d6
# ex: filetype=sh