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
.desktop
em/user/share/applications
ou~/.local/share/applications
,oscriptconsultaocomandodentrodoarquivo.desktop
correspondente.[Essescomandos,noentanto,podemestaremdiferentesformas,oquenãoexplicareiaquipormotivosdesimplicidade.]- Posteriormente,oscripttentalevantarpossíveisjanelasexistentesdoaplicativo.Seistofalhar,aaplicaçãoaparentementenãoestárodandoeoscriptiniciaoaplicativo,similaraocomportamentodocomportamentousualdoSuper+(número).
Comoconfigurar
Oscriptprecisade
wmctrl
paraserinstalado:sudoapt-getinstallwmctrl
Copieoscriptemumarquivovazio,salve-ocomo
numberlaunch.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()
-
Teste o script pelo comando:
python3 /path/to/numberlaunch.py 3
Em sua imagem de exemplo, isso deve aumentar ou iniciar o Gimp
-
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:
Alt Super + 3 , executando o comando:python3 /path/to/numberlaunch.py 2
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ê.