ProxSpace/msys2/usr/share/bash-completion/completions/pkgfile
2019-08-16 02:06:21 +02:00

110 lines
2.8 KiB
Bash

#!/bin/bash
__inarray() {
local i
for i in "${@:2}"; do
[[ $i == "$1" ]] && return
done
}
__hasprefix() {
local i
for i in "${@:2}"; do
[[ $i = "$1"* ]] && return
done
}
_pkgfile() {
local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD - 1]} prevprev=${COMP_WORDS[COMP_CWORD - 2]}
local shortopts=(-l -s -u -b -C -D -g -i -q -R -r -h -V -v -w -z -0)
local longopts=(--list --search --update --binaries --glob --ignorecase
--quiet --regex --help --version --verbose --raw --null)
local longoptsarg=(--compress --config --cachedir --repo)
local allopts=("${shortopts[@]}" "${longopts[@]}" "${longoptsarg[@]}")
local compressopts=(none gzip bzip2 lz4 lzma lzop xz)
# maybe mangle the arguments in case we're looking at a --longopt=$val
[[ $cur = '=' ]] && cur=
if [[ $prev = '=' ]] && __inarray "$prevprev" "${allopts[@]}"; then
prev=$prevprev
fi
case $prev in
-C|--config)
COMPREPLY=($(compgen -f -- "$cur"))
compopt -o filenames
return 0
;;
-D|--cachedir)
COMPREPLY=($(compgen -d -- "$cur"))
compopt -o filenames
return 0
;;
-z|--compress)
COMPREPLY=($(compgen -W '${compressopts[*]}' -- "$cur"))
return 0
;;
-R|--repo)
local repos=$(sed '/^\[\(.*\)\]$/!d;s//\1/g;/options/d' /etc/pacman.conf)
COMPREPLY=($(compgen -W '$repos' -- "$cur"))
return 0
;;
esac
case $cur in
--*)
if __hasprefix "$cur" "${longoptsarg[@]}"; then
compopt -o nospace
COMPREPLY=($(compgen -W '${longoptsarg[*]}' -S = -- "$cur"))
else
COMPREPLY=($(compgen -W '${longopts[*]}' -- "$cur"))
fi
return 0
;;
-*)
COMPREPLY=($(compgen -W '${allopts[*]}' -- "$cur"))
return 0
;;
*)
# completion based on mode -- always take the last specified
local i j w mode
for (( i = 1; i < ${#COMP_WORDS[*]}; ++i )); do
w=${COMP_WORDS[i]}
if (( i == 1 )) || [[ ${COMP_WORDS[i-1]} != -* ]]; then
case $w in
# mode from shortopt (possibly a bunch mushed together)
-[^-]*)
for (( j = 0; j < ${#w}; j++ )); do
case ${w:j:1} in
l|s)
mode=${w:j:1}
;;
esac
done
;;
# mode from long opt
--list|--search)
mode=${w#--}
;;
esac
fi
done
case $mode in
l|list)
# complete based on package matches
COMPREPLY=($(compgen -W '$(command pacman -Ssq)' -- "$cur"))
return 0
;;
*)
COMPREPLY=($(compgen -W '${allopts[*]}' -- "$cur"))
return 0
;;
esac
esac
}
complete -F _pkgfile pkgfile
# ex:et ts=2 sw=2 ft=sh