For convenience I attach the proposed eclass for review: From: Jonas Frei Date:   Fri Jul 14 11:13:14 2023 +0200 Subject: shell-completion.eclass shell-completion.eclass: Add new eclass Signed-off-by: Jonas Frei diff --git a/eclass/shell-completion.eclass b/eclass/shell-completion.eclass new file mode 100644 index 000000000000..b7b59802a5f7 --- /dev/null +++ b/eclass/shell-completion.eclass @@ -0,0 +1,114 @@ +# Copyright 2023 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +# @ECLASS: shell-completion.eclass +# @SUPPORTED_EAPIS: 8 +# @PROVIDES: bash-completion-r1 +# @AUTHOR: +# Alfred Wingate +# @MAINTAINER: +# Jonas Frei +# @BLURB: a few quick functions to install various shell completion files +# @DESCRIPTION: +# This eclass provides a standardised way to install shell completions +# for popular shells.  It inherits the already widely adopted +# 'bash-completion-r1', thus extending on its functionality. + +case ${EAPI} in + 8) ;; + *) die "${ECLASS}: EAPI ${EAPI:-0} not supported" +esac + +if [[ ! ${_SHELL_COMPLETION_ECLASS} ]]; then +_SHELL_COMPLETION_ECLASS=1 + +# Extend bash-completion-r1 +inherit bash-completion-r1 + +# @FUNCTION: _shell-completion_get_fishcompdir +# @INTERNAL +# @RETURN: unprefixed fish completions directory +_shell-completion_get_fishcompdir() { + echo "/usr/share/fish/vendor_completions.d" +} + +# @FUNCTION: _shell-completion_get_zshcompdir +# @INTERNAL +# @RETURN: unprefixed zsh completions directory +_shell-completion_get_zshcompdir() { + echo "/usr/share/zsh/site-functions" +} + +# @FUNCTION: get_fishcompdir +# @RETURN: the fish completions directory (with EPREFIX) +get_fishcompdir() { + debug-print-function ${FUNCNAME} "${@}" + + echo "${EPREFIX}$(_shell-completion_get_fishcompdir)" +} + +# @FUNCTION: get_zshcompdir +# @RETURN: the zsh completions directory (with EPREFIX) +get_zshcompdir() { + debug-print-function ${FUNCNAME} "${@}" + + echo "${EPREFIX}$(_shell-completion_get_zshcompdir)" +} + +# @FUNCTION: dofishcomp +# @USAGE: +# @DESCRIPTION: +# Install fish completion files passed as args. +dofishcomp() { + debug-print-function ${FUNCNAME} "${@}" + + ( + insopts -m 0644 + insinto "$(_shell-completion_get_fishcompdir)" + doins "${@}" + ) +} + +# @FUNCTION: dozshcomp +# @USAGE: +# @DESCRIPTION: +# Install zsh completion files passed as args. +dozshcomp() { + debug-print-function ${FUNCNAME} "${@}" + + ( + insopts -m 0644 + insinto "$(_shell-completion_get_zshcompdir)" + doins "${@}" + ) +} + +# @FUNCTION: newfishcomp +# @USAGE: +# @DESCRIPTION: +# Install fish file under a new name. +newfishcomp() { + debug-print-function ${FUNCNAME} "${@}" + + ( + insopts -m 0644 + insinto "$(_shell-completion_get_fishcompdir)" + newins "${@}" + ) +} + +# @FUNCTION: newzshcomp +# @USAGE: +# @DESCRIPTION: +# Install zsh file under a new name. +newzshcomp() { + debug-print-function ${FUNCNAME} "${@}" + + ( + insopts -m 0644 + insinto "$(_shell-completion_get_zshcompdir)" + newins "${@}" + ) +} + +fi ------- Original Message ------- On Tuesday, July 11th, 2023 at 12:36 PM, freijon@pm.me wrote: > On July 2nd we had a discussion on #gentoo-guru on IRC about adding shell-completion.eclass to ::gentoo. It's already well established on GURU and used in 23 ebuilds. It's basically bash-completion-r1, but also includes `zsh` and `fish` with standard install locations for the completion scripts. > For the raison d'être, see: https://bugs.gentoo.org/843875 > > Check out the eclass here: https://gitweb.gentoo.org/repo/proj/guru.git/tree/eclass/shell-completion.eclass > > I hereby ask for a code review and to add this eclass to the ::gentoo repository. > > I offer to continue maintaining the eclass and Florian Schmaus (Flow) offered to co-maintain the eclass. > > Please let me know your thoughts about this.