common/environment/setup/install.sh: add vcompletion.

Install function for installing shell completions in the appropriate
place according to the shell used.
This commit is contained in:
Érico Rolim 2020-06-13 18:45:12 -03:00 committed by Danh Doan
parent a9b37be644
commit d5ca039278
2 changed files with 36 additions and 1 deletions

View file

@ -337,6 +337,13 @@ The following functions are defined by `xbps-src` and can be used on any templat
Note that vsed will call the sed command for every regex specified against Note that vsed will call the sed command for every regex specified against
every file specified, in the order that they are given. every file specified, in the order that they are given.
- *vcompletion()* `<file> <shell> [<command>]`
Installs shell completion from `file` for `command`, in the correct location
and with the appropriate filename for `shell`. If `command` isn't specified,
it will default to `pkgname`. The `shell` argument can be one of `bash`,
`fish` or `zsh`.
> Shell wildcards must be properly quoted, Example: `vmove "usr/lib/*.a"`. > Shell wildcards must be properly quoted, Example: `vmove "usr/lib/*.a"`.
<a id="global_vars"></a> <a id="global_vars"></a>

View file

@ -13,7 +13,7 @@ _noglob_helper() {
} }
# Apply _noglob to v* commands # Apply _noglob to v* commands
for cmd in vinstall vcopy vmove vmkdir vbin vman vdoc vconf vsconf vlicense vsv; do for cmd in vinstall vcopy vcompletion vmove vmkdir vbin vman vdoc vconf vsconf vlicense vsv; do
alias ${cmd}="set -f; _noglob_helper _${cmd}" alias ${cmd}="set -f; _noglob_helper _${cmd}"
done done
@ -258,3 +258,31 @@ _vmkdir() {
install -dm${mode} ${_destdir}/${dir} install -dm${mode} ${_destdir}/${dir}
fi fi
} }
_vcompletion() {
local file="$1" shell="$2" cmd="${3:-${pkgname}}"
local _bash_completion_dir=usr/share/bash-completion/completions/
local _fish_completion_dir=usr/share/fish/vendor_completions.d/
local _zsh_completion_dir=usr/share/zsh/site-functions/
if [ -z "$DESTDIR" ]; then
msg_red "$pkgver: vcompletion: DESTDIR unset, can't continue...\n"
return 1
fi
if [ $# -lt 2 ]; then
msg_red "$pkgver: vcompletion: 2 arguments expected: <file> <shell>\n"
return 1
fi
if ! [ -f "$file" ]; then
msg_red "$pkgver: vcompletion: file $file doesn't exist\n"
fi
case "$shell" in
bash) vinstall "$file" 0644 $_bash_completion_dir "${cmd}" ;;
fish) vinstall "$file" 0644 $_fish_completion_dir "${cmd}.fish" ;;
zsh) vinstall "$file" 0644 $_zsh_completion_dir "_${cmd}" ;;
*) msg_red "$pkgver: vcompletion: unknown shell ${shell}" ;;
esac
}