#!/bin/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 are also completion function for '-p com.some.app' aliases: # # alias fbld='fdroid build -v -l -p' # complete -F _fdroid_build_project fbld # # alias fcheckup='fdroid checkupdates -v -p' # complete -F _fdroid_checkupdates_project fcheckup # # This way, one can simply do 'fbld com.some.app' or 'fcheckup com.some.app' __fdroid_init() { COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" (( $# >= 1 )) && __complete_${1} } __package() { files=( metadata/*.txt ) files=( ${files[@]#metadata/} ) files=${files[@]%.txt} COMPREPLY=( $( compgen -W "$files" -- $cur ) ) } __signed_package() { files=( repo/*.apk ) files=( ${files[@]#repo/} ) files=${files[@]%_*} COMPREPLY=( $( compgen -W "$files" -- $cur ) ) } __vercode() { local p p=${cur:0:-1} COMPREPLY=( $( compgen -P "${p}:" -W "$( while read line; do if [[ "$line" == "Build Version:"* ]] then line="${line#*,}" printf "${line%%,*} " elif [[ "$line" == "Build:"* ]] then line="${line#*,}" printf "${line%%,*} " fi 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 --latest --server --resetserver --on-server --force --all" case "${cur}" in *:) __vercode return 0;; *) __package 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_verify() { opts="-h -v -p" lopts="--help --verbose --package" 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 } __complete_init() { opts="-h -v -d" lopts="--help --verbose --keystore --distinguished-name --repo-keyalias" __complete_options } _fdroid() { local cmd cmds aliased cmd=${COMP_WORDS[1]} cmds=" build init update publish checkupdates import rewritemeta scanner verify 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 } _fdroid_checkupdates_project() { local cur prev cmds opts lopts aliased __fdroid_init aliased=true (( $COMP_CWORD == 1 )) && prev="-p" __complete_checkupdates } _fd-commit() { __package } complete -F _fdroid fdroid complete -F _fd-commit fd-commit return 0