web-dev-qa-db-fra.com

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

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

Gsettings ne prend pas en charge les types array autres que la réécriture d'un tableau entier à la fois, et je dois placer l'élément dans le tableau à l'emplacement spécifique (disons, au début, l'index '1') .

Je sais que si je me fiche de l'index, je peux utiliser

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

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

2
Adam Ryczkowski

Le script python3 suivant insérera 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)])
2
Sylvain Pineau

Vous pouvez également le faire via un script 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
1
Bjarne Roß