Gostaria de imitar o uso do Alfred no Mac OS X, onde, se você tentar abrir um aplicativo depois de procurá-lo, ele abrirá apenas uma nova janela se o programa ainda não estiver em execução, caso contrário, o foco será o instância atualmente em execução desse aplicativo. Existe alguma maneira de alterar o comportamento padrão do iniciador para verificar isso antes de abrir uma nova janela?
16
.desktop
arquivos. Se você substituir o comando no.desktop
arquivo, no entanto, o botão direito do mouse em abrir com a opção será quebrado.Respostas:
Atualização em 7 de abril: Uma versão diferente foi adicionada e encontrou Albert, veja a atualização e o bônus abaixo !!!
Sobre a funcionalidade do traço : Você perguntou " Existe alguma maneira de alterar o comportamento padrão do iniciador para verificar isso antes de abrir uma nova janela ". A resposta básica é: não, como usuário comum, você não tem como adicionar esse comportamento ao traço. No entanto, se houver um desenvolvedor de escopo de unidade que esteja disposto a implementá-lo, você poderá abordá-lo ou desenvolver você mesmo se tiver determinação e vontade de aprender. Minhas habilidades de codificação são muito modestas, portanto, uso scripts de shell e o front-end gráfico disponível para os scripts como solução alternativa.
Informação relacionada
Post original:
Eu escrevi um script que usa o zenity dialog e o wmctrl para alcançar o que você pediu. Observe que este é um script gráfico, o que significa que funcionará apenas com o Windows, na GUI, e não funcionará se você tentar iniciar algo no tty. Além disso, pelo que entendi, Alfred faz exatamente a mesma coisa. Você pode criar um atalho na área de trabalho ou um atalho do iniciador, conforme descrito aqui e aqui .
O script:
Notas laterais: na versão anterior, o script usava echo $ ?, para testar se as expressões anteriores foram encerradas com êxito. Conforme a sugestão de muru (da edição), mudei o código para uma versão um pouco mais compacta, então sugiro que você dê uma olhada na versão anterior e na atual.
Além disso, anteriormente
wmctrl -a $MYPROG
não funcionava com o teste do google-chrome ou chromium-browser; por algum motivo estúpido, alguns programas têm a propriedade WM_CLASS da janela em maiúscula, enquanto o programa listado pordpkg --get-selections
é minúsculo (basta lerman wmctrl
e executarwmctrl -lx
, você saberá). Adicionando -ax deve cuidar disso. O script exibe a janela do cromo já aberta, como deveriaOutra coisa - o wmctlr é um pouco estranho, pois às vezes precisa de um atraso (tinha experiência com ele em outro script), então tive que adicionar uma
sleep 1
linha. Anteriormente, seria meio que ligado e desligado com o Firefox, mas agora funciona muito bem.O script em ação
Na animação abaixo, você pode ver que, na primeira execução do script, há uma instância do firefox open, e o script muda o foco para essa janela; no segundo teste, abro uma nova instância do google-chrome, que não estava aberta anteriormente. (Observação: se você é cuidadoso com a área de trabalho, a propósito, isso é openbox com cairo dock)
Por sugestão nos comentários, animação incorporada removida, apenas link postado. Relate se está quebrado, por favor! http://i.stack.imgur.com/puuPZ.gif
Atualização, 7 de abril
Aprimorei um pouco o script para criar todos os programas listados na caixa de entrada suspensa do zenity. Agora, o usuário não precisa memorizar cada programa, mas pode simplesmente rolar uma lista deles usando as teclas de seta ou simplesmente abrir o menu suspenso. Além disso, esta versão aprimorada aumenta as janelas não pelo nome, mas pelo ID da janela, o que proporciona um desempenho muito melhor. Observe que a maneira como leio os arquivos .desktop é meio redundante, usando o comando cut duas vezes, mas como meu script-fu não é tão bom até agora, isso é tudo o que posso fazer. Sugestões de melhorias são bem-vindas!
Bônus:
Na verdade, eu encontrei o Albert , que é a versão Linux do Alfred, mas ainda não tentei. Vale a pena conferir embora. No entanto, como Jacob já observou, ainda é um buggy.
Existe um aplicativo chamado Gnome-Do, que se parece graficamente com Alfred, mas não tem a mesma funcionalidade que este script.
Deixe-me saber se você gosta deste script, se houver algo que precise ser corrigido e não se esqueça de votar na resposta se achar útil
fonte
dpkg --get-selectons
. Iniciar o escritor do libreoffice digitando "writer" não funcionará, mas você poderá fazer um link simbólico para ele na sua pasta ~ / bin, / bin ou / usr / bin ou usar o alias em .bashrc ou .profile.1. Dê o segundo
Abaixo de um script que pode ser usado como uma alternativa ao Dash, quando se trata de executar aplicativos, conforme descrito em sua pergunta.
Existe uma janela com a mesma funcionalidade que o Dash; se digitar um ou mais caracteres do aplicativo, o aplicativo aparecerá na lista. Pressione Enterpara iniciar ou aumentar o aplicativo, dependendo se ele já estiver em execução ou não.
Você pode chamá-lo a partir de uma combinação de teclas de atalho ou definir um ícone no iniciador para usá-lo de maneira semelhante ao Dash (veja mais abaixo), ou ambos.
O script
Como usar
O script precisa estar
wmctrl
instalado:Então:
dash_alternative.py
Adicione-o a uma combinação de teclas de atalho: Escolha: Configurações do sistema> "Teclado"> "Atalhos"> "Atalhos personalizados". Clique no "+" e adicione o comando:
Explicação
Quando o script é executado, ele lista todos os aplicativos, representados em
/usr/share/applications
. Ele pesquisa os.dektop
arquivos, criando uma lista de todos os nomes de aplicativos (da primeira linha "Name =") e o comando para executar o aplicativo (da primeira linha "Exec =").Posteriormente, é criada uma lista do Zenity, apresentando todos os aplicativos de maneira ordenada.
Sempre que um aplicativo é selecionado, o script procura na lista de processos em execução se o aplicativo estiver em execução. Nesse caso, a janela correspondente é elevada. Caso contrário, uma nova instância é aberta.
Notas
Para executar o script em 12.04 (desde que a pergunta original foi marcada,
12.04
altere o shebang para#!/usr/bin/env python
e execute-o pelo comandoTanto quanto eu testei, o script funciona bem. Comandos e seus nomes de processos (não-) correspondentes (por exemplo,
LibreOffice
<>soffice.bin
), diferentes tipos de janelas (nautilus
com vários tipos de janelas diferentes, além de janelas "reais"), vários pids por aplicativo (Chromium
,Google-chrome
) podem causar exceções que eu consertei nos exemplos acima. Se alguém encontrar um problema, mencione-o.2. Adicional: configurando-o como uma alternativa ao Dash "real" para aplicativos em execução
Salve o ícone abaixo (clique com o botão direito do mouse> seguro como) como
dash_alternative.png
Copie o código abaixo em um arquivo vazio, salve-o
~/.local/share/applications
comodash_thesecond.desktop
. Defina os caminhos corretos para/path/to/dash_alternative.py
(o script) e/path/to/dash_alternative.png
(o ícone)Arraste o
.desktop
arquivo para o iniciador:fonte
.desktop
arquivos:~/.local/share/applications
. Pensei em limitar a pesquisa a aplicativos instalados globalmente.Para o iniciador (o painel vertical no lado esquerdo da tela), esse já é o comportamento padrão, pois é a interface de alternância de tarefas.
Para o traço (o grande pedaço que se abre quando você clica no logotipo do Ubuntu), não há como mudar o comportamento dessa maneira, sem uma modificação presumivelmente significativa no próprio código-fonte.
No entanto, alguns aplicativos já podem fazer isso, pois foram projetados para se comportar dessa maneira. Todos os aplicativos não são, e não devem necessariamente ser, implementados dessa maneira.
Como outro recurso, porém, se você abrir a janela, espalhe com Super + We começar a digitar o nome de um aplicativo, as janelas desse aplicativo serão as únicas exibidas.
fonte