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?
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)])
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