# Copyright 1999-2015 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 DESCRIPTION="Manage fontconfig /etc/fonts/conf.d/ symlinks" MAINTAINER="fonts@gentoo.org" VERSION="1.0" find_targets() { local targets bc x i=0 bcdirs[i]="${ROOT}/etc/fonts/conf.avail/*.conf" if [[ -n "${ES_FONTCONFIG_DIRS}" ]] ; then for x in ${ES_FONTCONFIG_DIRS} ; do bcdirs[$((++i))]="${x}/*" done fi for bc in ${bcdirs[@]} ; do [[ -e ${bc} && ${bc} != *~ ]] && targets="${targets}\n$(basename ${bc})" done echo -ne ${targets} | sort -u } is_enabled() { bcdir="${ROOT}/etc/fonts/conf.d" [[ -e ${bcdir}/${1} ]] || return 1 return 0 } ### list action ### describe_list() { echo "List available fontconfig .conf files" } do_list() { local opts targets=( $(find_targets) ) write_list_start "Available fontconfig .conf files ( $(highlight '*') is enabled ):" if [[ -n "${targets[@]}" ]] ; then for (( n = 0 ; n < ${#targets[@]} ; ++n )) ; do is_enabled ${opts:-} ${targets[${n}]} && \ targets[${n}]="${targets[${n}]} $(highlight '*')" done write_numbered_list "${targets[@]}" else write_kv_list_entry "(none found)" "" fi return 0 } ### enable action ### describe_enable() { echo "Enable specified fontconfig .conf file(s)" } describe_enable_parameters() { echo "" } describe_enable_options() { echo " : Target name or number (from 'list' action)" } do_enable() { local bc bcdir="${ROOT}/etc/fonts/conf.d" [[ -z ${1} ]] && die -q "You didn't specify any .conf files to enable" # create directory if necessary if [[ ! -d ${bcdir} && -w $(dirname ${bcdir}) ]] ; then mkdir ${bcdir} || die -q "Failed to create ${bcdir}" elif [[ ! -d ${bcdir} ]] ; then die -q "You don't have permission to create ${bcdir}" fi # make sure we have proper permissions [[ -w ${bcdir} ]] || \ die -q "You don't have permission to write to ${bcdir}" targets=( $(find_targets) ) for bc in $@ ; do local file target=${bc} is_number "${target}" && \ target=${targets[$(( ${target} - 1 ))]} [[ -z "${target}" ]] && \ die -q "Target \"${bc}\" doesn't appear to be valid!" bc=${target} # ignore any unrecognized options [[ ${bc} == --* ]] && continue # what form is the argument in? case "${bc}" in # absolute path /*) file="${ROOT}/${bc}" ;; # relative path */*) file="${ROOT}/${PWD}/${bc}" ;; # no path *) # CWD if [[ -f ${bc} ]] ; then file="${ROOT}/${PWD}/${bc}" # assume /etc/fonts/conf.avail elif [[ -f ${ROOT}/etc/fonts/conf.avail/${bc} ]] then file="${ROOT}/etc/fonts/conf.avail/${bc}" else if [[ -n "${ES_FONTCONFIG_DIRS}" ]] ; then for x in ${ES_FONTCONFIG_DIRS} ; do [[ -f ${x}/${bc} ]] && file="${x}/${bc}" done fi [[ -e ${file} ]] || \ file="${ROOT}/etc/fonts/conf.avail/${bc}" fi ;; esac # does it exist? if [[ ! -e ${file} ]] ; then write_error_msg "${file} doesn't exist" continue fi # already installed? if [[ -e ${bcdir}/$(basename ${bc}) ]] ; then write_error_msg "$(basename ${bc}) is already installed" continue fi # finally, create the symlink ln -s "${file}" "${bcdir}" || \ die -q "Failed to create symlink from '${file}' to '${bcdir}'" done } ### disable action ### describe_disable() { echo "Disable specified fontconfig .conf file(s)" } describe_disable_parameters() { echo "" } describe_disable_options() { echo " : Target name or number (from 'list' action)" } do_disable() { local bc bcdir="${ROOT}/etc/fonts/conf.d" [[ -z ${1} ]] && die -q "You didn't specify any .conf files to disable" targets=( $(find_targets) ) for bc in $@ ; do local file target=${bc} is_number "${target}" && \ target=${targets[$(( ${target} - 1 ))]} [[ -z "${target}" ]] && \ die -q "Target \"${bc}\" doesn't appear to be valid!" bc=${target} file="${bcdir}/${bc}" # ignore any unrecognized options [[ ${bc} == --* ]] && continue # is in installed? if [[ ! -e ${file} ]] ; then write_error_msg "${bc} is not installed" continue fi # remove it if we have permissions if [[ -w $(dirname ${file}) ]] ; then rm "${file}" || die -q "Failed to remove ${file}" else die -q "You don't have permission to remove ${file}" fi done } # vim: set ft=eselect :