_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 "ccgroup cgroup command contextsw voluntarycontextsw involuntarycontextsw cputime docker eip elapsedtime empty env esp filename gid gidfs gidreal gidsaved group groupfs groupreal groupsaved majflt minflt multislot nice pgid pid policy ppid priority processor readbytes rtpriority seccontext separator session shdpnd slot sigblk sigcgt sigign sigpnd ssb starttime state tcpport threads treeslot tty udpport uid uidfs uidlogin uidreal uidsaved usagecpu usagemem user userfs userlogin userreal usersaved vmdata vmexe vmhwm vmlib vmlock vmpeak vmpin vmpte vmrss vmsize vmstack vmswap wchan workdir writebytes" -- "${cur}"))
                    return 0
                    ;;
                --sortd)
                    COMPREPLY=($(compgen -W "ccgroup cgroup command contextsw voluntarycontextsw involuntarycontextsw cputime docker eip elapsedtime empty env esp filename gid gidfs gidreal gidsaved group groupfs groupreal groupsaved majflt minflt multislot nice pgid pid policy ppid priority processor readbytes rtpriority seccontext separator session shdpnd slot sigblk sigcgt sigign sigpnd ssb starttime state tcpport threads treeslot tty udpport uid uidfs uidlogin uidreal uidsaved usagecpu usagemem user userfs userlogin userreal usersaved vmdata vmexe vmhwm vmlib vmlock vmpeak vmpin vmpte vmrss vmsize vmstack vmswap wchan workdir writebytes" -- "${cur}"))
                    return 0
                    ;;
                --insert)
                    COMPREPLY=($(compgen -W "ccgroup cgroup command contextsw voluntarycontextsw involuntarycontextsw cputime docker eip elapsedtime empty env esp filename gid gidfs gidreal gidsaved group groupfs groupreal groupsaved majflt minflt multislot nice pgid pid policy ppid priority processor readbytes rtpriority seccontext separator session shdpnd slot sigblk sigcgt sigign sigpnd ssb starttime state tcpport threads treeslot tty udpport uid uidfs uidlogin uidreal uidsaved usagecpu usagemem user userfs userlogin userreal usersaved vmdata vmexe vmhwm vmlib vmlock vmpeak vmpin vmpte vmrss vmsize vmstack vmswap wchan workdir writebytes" -- "${cur}"))
                    return 0
                    ;;
                -i)
                    COMPREPLY=($(compgen -W "ccgroup cgroup command contextsw voluntarycontextsw involuntarycontextsw cputime docker eip elapsedtime empty env esp filename gid gidfs gidreal gidsaved group groupfs groupreal groupsaved majflt minflt multislot nice pgid pid policy ppid priority processor readbytes rtpriority seccontext separator session shdpnd slot sigblk sigcgt sigign sigpnd ssb starttime state tcpport threads treeslot tty udpport uid uidfs uidlogin uidreal uidsaved usagecpu usagemem user userfs userlogin userreal usersaved vmdata vmexe vmhwm vmlib vmlock vmpeak vmpin vmpte vmrss vmsize vmstack vmswap wchan workdir writebytes" -- "${cur}"))
                    return 0
                    ;;
                --only)
                    COMPREPLY=($(compgen -W "ccgroup cgroup command contextsw voluntarycontextsw involuntarycontextsw cputime docker eip elapsedtime empty env esp filename gid gidfs gidreal gidsaved group groupfs groupreal groupsaved majflt minflt multislot nice pgid pid policy ppid priority processor readbytes rtpriority seccontext separator session shdpnd slot sigblk sigcgt sigign sigpnd ssb starttime state tcpport threads treeslot tty udpport uid uidfs uidlogin uidreal uidsaved usagecpu usagemem user userfs userlogin userreal usersaved vmdata vmexe vmhwm vmlib vmlock vmpeak vmpin vmpte vmrss vmsize vmstack vmswap wchan workdir 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
