Mantenha o lançador em ordem alfabética
A execução do script abaixo em segundo plano (veja abaixo como fazer isso) manterá seu lançador classificado em ordem alfabética de a a z:
Os três principais itens lançadores antes de executar o script: Gnome-terminal, Virtualbox, LibreOffice
Executandooscript:dconf-editor,arquivos,Firefox
O que o script faz
Os nomes (interface-) dos aplicativos são definidos em .desktop
files. Esses arquivos podem ser armazenados em /usr/share/applications
ou ~/.local/share/applications
. Este último "anula" o global, se o local existir.
O script verifica as alterações na lista de iniciadores, executando (em um loop, a cada dois segundos) o comando:
gsettings get com.canonical.Unity.Launcher favorites
Isso retorna uma lista de itens do lançador, ordenados como a ordem atual do lançador.
Se o lançador mudar (por exemplo, se você adicionar um novo lançador), o script pesquisará os nomes da interface de referência nos arquivos .desktop
(preservando a precedência dos arquivos .desktop
locais) e classificará os itens do iniciador, de acordo para esses nomes de interface.
Posteriormente, o script define o inicializador classificado pelo comando:
gsettings set com.canonical.Unity.Launcher favorites "<sorted_launcheritems_list>"
Como usar
- Copie o script abaixo em um arquivo vazio, salve-o como
sort_launcher.py
-
Teste-o rodando (em um terminal) o comando:
python3 /path/to/sort_launcher.py
-
Se funcionar bem, adicione-o aos seus aplicativos de inicialização: Dash > Aplicativos de inicialização > Adicione o comando:
/bin/bash -c "sleep 15&&python3 /path/to/sort_launcher.py"
O 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
Notas
- O script é classificado por nomes dos aplicativos em inglês dos EUA
- No monitor do sistema, o script mostra
cpu 0%
, o que significa que o script não adiciona praticamente nada ao carregamento do processador.