Quiero escribir un script que traduzca devilspie
Las reglas de la ventana se convierten en reglas de compilación. La configuración de Compiz se puede cambiar mediante gsettings
claves en la ruta org.compiz.profiles.unity.plugins.place
. Hay tres claves:viewport-matches
, viewport-x-values
y viewport-y-values
. Desafortunadamente, cada clave es una matriz y el índice de los elementos es importante.
Gsettings
carece de soporte de array
tipos que no sean reescribir toda la matriz a la vez, y necesito colocar el elemento en la matriz en la ubicación específica (digamos, al principio, índice '1').
Lo sé, si no me importa el índice, puedo usar
gsettings set ${schema} ${key} \"`gsettings get ${schema} ${key} | sed s/.$//`, ${value}]\"
La pregunta complementa ¿Cómo eliminar un elemento de la matriz gsettings en el script?
Respuesta aceptada:
El siguiente script de python3 insertará nuevos elementos en un índice dado:
#!/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)])