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