#!/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 __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 ) ) } __apk_package() { files=( ${1}/*.apk ) [ -f "${files[0]}" ] || return files=( ${files[@]#*/} ) files=${files[@]%_*} COMPREPLY=( $( compgen -W "$files" -- $cur ) ) } __apk_vercode() { local p p=${cur:0:-1} files=( ${1}/${p}_*.apk ) [ -f "${files[0]}" ] || return files=( ${files[@]#*_} ) files=${files[@]%.apk} COMPREPLY=( $( compgen -P "${p}:" -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 -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_install() { opts="-h -v" lopts="--help --verbose --all" case "${cur}" in -*) __complete_options return 0;; *:) __apk_vercode repo return 0;; *) __apk_package repo return 0;; esac } __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" lopts="--help --verbose" case "${cur}" in -*) __complete_options return 0;; *:) __apk_vercode unsigned return 0;; *) __apk_package unsigned return 0;; esac } __complete_checkupdates() { opts="-h -v" lopts="--help --verbose --auto --autoonly --commit --gplay" case "${cur}" in -*) __complete_options return 0;; *) __package return 0;; esac } __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" lopts="--help --verbose" case "${cur}" in -*) __complete_options return 0;; *) __package return 0;; esac } __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 install 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 ) ) } } _fd-commit() { __package } complete -F _fdroid fdroid complete -F _fd-commit fd-commit return 0