Como fazer clicar no ícone no dock == abrir nova instância

16

Tenho vários aplicativos no meu dock que podem ter várias instâncias abertas (por exemplo, Chrome, iTerm, Sublime etc.)

Quando clico em um dos ícones, desejo que uma nova janela seja aberta (isso é o que acontece se nenhuma janela estiver aberta). No entanto, se uma instância já estiver aberta, ela me levará a essa instância.

Isso fica especialmente irritante quando a instância está em outra instância da área de trabalho e faz com que minha área de trabalho mude.

Existe uma configuração que você pode definir para que, ao clicar no ícone, ele abra uma nova janela em vez de redirecioná-lo para uma janela já aberta?

JD Isaacks
fonte
2
Eu poderia mostrar como fazer isso com um pouco de AppleScript que você pode manter no Dock.
Ian C.
Ou você pode simplesmente pressionar ctrl + n.
28712 CoffeeRain
3
@CoffeeRain Ctrl-N? O que é isso? Não faz nada no iTerm e no Chrome. Eu acho que você quis dizer Cmd-N - mas isso só funciona se o aplicativo estiver em primeiro plano.
Ian C.
@IanC. Desculpe, sim, eu quis dizer Cmd-N.
27412 CoffeeRain

Respostas:

17

Você pode escolher algo junto com algum AppleScript e uma colagem inteligente de imagens de ícones. Veja como você faria isso no iTerm / iTerm2.

Abra o Editor AppleScript e cole no seguinte AppleScript:

set myapp to "iTerm"
on appIsRunning(appName)
    tell application "System Events" to (name of processes) contains appName
end appIsRunning
if appIsRunning(myapp) then
    # What you do here will depend on the program. This works for
    # iTerm but you'll need to look up the actions for other programs
    # since this bit is iTerm-specific.
    tell application "iTerm"
        set myterm to (make new terminal)
        tell myterm
            launch session "Default"
        end tell
    end tell
else
    tell application myapp
        activate
    end tell
end if

Você pode usar o botão Executar no editor para testar se funciona. Se você deseja abrir um perfil diferente, altere "Padrão" na linha 12 para o nome do perfil que você deseja abrir.

Agora salve este AppleScript. Na caixa de diálogo Salvar em "Formato do arquivo", na parte inferior, selecione "Aplicativo" na lista.

Salvei o meu como "New iTerm.app" na minha área de trabalho.

Agora, toda vez que clico em "Novo iTerm.app" na minha área de trabalho, recebo uma nova janela do iTerm. Posso arrastar "Novo iTerm.app" para o meu Dock e será um ícone do Dock no qual posso clicar a qualquer momento que desejar abrir uma nova janela do iTerm. Mas o ícone é o ícone AppleScript genérico.

Vamos mudar para o ícone do iTerm. Selecione "Novo iTerm.app" na área de trabalho e clique em Cmd-I para exibir a tela de propriedades do aplicativo.

Agora navegue para /Applicationsuma janela do Finder, encontre o iTerm na lista de aplicativos instalados, selecione-o e clique em Cmd-I para abrir a tela de propriedades do aplicativo iTerm.

Clique no ícone na janela de informações do iTerm para obter uma sombra azul suave ao seu redor. Pressione Cmd-C para copiar o ícone para a área de transferência.

Agora clique no ícone na janela de informações "New iTerm.app" e pressione Cmd-V para colar o ícone do iTerm no aplicativo "New iTerm.app".

Copiando o ícone do iTerm para o Novo iTerm

Agora ele deve ter um ícone do iTerm.

Você pode mover o "Novo iTerm.app" para sua /Applicationspasta, se quiser. Arraste-o da pasta em que você decide mantê-lo, de volta ao seu dock, e agora você pode clicar nele no Dock para abrir uma nova janela do iTerm a cada clique.

Se você deseja distingui-lo do ícone do iTerm.app Dock em execução, considere colar o ícone em um editor de imagens como o Pixelmator e adicionar um grande vermelho +a ele, para que seja claramente identificado como o ícone a ser pressionado para um novo iTerm janela em vez do ícone para pressionar para ver o aplicativo existente, abra o iTerm.

Aqui estão mais alguns scripts para alguns outros aplicativos para você personalizar as coisas:

Google Chrome (Nova Janela)

set myapp to "Google Chrome"
on appIsRunning(appName)
    tell application "System Events" to (name of processes) contains appName
end appIsRunning
if appIsRunning(myapp) then
    tell application "Google Chrome"
        make new window
    end tell
else
    tell application myapp
        activate
    end tell
end if

Google Chrome (nova guia)

set myapp to "Google Chrome"
on appIsRunning(appName)
    tell application "System Events" to (name of processes) contains appName
end appIsRunning
if appIsRunning(myapp) then
    tell application "Google Chrome"
        make new tab at end of tabs of window 1
    end tell
else
    tell application myapp
        activate
    end tell
end if

Texto sublime 2

Infelizmente, o ST2 não parece ter extensões acessíveis por AppleScript. Você sempre pode dar uma olhada na ferramenta de linha de comando do OS X que o ST2 acompanha . Você pode chamar isso de um script simples no Dock para abrir uma nova janela no ST2. Então:

set myapp to "Sublime Text 2"
on appIsRunning(appName)
    tell application "System Events" to (name of processes) contains appName
end appIsRunning
if appIsRunning(myapp) then
    # Assumes you've installed the subl command line tool for ST2
    # in to /usr/local/bin. Adjust accordingly.
    do shell script "/usr/local/bin/subl --new-window"
else
    tell application myapp
        activate
    end tell
end if
Ian C.
fonte
2
Ótima resposta com exemplos claros, cobrindo diferentes casos de uso e detalhes! Obrigado!
Adam Davis
@AdamDavis Estou apenas começando com o AppleScript, por isso foi um bom exercício testar o que aprendi.
Ian C.
Isso poderia ser usado para obter o nome do aplicativo em execução no momento?
William
Existe uma maneira de verificar se o aplicativo está sendo executado E NÃO está na área de trabalho atual? Eu adoraria uma nova janela apenas se a janela existente estiver em outra área de trabalho.
adamdport