commit: 235ec226de279967e6bd38fccbe2c6f074f498c3 Author: Alexandre Rostovtsev <tetromino <AT> gentoo <DOT> org> AuthorDate: Sat Nov 5 06:13:42 2011 +0000 Commit: Ulrich Müller <ulm <AT> gentoo <DOT> org> CommitDate: Tue Mar 6 16:58:08 2018 +0000 URL: https://gitweb.gentoo.org/proj/eselect.git/commit/?id=235ec226
gnome-shell-extensions.eselect: Retroactively import version 20110911. Taken from: https://dev.gentoo.org/~tetromino/distfiles/eselect-gnome-shell-extensions/eselect-gnome-shell-extensions-20110911.tar.xz modules/gnome-shell-extensions.eselect | 305 +++++++++++++++++++++++++++++++++ 1 file changed, 305 insertions(+) diff --git a/modules/gnome-shell-extensions.eselect b/modules/gnome-shell-extensions.eselect new file mode 100644 index 0000000..2b73c57 --- /dev/null +++ b/modules/gnome-shell-extensions.eselect @@ -0,0 +1,305 @@ +# -*-eselect-*- vim: ft=eselect +# Copyright 2009-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 or later +# $Id: $ + +DESCRIPTION="Manage default settings for systemwide GNOME Shell extensions" +AUTHOR="tetrom...@gentoo.org" +MAINTAINER="gn...@gentoo.org" +SVN_DATE='$Date: 2011/09/11 18:00:00 -0400 $' +VERSION=$(svn_date_to_version "${SVN_DATE}") + +# +# Basic idea: eselect manages a gschema override file located in +# /etc/eselect/gnome-shell-extensions/ that overrides GNOME Shell's +# 'disabled-extensions' or 'enabled-extensions' (depending on +# current shell version) GSettings key; the override file is +# symlinked from /usr/share/glib-2.0/schemas/ +# + +gse_prepare() { + XDG_DATA_DIRS=${XDG_DATA_DIRS:="${EROOT}/usr/local/share:${EROOT}/usr/share"} + ETCDIR="${EROOT}/etc/eselect/gnome-shell-extensions" + SCHEMADIR="${EROOT}/usr/share/glib-2.0/schemas" + OVERRIDE_FILE="eselect-gnome-shell-extensions.gschema.override" + CONFIG_FILE="config" + if [[ ! -d "${SCHEMADIR}" ]]; then + die -q "No ${SCHEMADIR} directory." + elif [[ ! -d "${ETCDIR}" ]]; then + die -q "No ${ETCDIR} directory." + fi + + warnings=() + errors=() + available=() + available_dirs=() + enabled=() + + if [[ -e "${ETCDIR}/${CONFIG_FILE}" ]]; then + source "${ETCDIR}/${CONFIG_FILE}" || die -q "Failed to source ${ETCDIR}/${CONFIG_FILE}" + enabled=( "${enabled_saved[@]}" ) + fi +} + +has() { + # Copied from portage's isolated-functions.sh + local needle=$1 + shift + + local x + for x in "$@"; do + [[ "${x}" = "${needle}" ]] && return 0 + done + return 1 +} + +gse_print_warnings() { + local n + + for (( n = 0; n < ${#warnings[@]}; ++n )); do + write_warning_msg "${warnings[n]}" + done + + for (( n = 0; n < ${#errors[@]}-1; ++n )); do + write_error_msg "${errors[n]}" + done + [[ ${#errors[@]} = 0 ]] && return + die -q "${errors[n]}" +} + +gse_die() { + errors=( "${errors[@]}" "$@" ) + gse_print_warnings + die # should not happen... +} + +gse_read_available() { + local d + + gse_prepare + # Do not expand * to '*' if $p is empty + shopt -s nullglob + + for p in $(echo "${XDG_DATA_DIRS}" | tr -s ':' '\n'); do + pushd "${p}/gnome-shell/extensions" &> /dev/null || continue + for d in *; do + local full_d="${p}/gnome-shell/extensions/${d}" + # skip invalid extension directories + if ! [[ -d "${d}" && -f "${d}/metadata.json" && -s "${d}/metadata.json" ]]; then + warnings=( "${warnings[@]}" "${full_d} is not a valid extension" ) + continue + fi + # earlier entries in XDG_DATA_DIRS take precedence + if has "${d}" "${available[@]}"; then + warnings=( "${warnings[@]}" "Skipping ${full_d}" ) + continue + fi + available_dirs=( "${available_dirs[@]}" "${full_d}" ) + available=( "${available[@]}" "${d}" ) + done + popd > /dev/null + done + # Sort $available + if [[ -n "${available[@]}" ]]; then + eval available=( $(printf '%q\n' "${available[@]}" | sort ) ) + fi +} + +gse_write_config_file() { + local f="${ETCDIR}/${CONFIG_FILE}" + + # Sort and uniquefy $enabled + eval enabled_saved=( $(printf '%q\n' "${enabled[@]}" | sort -u ) ) + + if [[ -e "${f}" ]]; then + [[ -f "${f}" && -w "${f}" ]] || gse_die "${f} is not writable" + else + [[ -w "${ETCDIR}" ]] || gse_die "${ETCDIR} is not writable" + fi + + cat > "${f}" <<EOF || gse_die "Failed to write ${f}" +# Generated and used by eselect gnome-shell-extensions; do not edit manually +$(declare -p enabled_saved) +EOF +} + +gse_write_override_file() { + local f="${ETCDIR}/${OVERRIDE_FILE}" + local local key value e + + case $(gnome-shell --version) in + "GNOME Shell 2"* | "GNOME Shell 3.0"* | "GNOME Shell 3.1."[012345678]* ) + # <gnome-shell-3.1.90 uses 'disabled-extensions' key + key="disabled-extensions" + for e in "${available[@]}"; do + has "${e}" "${enabled[@]}" || value+="'${e}', " + done + value=`echo "${value}" | sed -e 's:, $::'` + ;; + * ) + # >=gnome-shell-3.1.90 uses 'enabled-extensions' key + key="enabled-extensions" + for e in "${enabled[@]}"; do + value+="'${e}', " + done + value=`echo "${value}" | sed -e 's:, $::'` + ;; + esac + + if [[ -e "${f}" ]]; then + [[ -f "${f}" && -w "${f}" ]] || gse_die "${f} not writable" + else + [[ -w "${ETCDIR}" ]] || gse_die "${ETCDIR}/ not writable" + fi + + cat > "${f}" <<EOF || gse_die "Failed to write ${f}" +# Generated and used by eselect gnome-shell-extensions; do not edit manually +[org.gnome.shell] +${key}=[${value}] +EOF + glib-compile-schemas "${SCHEMADIR}" || gse_die "Failed to compile schemas in ${SCHEMADIR}" +} + +gse_get_name() { + # $1 is an index into available_dirs + perl -e 'use JSON; undef $/; print decode_json(<>)->{name};' \ + "${available_dirs[${1}]}/metadata.json" +} + +gse_get_description() { + # $1 is an index into available_dirs + perl -e 'use JSON; undef $/; print decode_json(<>)->{description};' \ + "${available_dirs[${1}]}/metadata.json" +} + +### list action + +describe_list() { + echo "List ids of available GNOME Shell extensions" +} + +describe_list_options() { + echo "-v, --verbose : Display extension names and descriptions" +} + +do_list() { + local n + + gse_read_available + write_list_start "Available extensions ($(highlight '*') means enabled for all users by default):" + for (( n = 0; n < ${#available[@]}; ++n )); do + has "${available[n]}" "${enabled[@]}" && + available[n]=$(highlight_marker "${available[n]}") + if [[ $1 = "--verbose" || $1 = "-v" ]]; then + available[n]+="\n\tfull name : $(gse_get_name $n)\n\tdescription : $(gse_get_description $n)" + fi + done + write_numbered_list -m "(none found)" "${available[@]}" + gse_print_warnings +} + +### enable action + +describe_enable() { + echo "Enable specified extension(s) for all users by default" +} + +describe_enable_parameters() { + echo "<extension>" +} + +describe_enable_options() { + echo "<extension> : Extension id or number (from 'list' action)" +} + +do_enable() { + local arg ext n + + gse_read_available + for arg in "$@"; do + local found= + for (( n = 0; n < ${#available[@]}; ++n )); do + ext="${available[n]}" + if [[ "${arg}" = $((n+1)) || "${arg}" = "${ext}" ]]; then + has "${ext}" "${enabled[@]}" && + warnings=( "${warnings[@]}" "Extension ${arg} is already enabled" ) + # will be uniquefied in gse_write_config_file + enabled=( "${enabled[@]}" "${ext}" ) + found=yes + break + fi + done + [[ ${found} = "yes" ]] || errors=( "${errors[@]}" "Failed to find extension ${arg}" ) + done + gse_write_override_file + gse_write_config_file + gse_print_warnings +} + +### disable action + +describe_disable() { + echo "Disable specified extension(s) for all users by default" +} + +describe_disable_parameters() { + echo "<extension>" +} + +describe_disable_options() { + echo "<extension> : Extension id or number (from 'list' action)" +} + +gse_unenable() { + # remove $1 from the enabled array + local found e + local new_enabled=() + + for e in "${enabled[@]}"; do + if [[ "$1" = "${e}" ]]; then + found="yes" + else + new_enabled=( "${new_enabled[@]}" "${e}" ) + fi + done + enabled=( "${new_enabled[@]}" ) + [[ "${found}" = "yes" ]] && return 0 + return 1 +} + +do_disable() { + local arg ext n + + gse_read_available + for arg in "$@"; do + local found= + for (( n = 0; n < ${#available[@]}; ++n )); do + ext="${available[n]}" + if [[ "${arg}" = $((n+1)) || "${arg}" = "${ext}" ]]; then + gse_unenable "${ext}" || + warnings=( "${warnings[@]}" "Extension ${arg} is already marked as disabled" ) + found=yes + break + fi + done + [[ ${found} = "yes" ]] || + errors=( "${errors[@]}" "Failed to find extension ${arg}" ) + done + gse_write_override_file + gse_write_config_file + gse_print_warnings +} + +### update action + +describe_update() { + echo "Scan for installed extensions, disable ones that haven't been enabled" + echo "earlier, and update gsettings keys if GNOME Shell has been upgraded" +} + +do_update() { + # Run this after emerging a new extension package + gse_read_available + gse_write_override_file + gse_print_warnings +}