Voglio scrivere uno script che traduca devilspie "regole della finestra in regole di compiz". Le impostazioni di Compiz possono essere modificate da gsettings chiavi nel percorso org.compiz.profiles.unity.plugins.place . Ci sono tre chiavi:viewport-matches , viewport-x-values e viewport-y-values . Sfortunatamente ogni chiave è un array e l'indice degli elementi è importante.
Gsettings manca di qualsiasi supporto per array tipi diversi dalla riscrittura dell'intero array in una volta e ho bisogno di posizionare l'elemento nell'array nella posizione specifica (ad esempio, all'inizio, l'indice '1').
So che se non mi interessa l'indice, posso usare
gsettings set ${schema} ${key} \"`gsettings get ${schema} ${key} | sed s/.$//`, ${value}]\"
La domanda completa Come rimuovere l'elemento dall'array gsettings nello script?
Risposta accettata:
Il seguente script python3 inserirà nuovi elementi in un determinato indice:
#!/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)])