Como ligar uma chave de forma que ela alterne entre um aplicativo específico e o aplicativo atual?

2

Eu quero vincular uma chave de modo que um aplicativo específico (no meu caso, Pidgin ou Calculator) obtenha o foco, quando terminar e pressionar a tecla novamente, o foco retornará ao aplicativo anteriormente focado, como se eu nunca tivesse mudado foco.

Por exemplo:

Antes:

  

Chromium - Alt + Separador → Ficheiros - Alt + Separador → Chromium

Uso de ligação de chaves:

  

Chromium - (tecla de ligação) → Pidgin (responder ao chat) ou Calc (calcular alguma coisa) - (tecla de ligação) → Chromium

Depois de usar acima:

  

Chromium - Alt + Guia → Arquivos (não Pidgin) - Alt + Guia → Chromium

Outras alternativas são bem vindas.

    
por arunkant 25.05.2013 / 20:01

1 resposta

0

A alternância entre dois aplicativos pode ser feita, como você sabe, com Alt + Tab . Mas é projetado percorrer todas as janelas abertas por ordem Z; então toda vez que um terceiro aplicativo é ativado, a ordem Z muda e geralmente é chato deixar os dois aplicativos que você está interessado em sincronizar para trocar.

Eu li sua exigência de que você tem um aplicativo principal Chromium e um aplicativo secundário, vamos com gnome-calculator , que você alterna com frequência e gostaria de alternar entre eles usando uma única tecla de atalho.

Você pode, no entanto, criar esse comportamento com um script e uma associação de teclas personalizada. Para criar o script, queria algo simples (para mim) para entender e que pudesse ser facilmente modificado sem compilar; então eu usei python.

#!/usr/bin/python
import gtk
import re
import sys
import time
import wnck

#windows are found through the titlebar, not the app name
#edit the titles to change the apps
titlePrimaryApp = re.compile(".*Chromium*")
titleSecondaryApp = re.compile("Calculator")

screen = wnck.screen_get_default()

#needed for the code that gets the windows list to work
while gtk.events_pending():
  gtk.main_iteration()

active_window = screen.get_active_window()
open_windows = screen.get_windows()

#if the primary app is already activated, find the secondary app, and activate it
if titlePrimaryApp.match(active_window.get_name()):
  for w in open_windows:
    if titleSecondaryApp.match(w.get_name()):
      w.activate(int(time.time()))

#otherwise, activate the primary app
else:
  for w in open_windows:
    if titlePrimaryApp.match(w.get_name()):
      w.activate(int(time.time()))

Para usar este script:

  1. Salve em um arquivo como myswitcher.py . Um bom lugar para isso é /home/<user>/bin .
  2. Torne-o executável: chmod +x myswitcher.py
  3. Você precisará de: sudo apt-get install python-wnck . Esta é a biblioteca que funciona com janelas Gtk. Não é instalado por padrão.
  4. Vincule o script a um atalho de teclado.

    A maneira mais fácil de fazer isso é criar um atalho personalizado em System Settings >> Keyboard >> Shortcuts >> Custom Shortcuts .

  5. Depois de destacar Atalhos personalizados na lista à esquerda, clique no sinal de adição para adicionar um atalho.

  6. Na janela pop-up, escolha um nome para o atalho e digite o comando /path/to/myswitcher.py .

  7. O novo atalho será adicionado à lista de atalhos na janela. À direita do nome, estará a palavra desativada . Defina a associação de teclas clicando na palavra desativada e, em seguida, digitando a combinação de teclas desejada.

  8. Certifique-se de escolher uma associação de teclas que não esteja em conflito com outros programas. Essas ligações são definidas em um nível inferior e serão precedidas do script. Eu escolhi Ctrl + \ (barra invertida), pois ele não é usado por mais nada e é mais ou menos a imagem espelhada de Alt + Tab (pelo menos no meu layout de teclado).

  9. Você precisa fazer logout e login novamente antes que a associação de teclas personalizada funcione.

Solicite ajuda para o script:

Eu trabalhei com a maior parte da lógica do script antes de procurar exemplos (e não há falta de exemplos wnck por aí); mas eu preciso creditar esta resposta no StackOverflow que resolveu alguns problemas que eu estava tendo com o uso de expressões regulares, a sintaxe para passar no registro de data e hora do gtk e, o mais importante, fornecer as linhas-chave sobre os eventos do Gtk. Sem essas duas linhas, get_windows retorna uma lista vazia.

    
por chaskes 08.01.2014 / 06:21