_backupprocli() {
    COMPREPLY=()
    local cur="${COMP_WORDS[COMP_CWORD]}"
    local prev="${COMP_WORDS[COMP_CWORD-1]}"

    local opts="about backup check_update create_account reconnect_account remote_tunnel show_account show_remote_tunnel -u -r -d -q -v -h"

    case "${prev}" in
         about|backup|check_update|create_account|reconnect_account|remote_tunnel|show_account|show_remote_tunel)
            return 0
            ;;
        -d)
            local IFS=$'\n'
            compopt -o filenames
            COMPREPLY=( $(compgen -d -- "${cur}") )
            return 0
            ;;
        -r)
            local IFS=$'\n'
            compopt -o filenames
            COMPREPLY=( $(compgen -o plusdirs -f -X '!*.json' -- "${cur}") )
            return 0
            ;;
        -u)
            local IFS=$'\n'
            compopt -o nospace
            COMPREPLY=( $(compgen -W "http://") )
            return 0
            ;;
    esac

    COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
    return 0
}

_backupprogui() {
    COMPREPLY=()
    local cur="${COMP_WORDS[COMP_CWORD]}"
    local prev="${COMP_WORDS[COMP_CWORD-1]}"

    local opts="-d -j -b -k -q -v -h"

    case "${prev}" in
        -d|-j)
            local IFS=$'\n'
            compopt -o filenames
            COMPREPLY=( $(compgen -d -- "${cur}") )
            return 0
            ;;
    esac

    COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
    return 0
}

have backupprocli && complete -F _backupprocli backupprocli
have backupprogui && complete -F _backupprogui backupprogui
