web-dev-qa-db-fra.com

Édition de gsettings; Ajouter une icône au lanceur par commande

Bien qu'il y ait plusieurs articles sur Internet sur le sujet, je n'ai pas encore trouvé de solution:
Mon objectif est de trouver une commande qui ajoute une icône (fichier .desktop) au programme de lancement d'Unity et l'affiche immédiatement. Quand j'ouvre dconf-editor (bureau> Unity> Launcher) et que j'ajoute un élément à la liste des favoris, cela s'affiche immédiatement dans le lanceur. Mon idée est donc qu'il doit être possible de faire la même chose par commande. Les solutions que j'ai trouvées jusqu'à présent sur Internet ne font pas le travail.

Je dois le faire par commande, à utiliser dans un éditeur de liste rapide sur lequel je travaille.

Vous rendriez quelqu'un incroyablement heureux si vous pouviez aider

9
Jacob Vlijm

Vous pouvez aussi agir sur dconf avec l'outil gsettings.

gsettings set com.canonical.Unity.Launcher favorites "$(gsettings get com.canonical.Unity.Launcher favorites | sed "s/, *'yourapp' *//g" | sed "s/'yourapp' *, *//g" | sed -e "s/]$/, 'yourapp']/")"
12
jasmines

La réponse acceptée est acceptable, mais elle est lourde en raison de l'utilisation de sed et de nombreuses séquences d'échappement. La solution Pythonic ci-dessous est beaucoup plus propre et permet simplement de spécifier le fichier .desktop que vous voulez ajouter, et éventuellement vous pouvez spécifier une position dans le lanceur.

Par exemple,

python launcher_append_item.py sakura.desktop 3  

placerait sakura comme 4ème icône (car les index de liste commencent par 0). Courir simplement

python launcher_append_item.py sakura.desktop  

ajouterait l'icône à la liste.

Pour plus de réflexion, on pourrait même ajouter une option permettant de remplacer un élément spécifique du lanceur par un autre élément. Mais c'est un exercice pour la contemplation future :)

code source

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gio,Gtk
import dbus
import sys

def gsettings_get(schema,path,key):
    if path is None:
        gsettings = Gio.Settings.new(schema)
    else:
        gsettings = Gio.Settings.new_with_path(schema,path)
    return gsettings.get_value(key)

def gsettings_set(schema,path,key,value):
    if path is None:
        gsettings = Gio.Settings.new(schema)
    else:
        gsettings = Gio.Settings.new_with_path(schema,path)
    return gsettings.set_strv(key,value)


current_list = list(gsettings_get('com.canonical.Unity.Launcher',None,'favorites'))

if sys.argv[2]:
   current_list.insert(int(sys.argv[2]),'application://' + sys.argv[1])
else:
   current_list.append(  'application://' + sys.argv[1]  )

gsettings_set( 'com.canonical.Unity.Launcher', None, 'favorites',current_list  )
2
Sergiy Kolodyazhnyy