GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Wie füge ich ein Element zum Gsettings-Array an der bestimmten Stelle hinzu (angegeben durch den Index)?

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

Ubuntu
  1. Wie füge ich am Ende einer Datei einen Zeilenumbruch hinzu?

  2. Wie füge ich dem Launcher Ordnerverknüpfungen hinzu?

  3. Wie füge ich Indikator-datetime zum Panel hinzu?

  4. So verwenden Sie den Index-Manager in cPanel

  5. Wie füge ich einen Ordner zur Seitenleiste in Ubuntu hinzu?

So fügen Sie dem Debian 10-Terminal ein Hintergrundbild hinzu

So fügen Sie Text am Anfang einer Datei in Linux hinzu

So fügen Sie eine Anwendung zum Dock in einem elementaren Betriebssystem hinzu

So fügen Sie eine Anwendung zur Liste der geöffneten Anwendungen in Ubuntu hinzu

Wie füge ich eine Anwendung zur Liste der mit Anwendungen geöffneten hinzu?

Wie füge ich ein Lesezeichen im Nautilus-Ordner-Explorer hinzu?