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à.
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
Exécution du script: dconf-editor, Files, Firefox
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>"
sort_launcher.py
Testez-le en exécutant (dans un terminal) la commande:
python3 /path/to/sort_launcher.py
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"
#!/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
cpu 0%
, Ce qui signifie que le script n'ajoute pratiquement rien à la charge du processeur.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
où VALUE
a le même format que ce que vous avez obtenu de gsettings get ...