Ich möchte ein Skript schreiben, das devilspie
übersetzt 's-Fensterregeln in compiz'-Regeln. Compiz-Einstellungen können durch gsettings
geändert werden Schlüssel im Pfad org.compiz.profiles.unity.plugins.place
. Es gibt drei Schlüssel:viewport-matches
, viewport-x-values
und viewport-y-values
. Leider ist jeder Schlüssel ein Array und der Index der Elemente ist wichtig.
Gsettings
fehlt jegliche Unterstützung von array
Typen, die nicht das gesamte Array auf einmal umschreiben, und ich muss das Element im Array an der bestimmten Stelle platzieren (z. B. am Anfang, Index „1“).
Ich weiß, dass ich, wenn mir der Index egal ist,
verwenden kanngsettings set ${schema} ${key} \"`gsettings get ${schema} ${key} | sed s/.$//`, ${value}]\"
Die Frage ergänzt How to remove element from gsettings array in script?
Akzeptierte Antwort:
Das folgende Python3-Skript fügt neue Elemente an einem bestimmten Index ein:
#!/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)])