diff options
-rw-r--r-- | fontconfig.eselect | 205 |
1 files changed, 205 insertions, 0 deletions
diff --git a/fontconfig.eselect b/fontconfig.eselect new file mode 100644 index 0000000..ab0a10a --- /dev/null +++ b/fontconfig.eselect @@ -0,0 +1,205 @@ +# Copyright 1999-2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/app-admin/eselect-fontconfig/files/fontconfig.eselect-1.0,v 1.1 2007/07/28 02:50:13 dirtyepic Exp $ + +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 "<target>" +} + +describe_enable_options() { + echo "<target> : 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 "<target>" +} + +describe_disable_options() { + echo "<target> : 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 : |