# Copyright 1999-2005 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/app-text/tree/files/tree.bashcomp,v 1.1 2005/08/30 14:15:49 ka0ttic Exp $

# bash command-line completion for tree
# Author: Aaron Walker <ka0ttic@gentoo.org>

_tree() {
    local cur prev opts
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    opts="-a -d -l -f -i -q -N -p -u -g -s -D -F -r -t -x -L -A
    -S -n -C -P -I -H -T -R -o --inodes --device --noreport --nolinks
    --dirsfirst --charset --help"

    if [[ ${cur} == -* ]] ; then
        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
        return 0
    fi

    case "${prev}" in
        -L|-P|-I|-H|-T|--charset|--help)
            ;;
        -o)
            COMPREPLY=( $(compgen -f -- ${cur}) )
            ;;
        *)
            COMPREPLY=( $(compgen -d -- ${cur}) )
            ;;
    esac
}
complete -o filenames -F _tree tree

# vim: set ft=sh tw=80 sw=4 et :
