6 votes

Comment ajouter un élément au tableau gsettings à l'emplacement spécifique (donné par l'index) ?

Je veux écrire un script qui traduit devilspie dans les règles de compiz. Les paramètres de Compiz peuvent être modifiés par gsettings clés dans le chemin org.compiz.profiles.unity.plugins.place . Il existe trois clés : viewport-matches , viewport-x-values y viewport-y-values . Malheureusement, chaque clé est un tableau, et l'indice des éléments est important.

Gsettings manque de soutien de la part de array Je n'ai pas d'autre choix que de réécrire tout le tableau en une seule fois, et j'ai besoin de placer un élément dans le tableau à un endroit précis (par exemple, au début, à l'index '1').

Je sais que si je ne me soucie pas de l'index, je peux utiliser

gsettings set ${schema} ${key} \"`gsettings get ${schema} ${key} | sed s/.$//`, ${value}]\"

La question complète Comment supprimer un élément du tableau gsettings dans script ?

3voto

Sylvain Pineau Points 59212

Le script python3 script suivant insère de nouveaux éléments à un index donné :

#!/usr/bin/env python3

import argparse
import subprocess

parser = argparse.ArgumentParser()
parser.add_argument("schema", help="gsettings shema", metavar="SCHEMA")
parser.add_argument("key", help="gsettings key", metavar="KEY")
parser.add_argument("index",
                    help="KEY array index where VALUE(s) need to be inserted",
                    metavar="INDEX", type=int)
parser.add_argument("value",
                    help="gsettings VALUE(s) to add to the KEY array",
                    metavar="VALUE", nargs='*')

args = parser.parse_args()

array = eval(subprocess.check_output(["gsettings", "get", args.schema, args.key]))
for v in sorted(args.value, reverse=True):
    try:
        value = eval(v)
    except NameError:
        value = v
    array.insert(args.index, value)
subprocess.call(["gsettings", "set", args.schema, args.key, str(array)])

3voto

Fabrizio Points 51

Vous pouvez également le faire via un script de bash :

#!/bin/bash

SCHEMA="your.wanted.schema"
KEY="your-wanted-key"

STATUS=$(gsettings get ${SCHEMA} ${KEY})

# Optional proof, whether value to add already exsists
if [[ $STATUS == *"'to.add.value'"* ]]; then
    echo "to.add.value is already in the list!"
else
    gsettings set ${SCHEMA} ${KEY} "${STATUS%]*}, 'to.add.value']"
    echo "Added to.add.value to the list."
fi

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X