Saya ingin menulis skrip yang menerjemahkan devilspie
's jendela aturan menjadi aturan compiz'. Pengaturan Compiz dapat diubah dengan gsettings
kunci di jalur org.compiz.profiles.unity.plugins.place
. Ada tiga kunci:viewport-matches
, viewport-x-values
dan viewport-y-values
. Sayangnya setiap kunci adalah larik, dan indeks elemen penting.
Gsettings
tidak memiliki dukungan array
jenis selain menulis ulang seluruh array sekaligus, dan saya perlu menempatkan item dalam array di lokasi tertentu (misalnya, di awal, indeks '1').
Saya tahu, bahwa jika saya tidak peduli dengan indeks, saya dapat menggunakan
gsettings set ${schema} ${key} \"`gsettings get ${schema} ${key} | sed s/.$//`, ${value}]\"
Pertanyaan melengkapi Bagaimana cara menghapus elemen dari larik gsettings dalam skrip?
Jawaban yang Diterima:
Skrip python3 berikut akan menyisipkan elemen baru pada indeks yang diberikan:
#!/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)])