# -*-eselect-*- vim: ft=eselect # Copyright 1999-2009 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Id: fontconfig.eselect 728 2009-11-14 21:08:28Z dirtyepic $ DESCRIPTION="Manage fontconfig /etc/fonts/conf.d/ symlinks" AUTHOR="cardoe@gentoo.org" MAINTAINER="fonts@gentoo.org" SVN_DATE='$Date: 2009-11-14 15:08:28 -0600 (Sat, 14 Nov 2009) $' VERSION=$(svn_date_to_version "${SVN_DATE}") find_targets() { local targets bc x i=0 bcdirs[i]="${EROOT}/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="${EROOT}/etc/fonts/conf.d" [[ -e ${bcdir}/${1} ]] || return 1 return 0 } ### list action ### describe_list() { echo "List available fontconfig .conf files" } do_list() { local n targets=( $(find_targets) ) write_list_start \ "Available fontconfig .conf files ($(highlight '*') is enabled):" for (( n = 0; n < ${#targets[@]}; ++n )); do is_enabled ${targets[n]} \ && targets[n]=$(highlight_marker "${targets[n]}") done write_numbered_list -m "(none found)" "${targets[@]}" 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="${EROOT}/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="${EROOT}/${bc}" ;; # relative path */*) file="${EROOT}/${PWD}/${bc}" ;; # no path *) # CWD if [[ -f ${bc} ]] ; then file="${EROOT}/${PWD}/${bc}" # assume /etc/fonts/conf.avail elif [[ -f ${EROOT}/etc/fonts/conf.avail/${bc} ]] then file="${EROOT}/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="${EROOT}/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="${EROOT}/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 }