Atalho do iniciador de unidade para ícones não atribuídos a números

2

Eu realmente gosto do lançador do Unity, especialmente o fato de que posso facilmente alternar para (ou abrir) um aplicativo que conheço com o Super + [0-9] (em vez de ter que usar Alt + Tab para todas as guias abertas até que eu manchar meu aplicativo aberto).

Depois de algum tempo com os mesmos aplicativos fixos, pode-se lembrar perfeitamente qual número corresponde a qual aplicativo (1 para arquivos, 2 para o navegador, 3 para terminal, etc) e isso me faz sentir como um ninja quando eu alternar entre eles.

O fato é que agora, tendo usado os 10 slots padrão (do número 0-9) eu gostaria, por exemplo, de ter letras atribuídas ao resto dos ícones (aqueles sem número atribuído):

Eu estava apenas imaginando se é possível, e se sim, onde posso encontrar alguma documentação ou algumas diretrizes (não consegui encontrar nada até agora).

Muito obrigado antecipadamente.

PS: desculpe pela foto de má qualidade; Tentei tirar uma captura de tela, mas os números não apareceram enquanto eu cortava a área pressionando a tecla Super.

    
por vabada 28.07.2016 / 17:13

1 resposta

1

Use atalhos numerados > 10

Por padrão, Super + (número) é limitado a dez. Com um pequeno truque podemos estender isso. O script abaixo pode ser executado com qualquer número como argumento e, em seguida, ativará o ícone do ativador correspondente + 10 .

Um exemplo prático:

Comodecostume,Super+1ativaoprimeiroíconenolançador

  • Agora,quandopressionoAltSuper+1,o11ºíconeéativado
  • QuandopressionoAltSuper+2,o12ºíconeéativado

...eassimpordiante

Comofunciona

  • Oscriptlêolançadoratualcomocomando:

    gsettingsgetcom.canonical.Unity.Launcherfavorites
  • Comocadaícone(seforoíconedeumaplicativo)representaumarquivo.desktopem/user/share/applicationsou~/.local/share/applications,oscriptconsultaocomandodentrodoarquivo.desktopcorrespondente.[Essescomandos,noentanto,podemestaremdiferentesformas,oquenãoexplicareiaquipormotivosdesimplicidade.]

  • Posteriormente,oscripttentalevantarpossíveisjanelasexistentesdoaplicativo.Seistofalhar,aaplicaçãoaparentementenãoestárodandoeoscriptiniciaoaplicativo,similaraocomportamentodocomportamentousualdoSuper+(número).

Comoconfigurar

  1. Oscriptprecisadewmctrlparaserinstalado:

    sudoapt-getinstallwmctrl
  2. Copieoscriptemumarquivovazio,salve-ocomonumberlaunch.py.

    #!/usr/bin/env python3 import subprocess import os import sys dir1 = os.path.join(os.environ["HOME"], ".local/share/applications") dir2 = "/usr/share/applications" index = int(sys.argv[1])+9 def get_file(dr, app): try: return [os.path.join(dr, dt) for dt in os.listdir(dr) if dt in app][0] except IndexError: pass def clean_command(cmd): for s in ["%U", "%u", "%F", "%f"]: cmd = cmd.replace(s, "") return (cmd.strip()) def check_windowtype(wid): w_data = subprocess.check_output(["xprop", "-id", wid]).decode("utf-8") return not "_NET_WM_WINDOW_TYPE_DESKTOP" in w_data def get_window(appname): try: pid = subprocess.check_output(["pgrep", appname]).decode("utf-8").strip() except subprocess.CalledProcessError: return False else: wlist = subprocess.check_output(["wmctrl", "-lp"]).decode("utf-8").splitlines() try: wmatch = [w.split()[0] for w in wlist if pid in w] relevant = [wid for wid in wmatch if check_windowtype(wid) == True][0] subprocess.Popen(["wmctrl", "-ia", relevant]) return True except IndexError: return False def raise_app(): app = current_launcher()[index] f = get_file(dir1, app) f = f if f else get_file(dir2, app) cmd = [l.strip().split("=")[1] for l in open(f).readlines() if "Exec" in l][0] cmd = clean_command(cmd); tryraise = cmd.split()[0] tryraise = "soffice.bin" if tryraise == "libreoffice" else tryraise if get_window(tryraise) == False: subprocess.Popen(cmd.split()) def current_launcher(): get_current = subprocess.check_output(["gsettings", "get", "com.canonical.Unity.Launcher", "favorites"]).decode("utf-8") return [item for item in eval(get_current) if any([ "device://" in item, "application://" in item, ])] raise_app()
  3. Teste o script pelo comando:

    python3 /path/to/numberlaunch.py 3
    

    Em sua imagem de exemplo, isso deve aumentar ou iniciar o Gimp

  4. Se tudo funcionar bem, crie os seguintes atalhos, executando o (s) comando (s)

    Alt Super + 1 , executando o comando:

    python3 /path/to/numberlaunch.py 1
    

    Alt Super + 2 , executando o comando:

    python3 /path/to/numberlaunch.py 2
    
    Alt Super + 3 , executando o comando:

    python3 /path/to/numberlaunch.py 3
    

    ... e assim por diante

    N.B. Ao usar os schortcuts, certifique-se não de pressionar Super antes de Alt . Super terá precedência sobre as outras chaves se você fizer isso. Se isso incomoda você, escolha outros atalhos, como:

    Ctrl + Alt + (número)

Restrições

Infelizmente, existem algumas limitações:

  • O script apenas "vê" ícones, bloqueados para o inicializador. Não tenho certeza se isso é um problema para você, já que no seu exemplo, o lançador 11 parece estar bloqueado para o lançador.
  • O script não inicia atalhos ou dispositivos de rede, bloqueado para o iniciador. A razão é que as entradas de rede não fornecem nenhuma informação útil no comando para listar o iniciador (algo como '-'). Não tenho certeza se é possível recuperar as informações de qualquer maneira, ou se elas estão codificadas dentro do Unity. Outros dispositivos podem ser lidos, mas como eles parecem ser temporários na maioria dos casos (drives flash, por exemplo), eu não escrevi o código para ler as informações por enquanto.
  • Como o atalho é personalizado, ele não mostra os números dos ícones a serem criados. Como você mencionou, você precisará conhecê-los de cor.

Você terá que ver se essas restrições são de alguma importância para você.

    
por Jacob Vlijm 03.08.2016 / 11:45