From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pigeon.gentoo.org ([208.92.234.80] helo=lists.gentoo.org) by finch.gentoo.org with esmtp (Exim 4.60) (envelope-from ) id 1Qrn8F-0000h3-Pl for garchives@archives.gentoo.org; Fri, 12 Aug 2011 08:30:20 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 4A8F521C12A; Fri, 12 Aug 2011 08:29:57 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id 0707521C125 for ; Fri, 12 Aug 2011 08:29:56 +0000 (UTC) Received: from pelican.gentoo.org (unknown [66.219.59.40]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 5EEE01B4069 for ; Fri, 12 Aug 2011 08:29:56 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by pelican.gentoo.org (Postfix) with ESMTP id B280D80040 for ; Fri, 12 Aug 2011 08:29:55 +0000 (UTC) From: "Alexandre Restovtsev" To: gentoo-commits@lists.gentoo.org Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Alexandre Restovtsev" Message-ID: <9ed953209d1ff8f12ac0629e368ec3760960edc5.tetromino@gentoo> Subject: [gentoo-commits] proj/gnome:gnome-next commit in: app-admin/eselect-gnome-shell-extensions/files/, ... X-VCS-Repository: proj/gnome X-VCS-Files: app-admin/eselect-gnome-shell-extensions/eselect-gnome-shell-extensions-20110811.ebuild app-admin/eselect-gnome-shell-extensions/files/20110811.eselect X-VCS-Directories: app-admin/eselect-gnome-shell-extensions/files/ app-admin/eselect-gnome-shell-extensions/ X-VCS-Committer: tetromino X-VCS-Committer-Name: Alexandre Restovtsev X-VCS-Revision: 9ed953209d1ff8f12ac0629e368ec3760960edc5 Date: Fri, 12 Aug 2011 08:29:55 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: quoted-printable X-Archives-Salt: X-Archives-Hash: b664b785362071dca2e973c8b91339fe commit: 9ed953209d1ff8f12ac0629e368ec3760960edc5 Author: Alexandre Rostovtsev gmail com> AuthorDate: Thu Aug 11 03:20:41 2011 +0000 Commit: Alexandre Restovtsev gmail com> CommitDate: Fri Aug 12 08:26:41 2011 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=3Dproj/gnome.git;a=3D= commit;h=3D9ed95320 app-admin/eselect-gnome-shell-extensions: new package (#377107) Add a new eselect module to manage system defaults for gnome shell extensions. This is done by maintaining a gsettings override file for org.gnome.shell disabled-extensions key. By default, newly-installed extensions are disabled (i.e. for users who haven't customized their disabled-extension key), but then can be un-disabled using eselect. It is also possible to override system settings on a per-user basis using gsettings (from the command line) or gnome-tweak-tool. See bug #377107 for a discussion of why an eselect solution is preferable to one based on USE_EXPAND flags. --- .../eselect-gnome-shell-extensions-20110811.ebuild | 47 ++++ .../files/20110811.eselect | 275 ++++++++++++++= ++++++ 2 files changed, 322 insertions(+), 0 deletions(-) diff --git a/app-admin/eselect-gnome-shell-extensions/eselect-gnome-shell= -extensions-20110811.ebuild b/app-admin/eselect-gnome-shell-extensions/es= elect-gnome-shell-extensions-20110811.ebuild new file mode 100644 index 0000000..a2f1804 --- /dev/null +++ b/app-admin/eselect-gnome-shell-extensions/eselect-gnome-shell-extens= ions-20110811.ebuild @@ -0,0 +1,47 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=3D"4" + +DESCRIPTION=3D"Manages system defaults for GNOME Shell extensions" +HOMEPAGE=3D"http://www.gentoo.org" +SRC_URI=3D"" + +LICENSE=3D"GPL-2" +SLOT=3D"0" +KEYWORDS=3D"~amd64 ~x86" +IUSE=3D"" + +# gnome-shell schemas are used in pkg_postinst +COMMON_DEPEND=3D"app-admin/eselect + >=3Ddev-libs/glib-2.26:2 + gnome-base/gsettings-desktop-schemas + gnome-base/gnome-shell" +RDEPEND=3D"${COMMON_DEPEND} + dev-lang/perl + dev-perl/JSON" +DEPEND=3D"${COMMON_DEPEND}" +S=3D"${WORKDIR}" # for now, since installing from ${FILESDIR} + +src_install() { + insinto "/usr/share/eselect/modules" + newins "${FILESDIR}/${PV}.eselect" "gnome-shell-extensions.eselect" + keepdir "/etc/eselect/gnome-shell-extensions" + # The actual gschema override file will be greated in pkg_postinst. + dosym "/etc/eselect/gnome-shell-extensions/${PN}.gschema.override" \ + "/usr/share/glib-2.0/schemas/" +} + +pkg_postinst() { + einfo "Updating list of installed extensions" + eselect gnome-shell-extensions update || die + elog + elog "eselect gnome-shell-extensions manages the system default value o= f" + elog "the org.gnome.shell disabled-extensions key. To override the defa= ult" + elog "for an individual user, use the gsettings command, e.g." + elog "\$ gsettings set org.gnome.shell disabled-extensions \"['foo', 'b= ar']\"" + elog "To undo per-user changes and use the system default, do" + elog "\$ gsettings reset org.gnome.shell disabled-extensions" + elog +} diff --git a/app-admin/eselect-gnome-shell-extensions/files/20110811.esel= ect b/app-admin/eselect-gnome-shell-extensions/files/20110811.eselect new file mode 100644 index 0000000..13f53bc --- /dev/null +++ b/app-admin/eselect-gnome-shell-extensions/files/20110811.eselect @@ -0,0 +1,275 @@ +# -*-eselect-*- vim: ft=3Deselect +# Copyright 2009-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 or la= ter +# $Id: $ + +DESCRIPTION=3D"Manage default settings for systemwide GNOME Shell extens= ions" +AUTHOR=3D"tetromino@gmail.com" +MAINTAINER=3D"gnome@gentoo.org" +SVN_DATE=3D'$Date: 2011/08/11 19:00:00 -0400 $' +VERSION=3D$(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' GSettings key; the override file is symlinked +# from /usr/share/glib-2.0/schemas/ +# + +gse_prepare() { + EXTDIR=3D"${EROOT}/usr/share/gnome-shell/extensions" + ETCDIR=3D"${EROOT}/etc/eselect/gnome-shell-extensions" + SCHEMADIR=3D"${EROOT}/usr/share/glib-2.0/schemas" + OVERRIDE_FILE=3D"eselect-gnome-shell-extensions.gschema.override" + CONFIG_FILE=3D"config" + if [[ ! -d "${SCHEMADIR}" ]]; then + die -q "No ${SCHEMADIR} directory." + elif [[ ! -d "${ETCDIR}" ]]; then + die -q "No ${ETCDIR} directory." + fi + + warnings=3D() + errors=3D() + available=3D() + enabled=3D() + + if [[ -e "${ETCDIR}/${CONFIG_FILE}" ]]; then + source "${ETCDIR}/${CONFIG_FILE}" || die -q "Failed to source ${ETCDIR= }/${CONFIG_FILE}" + enabled=3D( "${enabled_saved[@]}" ) + fi +} + +has() { + # Copied from portage's isolated-functions.sh + local needle=3D$1 + shift + + local x + for x in "$@"; do + [[ "${x}" =3D "${needle}" ]] && return 0 + done + return 1 +} + +gse_print_warnings() { + local n + + for (( n =3D 0; n < ${#warnings[@]}; ++n )); do + write_warning_msg "${warnings[n]}" + done + + for (( n =3D 0; n < ${#errors[@]}-1; ++n )); do + write_error_msg "${errors[n]}" + done + [[ ${#errors[@]} =3D 0 ]] && return + die -q "${errors[n]}" +} + +gse_die() { + errors=3D( "${errors[@]}" "$@" ) + gse_print_warnings + die # should not happen... +} + +gse_read_available() { + local d + + gse_prepare + if ! pushd "${EXTDIR}" > /dev/null; then + warnings=3D( "${warnings[@]}" "Failed to open ${EXTDIR}" ) + return 1 + fi + # Do not expand * to '*' if EXTDIR is empty + shopt -s nullglob + for d in *; do + # skip invalid extension directories + if ! [[ -d "${d}" && -f "${d}/metadata.json" && -s "${d}/metadata.json= " ]]; then + warnings=3D( "${warnings[@]}" "${EXTDIR}/${d} is not a valid extensio= n" ) + continue + fi + available=3D( "${available[@]}" "${d}" ) + done + popd > /dev/null +} + +gse_write_config_file() { + local f=3D"${ETCDIR}/${CONFIG_FILE}" + + # Sort and uniquefy 'enabled' + eval enabled_saved=3D( $(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}" < "${f}" <)->{name};' \ + "${EXTDIR}/${1}/metadata.json"=20 +} + +gse_get_description() { + perl -e 'use JSON; undef $/; print decode_json(<>)->{description};' \ + "${EXTDIR}/${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 = by default):" + for (( n =3D 0; n < ${#available[@]}; ++n )); do + has "${available[n]}" "${enabled[@]}" && + available[n]=3D$(highlight_marker "${available[n]}") + if [[ $1 =3D "--verbose" || $1 =3D "-v" ]]; then + available[n]+=3D"\n\tfull name : $(gse_get_name ${available[n]})\n\= tdescription : $(gse_get_description ${available[n]})" + fi + done + write_numbered_list -m "(none found)" "${available[@]}" + gse_print_warnings +} + +### enable action + +describe_enable() { + echo "Enable specified extension(s) by default" +} + +describe_enable_parameters() { + echo "" +} + +describe_enable_options() { + echo " : Extension id or number (from 'list' action)" +} + +do_enable() { + local arg ext n + + gse_read_available + for arg in "$@"; do + local found=3D + for (( n =3D 0; n < ${#available[@]}; ++n )); do + ext=3D"${available[n]}" + if [[ "${arg}" =3D $((n+1)) || "${arg}" =3D "${ext}" ]]; then + has "${ext}" "${enabled[@]}" && + warnings=3D( "${warnings[@]}" "Extension ${arg} is already enabled"= ) + # will be uniquefied in gse_write_config_file + enabled=3D( "${enabled[@]}" "${ext}" ) + found=3Dyes + break + fi + done + [[ ${found} =3D "yes" ]] || errors=3D( "${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) by default" +} + +describe_disable_parameters() { + echo "" +} + +describe_disable_options() { + echo " : Extension id or number (from 'list' action)" +} + +gse_unenable() { + # remove $1 from the enabled array + local found e + local new_enabled=3D() + + for e in "${enabled[@]}"; do + if [[ "$1" =3D "${e}" ]]; then + found=3D"yes" + else + new_enabled=3D( "${new_enabled[@]}" "${e}" ) + fi + done + enabled=3D( "${new_enabled[@]}" ) + [[ "${found}" =3D "yes" ]] && return 0 + return 1 +} + +do_disable() { + local arg ext n + + gse_read_available + for arg in "$@"; do + local found=3D + for (( n =3D 0; n < ${#available[@]}; ++n )); do + ext=3D"${available[n]}" + if [[ "${arg}" =3D $((n+1)) || "${arg}" =3D "${ext}" ]]; then + gse_unenable "${ext}" || + warnings=3D( "${warnings[@]}" "Extension ${arg} is already marked a= s disabled" ) + found=3Dyes + break + fi + done + [[ ${found} =3D "yes" ]] || + errors=3D( "${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 and disable ones that haven't been = enabled earlier" +} + +do_update() { + # Run this after emerging a new extension package + gse_read_available + gse_write_override_file + gse_print_warnings +}