_aria2c()
{
    local cur prev split=false
    COMPREPLY=()
    COMP_WORDBREAKS=${COMP_WORDBREAKS//=}

    cmd=${COMP_WORDS[0]}
    _get_comp_words_by_ref cur prev
    case $prev in
        --ftp-type)
            COMPREPLY=( $( compgen -W 'binary ascii' -- "$cur" ) )
            return 0
            ;;
        --proxy-method)
            COMPREPLY=( $( compgen -W 'get tunnel' -- "$cur" ) )
            return 0
            ;;
        --metalink-preferred-protocol)
            COMPREPLY=( $( compgen -W 'http https ftp none' -- "$cur" ) )
            return 0
            ;;
        --bt-min-crypto-level)
            COMPREPLY=( $( compgen -W 'plain arc4' -- "$cur" ) )
            return 0
            ;;
        --follow-metalink)
            COMPREPLY=( $( compgen -W 'true mem false' -- "$cur" ) )
            return 0
            ;;
        --file-allocation)
            COMPREPLY=( $( compgen -W 'none prealloc falloc' -- "$cur" ) )
            return 0
            ;;
        --log-level)
            COMPREPLY=( $( compgen -W 'debug info notice warn error' -- "$cur" ) )
            return 0
            ;;
        --uri-selector)
            COMPREPLY=( $( compgen -W 'inorder feedback adaptive' -- "$cur" ) )
            return 0
            ;;
        --event-poll)
            COMPREPLY=( $( compgen -W 'epoll poll select' -- "$cur" ) )
            return 0
            ;;
        --follow-torrent)
            COMPREPLY=( $( compgen -W 'true mem false' -- "$cur" ) )
            return 0
            ;;
        --stream-piece-selector)
            COMPREPLY=( $( compgen -W 'default inorder geom' -- "$cur" ) )
            return 0
            ;;
        --download-result)
            COMPREPLY=( $( compgen -W 'default full' -- "$cur" ) )
            return 0
            ;;
        --dir)
            _filedir -d
            return 0
            ;;
        --torrent-file)
            _filedir '@(torrent)'
            return 0
            ;;
        --metalink-file)
            _filedir '@(meta4|metalink)'
            return 0
            ;;
    esac
    case $cur in
        -*)
            COMPREPLY=( $( compgen -W '--on-download-start --metalink-language --torrent-file --enable-peer-exchange --enable-peer-exchange=false --http-proxy-passwd --bt-tracker-timeout --rpc-listen-port --ftp-type --seed-time --bt-tracker-connect-timeout --no-netrc --no-netrc=false --force-sequential --force-sequential=false --metalink-base-uri --private-key --ftp-passwd --allow-overwrite --allow-overwrite=false --rpc-allow-origin-all --rpc-allow-origin-all=false --summary-interval --lowest-speed-limit --proxy-method --metalink-preferred-protocol --metalink-version --listen-port --bt-tracker-interval --server-stat-of --server-stat-timeout --https-proxy-user --piece-length --dry-run --dry-run=false --truncate-console-readout --truncate-console-readout=false --async-dns-server --bt-max-peers --max-overall-upload-limit --rpc-user --dht-entry-point6 --dir --split --on-download-pause --auto-file-renaming --auto-file-renaming=false --http-proxy --daemon --daemon=false --https-proxy --save-cookies --out --max-file-not-found --on-download-stop --certificate --bt-min-crypto-level --remove-control-file --remove-control-file=false --enable-dht --enable-dht=false --timeout --follow-metalink --on-bt-download-complete --ftp-proxy --show-files --show-files=false --metalink-servers --file-allocation --bt-hash-check-seed --bt-hash-check-seed=false --ftp-pasv --ftp-pasv=false --check-certificate --check-certificate=false --always-resume --always-resume=false --load-cookies --bt-stop-timeout --version --max-concurrent-downloads --quiet --quiet=false --http-auth-challenge --http-auth-challenge=false --max-resume-failure-tries --help --help=#basic --help=#advanced --help=#http --help=#https --help=#ftp --help=#metalink --help=#bittorrent --help=#cookie --help=#hook --help=#file --help=#rpc --help=#checksum --help=#experimental --help=#deprecated --help=#help --help=#all --rpc-listen-all --rpc-listen-all=false --all-proxy-user --server-stat-if --dht-file-path6 --save-session --bt-external-ip --max-tries --conditional-get --conditional-get=false --ftp-reuse-connection --ftp-reuse-connection=false --bt-max-open-files --async-dns --async-dns=false --bt-prioritize-piece --check-integrity --check-integrity=false --log-level --remote-time --remote-time=false --uri-selector --rpc-max-request-size --index-out --bt-tracker --referer --connect-timeout --stream-piece-selector --dht-message-timeout --select-file --download-result --disable-ipv6 --disable-ipv6=false --max-download-result --enable-http-keep-alive --enable-http-keep-alive=false --rpc-passwd --https-proxy-passwd --continue --continue=false --no-file-allocation-limit --ftp-proxy-user --metalink-location --allow-piece-length-change --allow-piece-length-change=false --max-connection-per-server --no-conf --no-conf=false --metalink-os --enable-http-pipelining --enable-http-pipelining=false --http-passwd --user-agent --enable-dht6 --enable-dht6=false --dht-file-path --http-no-cache --http-no-cache=false --peer-id-prefix --use-head --use-head=false --bt-lpd-interface --show-console-readout --show-console-readout=false --conf-path --log --no-proxy --dht-entry-point --dht-listen-port --http-user --retry-wait --on-download-complete --header --max-overall-download-limit --event-poll --http-accept-gzip --http-accept-gzip=false --metalink-file --all-proxy --hash-check-only --hash-check-only=false --dht-listen-addr6 --human-readable --human-readable=false --ftp-user --all-proxy-passwd --bt-exclude-tracker --bt-require-crypto --bt-require-crypto=false --http-proxy-user --metalink-enable-unique-protocol --metalink-enable-unique-protocol=false --on-download-error --max-upload-limit --realtime-chunk-checksum --realtime-chunk-checksum=false --ca-certificate --bt-save-metadata --bt-save-metadata=false --seed-ratio --follow-torrent --pause --pause=false --checksum --auto-save-interval --max-download-limit --bt-enable-lpd --bt-enable-lpd=false --enable-direct-io --enable-direct-io=false --parameterized-uri --parameterized-uri=false --ftp-proxy-passwd --enable-rpc --enable-rpc=false --min-split-size --bt-seed-unverified --bt-seed-unverified=false --input-file --interface --enable-async-dns6 --enable-async-dns6=false --reuse-uri --reuse-uri=false --bt-request-peer-speed-limit --stop --bt-metadata-only --bt-metadata-only=false ' -- "$cur" ) )
            ;;
        *)
            _filedir '@(torrent|meta4|metalink|text|txt|list|lst)'
            [ ${#COMPREPLY[@]} -eq 0 ] && _filedir
            return 0
    esac
    return 0
}
complete -F _aria2c aria2c
