_procs() {
    local i cur prev opts cmd
    COMPREPLY=()
    if [[ "${BASH_VERSINFO[0]}" -ge 4 ]]; then
        cur="$2"
    else
        cur="${COMP_WORDS[COMP_CWORD]}"
    fi
    prev="$3"
    cmd=""
    opts=""

    for i in "${COMP_WORDS[@]:0:COMP_CWORD}"
    do
        case "${cmd},${i}" in
            ",$1")
                cmd="procs"
                ;;
            *)
                ;;
        esac
    done

    case "${cmd}" in
        procs)
            opts="-a -o -d -r -l -t -w -W -c -p -i -h -V --text --regex --smart --and --or --nand --nor --list --thread --tree --watch --watch-interval --color --theme --pager --json --interval --use-config --load-config --gen-config --gen-completion --gen-completion-out --gen-man-page --no-header --procfs --debug --sorta --sortd --insert --only --help --version [KEYWORD]..."
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                --watch-interval)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                -W)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --color)
                    COMPREPLY=($(compgen -W "auto always disable" -- "${cur}"))
                    return 0
                    ;;
                -c)
                    COMPREPLY=($(compgen -W "auto always disable" -- "${cur}"))
                    return 0
                    ;;
                --theme)
                    COMPREPLY=($(compgen -W "auto dark light" -- "${cur}"))
                    return 0
                    ;;
                --pager)
                    COMPREPLY=($(compgen -W "auto always disable" -- "${cur}"))
                    return 0
                    ;;
                -p)
                    COMPREPLY=($(compgen -W "auto always disable" -- "${cur}"))
                    return 0
                    ;;
                --interval)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --use-config)
                    COMPREPLY=($(compgen -W "default large" -- "${cur}"))
                    return 0
                    ;;
                --load-config)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --gen-completion)
                    COMPREPLY=($(compgen -W "bash elvish fish powershell zsh" -- "${cur}"))
                    return 0
                    ;;
                --gen-completion-out)
                    COMPREPLY=($(compgen -W "bash elvish fish powershell zsh" -- "${cur}"))
                    return 0
                    ;;
                --procfs)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --sorta)
                    COMPREPLY=($(compgen -W "command contextsw cputime docker elapsedtime empty gid gidreal gidsaved group groupreal groupsaved majflt minflt multislot nice pgid pid policy ppid priority readbytes separator session slot starttime state tcpport threads treeslot tty udpport uid uidreal uidsaved usagecpu usagemem user userreal usersaved vmrss vmsize vmtotal writebytes" -- "${cur}"))
                    return 0
                    ;;
                --sortd)
                    COMPREPLY=($(compgen -W "command contextsw cputime docker elapsedtime empty gid gidreal gidsaved group groupreal groupsaved majflt minflt multislot nice pgid pid policy ppid priority readbytes separator session slot starttime state tcpport threads treeslot tty udpport uid uidreal uidsaved usagecpu usagemem user userreal usersaved vmrss vmsize vmtotal writebytes" -- "${cur}"))
                    return 0
                    ;;
                --insert)
                    COMPREPLY=($(compgen -W "command contextsw cputime docker elapsedtime empty gid gidreal gidsaved group groupreal groupsaved majflt minflt multislot nice pgid pid policy ppid priority readbytes separator session slot starttime state tcpport threads treeslot tty udpport uid uidreal uidsaved usagecpu usagemem user userreal usersaved vmrss vmsize vmtotal writebytes" -- "${cur}"))
                    return 0
                    ;;
                -i)
                    COMPREPLY=($(compgen -W "command contextsw cputime docker elapsedtime empty gid gidreal gidsaved group groupreal groupsaved majflt minflt multislot nice pgid pid policy ppid priority readbytes separator session slot starttime state tcpport threads treeslot tty udpport uid uidreal uidsaved usagecpu usagemem user userreal usersaved vmrss vmsize vmtotal writebytes" -- "${cur}"))
                    return 0
                    ;;
                --only)
                    COMPREPLY=($(compgen -W "command contextsw cputime docker elapsedtime empty gid gidreal gidsaved group groupreal groupsaved majflt minflt multislot nice pgid pid policy ppid priority readbytes separator session slot starttime state tcpport threads treeslot tty udpport uid uidreal uidsaved usagecpu usagemem user userreal usersaved vmrss vmsize vmtotal writebytes" -- "${cur}"))
                    return 0
                    ;;
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
    esac
}

if [[ "${BASH_VERSINFO[0]}" -eq 4 && "${BASH_VERSINFO[1]}" -ge 4 || "${BASH_VERSINFO[0]}" -gt 4 ]]; then
    complete -F _procs -o nosort -o bashdefault -o default procs
else
    complete -F _procs -o bashdefault -o default procs
fi
