web-dev-qa-db-fra.com

Trier les icônes Unity Launcher par ordre alphabétique

J'aime garder mes applications Launcher verrouillées classées par ordre alphabétique, et je me demandais s'il serait possible d'écrire un script qui les trie, donc je n'ai pas à le faire moi-même chaque fois que j'ajoute un nouveau programme.

S'il y a un dossier quelque part qui contient tous les noms et emplacements des icônes, je devrais pouvoir le comprendre à partir de là.

3
Steven Albertson

Gardez le lanceur trié par ordre alphabétique

L'exécution du script ci-dessous en arrière-plan (voir plus loin comment faire cela) gardera votre lanceur trié alphabétiquement de a à z:

Les trois premiers éléments du lanceur avant d'exécuter le script: Gnome-terminal, Virtualbox, LibreOffice

enter image description here

Exécution du script: dconf-editor, Files, Firefox

enter image description here

Ce que fait le script

Les noms (d'interface) des applications sont définis dans les fichiers .desktop. Ces fichiers peuvent être stockés dans /usr/share/applications Ou ~/.local/share/applications. Ce dernier "annule" le global, s'il existe local.

Le script vérifie les changements dans la liste du lanceur, exécutant (en boucle, toutes les deux secondes) la commande:

gsettings get com.canonical.Unity.Launcher favorites

Cela renvoie une liste des éléments du lanceur, classés comme l'ordre actuel du lanceur.

Si le lanceur change (par exemple si vous ajoutez un nouveau lanceur), le script recherche les noms d'interface de référence dans les fichiers .desktop (En préservant la priorité des fichiers locaux .desktop) Et trie le lanceur éléments, selon ces noms d'interface.

Par la suite, le script définit le lanceur trié par la commande:

gsettings set com.canonical.Unity.Launcher favorites "<sorted_launcheritems_list>"

Comment utiliser

  1. Copiez le script ci-dessous dans un fichier vide, enregistrez-le sous sort_launcher.py
  2. Testez-le en exécutant (dans un terminal) la commande:

    python3 /path/to/sort_launcher.py
    
  3. Si cela fonctionne correctement, ajoutez-le à vos applications de démarrage: Dash> Startup Applications> Add the command:

    /bin/bash -c "sleep 15&&python3 /path/to/sort_launcher.py"
    

Le script

#!/usr/bin/env python3
import subprocess
import os
import time

home = os.environ["HOME"]
# define the two directories to search .desktop files, the string to identify application launchers
dir1 = "/usr/share/applications/"; dir2 = home+"/.local/share/applications/"; s = "application://"
# the key to read / write the launcher
lget = "gsettings get "; lset = "gsettings set "; key = "com.canonical.Unity.Launcher favorites"

# read current launcher
def read_current():
    return eval(subprocess.check_output(["/bin/bash", "-c", lget+key]).decode("utf-8").strip())

def sort_launcher(launchers):
    # split up launcher items in applications / others
    apps = []; others = []
    for it in launchers:
        apps.append(it) if it.startswith(s) else others.append(it)
    # create a sorted application (launcher-) list
    sort_list = []
    app_launchers = []
    for item in apps:
        check = get_interfacename(item)
        if check:
            app_launchers.append([check, item])
    app_launchers.sort(key=lambda x: x[0])
    # set the sorted launcher
    launcher_set = [item[1] for item in app_launchers]+others
    subprocess.Popen(["/bin/bash", "-c", lset+key+' "'+str(launcher_set)+'"'])

def get_interfacename(item):
    name = []
    for dr in [dir1, dir2]:
        subject = dr+item.replace(s, "")
        try:
            app = [l.strip() for l in open(subject).readlines() if l.startswith("Name=")][0]
            name.append(app)
        except FileNotFoundError:
            pass
        else:
            name.append(app)
            return name[-1].strip("Name=").lower()

# check every two seconds for changes, update launcher if necessary
current_launcher1 = read_current()
sort_launcher(current_launcher1)
while True:
    time.sleep(2)
    current_launcher2 = read_current()
    if current_launcher1 != current_launcher2:
        sort_launcher(current_launcher2)
    else:
        pass
    current_launcher1 = current_launcher2

Remarques

  • Le script trie par noms US-anglais des applications
  • Dans le moniteur système, le script affiche cpu 0%, Ce qui signifie que le script n'ajoute pratiquement rien à la charge du processeur.
0
Jacob Vlijm

Vous pouvez les obtenir en utilisant

gsettings get com.canonical.Unity.Launcher favorites

et les mettre avec

gsettings set com.canonical.Unity.Launcher favorites VALUE

VALUE a le même format que ce que vous avez obtenu de gsettings get ...

0
Florian Diesch