Classifique os ícones do Unity Launcher em ordem alfabética

3

Eu gosto de manter meus aplicativos Launcher bloqueados classificados em ordem alfabética, e eu queria saber se seria possível escrever um script que os classifica, então eu não tenho que fazer isso sozinho toda vez que eu adiciono um novo programa.

Se houver uma pasta em algum lugar que contenha todos os nomes e localizações dos ícones, eu conseguirá descobrir a partir daí.

    
por Steven Albertson 06.03.2015 / 22:47

2 respostas

0

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

  1. Copie o script abaixo em um arquivo vazio, salve-o como sort_launcher.py
  2. Teste-o rodando (em um terminal) o comando:

    python3 /path/to/sort_launcher.py
    
  3. 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.
por Jacob Vlijm 10.03.2015 / 11:09
0

Você pode obtê-los usando

gsettings get com.canonical.Unity.Launcher favorites

e defina-os com

gsettings set com.canonical.Unity.Launcher favorites VALUE

em que VALUE tem o mesmo formato do que você obteve de gsettings get ...

    
por Florian Diesch 06.03.2015 / 22:59