# bash completion for sudo(8)                              -*- shell-script -*-

_sudo()
{
    local cur prev words cword
    _init_completion || return

    local i mode=normal
    [[ $1 == *sudoedit ]] && mode=edit

    [[ $mode == normal ]] &&
    for (( i=1; i <= COMP_CWORD; i++ )); do
        if [[ ${COMP_WORDS[i]} != -* ]]; then
            local PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin
            local root_command=${COMP_WORDS[i]}
            _command_offset $i
            return
        fi
        if [[ ${COMP_WORDS[i]} == -e ]]; then
            mode=edit
            break
        fi
        [[ ${COMP_WORDS[i]} == -[uUgCp] ]] && ((i++))
    done

    case "$prev" in
        -u|-U)
            COMPREPLY=( $( compgen -u -- "$cur" ) )
            return
            ;;
        -g)
            COMPREPLY=( $( compgen -g -- "$cur" ) )
            return
            ;;
        -C|-p)
            # argument required but no completions available
            return
            ;;
    esac

    if [[ "$cur" == -* ]]; then
        COMPREPLY=( $( compgen -W '-A -b -C -E -e -g -H -h -i -K -k -L -l -ll
            -n -P -p -S -s -U -u -V -v' -- "$cur" ) )
        return
    fi
    if [[ $mode == edit ]]; then
        _filedir
    fi
} && complete -F _sudo sudo sudoedit

# ex: ts=4 sw=4 et filetype=sh
