_adb()  
{
    local cur prev opts
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    opts="shell push pull reboot reboot-bootloader forward logcat devices kill-server root remount"

    case "$prev" in
    shell | pull | reboot-bootloader | logcat | devices | kill-server | root | remount)
        COMPREPLY=()
        return 0
        ;;
    reboot)
        COMPREPLY=( $(compgen -W "bootloader recovery" -- $cur) )
        return 0
        ;;
    push)
        COMPREPLY=( $(compgen -o default -o plusdirs -f -- $cur) )
        return 0
        ;;
    *)
        local prev2="${COMP_WORDS[COMP_CWORD-2]}"
        if [ "$prev2" == "push" ] || [ "$prev2" == "reboot" ];then
            return 0
        fi
        ;;
    esac	

    COMPREPLY=( $(compgen -W "$opts" -- $cur) )
    return 0
}
complete -F _adb adb
