#!bash # # fdroid completion support. # # 'fdroid' is aliased automatically, but aliases to it are not. For instance, # to alias 'fd' to 'fdroid' and have competion available: # # alias fd='fdroid' # complete -F _fdroid fd # # One can use completion on aliased subcommands as follows: # # alias fbuild='fdroid build' # complete -F _fdroid_build fbuild # # There's also a completion function made for aliases to 'fdroid build -p': # # alias fbld='fdroid build -p' # complete -F _fdroid_build_project fbld __package() { [[ -d ./metadata ]] || return 0 files=( metadata/*.txt ) files=( ${files[@]/metadata\//} ) files=${files[@]/.txt/} COMPREPLY=( $( compgen -W "$files" -- $cur ) ) } __fdroid_init() { COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" (( $# >= 1 )) && __complete_${1} } __vercode() { local s p_found p s=${#COMP_WORDS[*]} p_found=false $aliased && p=${COMP_WORDS[1]} || { for (( i=1; i <= s; i++ )); do $p_found && { p=${COMP_WORDS[$i]}; break;} [[ ${COMP_WORDS[$i]} == -p ]] || [[ ${COMP_WORDS[$i]} == --package ]] &&\ p_found=true done $p_found || return 0 } COMPREPLY=( $( compgen -W "$( while read line; do [[ "$line" == "Build Version:"* ]] && { line="${line#*,}" printf "${line%%,*} " } done < "metadata/${p}.txt" )" -- $cur ) ) } __complete_options() { case "${cur}" in --*) COMPREPLY=( $( compgen -W "${lopts}" -- $cur ) ) return 0;; *) COMPREPLY=( $( compgen -W "${opts} ${lopts}" -- $cur ) ) return 0;; esac } __complete_build() { opts="-h -v -p -c -l -s -t -f" lopts="--help --verbose --package --vercode --latest --server --resetserver --on-server --force --install --all" case "${prev}" in -p|--package) __package return 0;; -c|--vercode) __vercode return 0;; esac __complete_options } __complete_update() { opts="-h -c -v -q -b -i -I -e -w" lopts="--help --createmeta --verbose --quiet --buildreport --interactive --icons --editor --wiki --pretty --clean" case "${prev}" in -e|--editor) _filedir return 0;; esac __complete_options } __complete_publish() { opts="-h -v -p" lopts="--help --verbose --package" case "${prev}" in -p|--package) __package return 0;; esac __complete_options } __complete_checkupdates() { opts="-h -v -p" lopts="--help --verbose --package --auto --autoonly --commit --gplay" case "${prev}" in -p|--package) __package return 0;; esac __complete_options } __complete_import() { opts="-h -u -s -r" lopts="--help --url --subdir --repo" case "${prev}" in -u|--url|-r|--repo) return 0;; -s|--subdir) _filedir return 0;; esac __complete_options } __complete_rewritemeta() { opts="-h -v -p" lopts="--help --verbose --package" case "${prev}" in -p|--package) __package return 0;; esac __complete_options } __complete_scanner() { opts="-h -v -p" lopts="--help --verbose --package --nosvn" case "${prev}" in -p|--package) __package return 0;; esac __complete_options } __complete_stats() { opts="-h -v -d" lopts="--help --verbose --download" __complete_options } __complete_server() { opts="-h -v" lopts="--help --verbose update" __complete_options } _fdroid() { local cmd cmds aliased cmd=${COMP_WORDS[1]} cmds=" build update publish checkupdates import rewritemeta scanner stats server " aliased=false for c in $cmds; do eval "_fdroid_${c} () { local cur prev cmds opts lopts __fdroid_init ${c}; }"; done [[ $cmds == *\ $cmd\ * ]] && _fdroid_${cmd} || { (($COMP_CWORD == 1)) && COMPREPLY=( $( compgen -W "${cmds}" -- $cmd ) ) } } _fdroid_build_project() { local cur prev cmds opts lopts aliased __fdroid_init aliased=true (( $COMP_CWORD == 1 )) && prev="-p" __complete_build } complete -F _fdroid fdroid return 0