Applescript para abrir uma NOVA janela de terminal no espaço atual

11

Sim, estou tendo uma péssima experiência com o novo Apple Script.

Eu preciso abrir uma nova janela do Terminal no espaço atual da área de trabalho. NÃO me mova para outro espaço que tenha um Terminal em execução e abra outra janela do Terminal.

É claro que, se o Terminal não estiver em execução, ele deverá iniciar um novo processo do Terminal.

    
por zaf 04.10.2010 / 14:54

4 respostas

15
tell application "Terminal"  
    do script " "  
    activate  
end tell

Parece estranho, mas tira vantagem de uma esquisitice em como o Terminal lida com os comandos "do script" recebidos; cria uma nova janela para cada um. Você poderia realmente substituir isso por algo útil, se quiser; ele executará o que você quiser logo após abrir a nova janela.

    
por 06.11.2010 / 06:26
14

Se você não tiver nenhum texto entre o script "", você não receberá um prompt de comando extra no terminal.

tell application "Terminal"  
    do script ""  
    activate  
end tell
    
por 29.11.2011 / 21:52
6

Eu posso pensar em três maneiras diferentes de fazê-lo (os dois primeiros roubados de outro lugar, mas eu esqueço onde). Eu uso o terceiro, que chama um shell script do applescript, porque eu quero abrir uma nova janela toda vez e porque ela é a mais curta.

Ao contrário do script embutido no OS X desde pelo menos 10.10, todos eles abrem o terminal em qualquer diretório que seja o diretório de trabalho atual na sua janela de localização (ou seja, você não precisa ter uma pasta selecionada para abri-lo ).

Também incluiu algumas funções bash para completar o Finder > Terminal > Círculo do Finder.

1. Reutilize uma guia existente ou crie uma nova janela do Terminal:

tell application "Finder" to set myDir to POSIX path of (insertion location as alias)
tell application "Terminal"
    if (exists window 1) and not busy of window 1 then
        do script "cd " & quoted form of myDir in window 1
    else
        do script "cd " & quoted form of myDir
    end if
    activate
end tell

2. Reutilize uma guia existente ou crie uma nova guia Terminal:

tell application "Finder" to set myDir to POSIX path of (insertion location as alias)
tell application "Terminal"
    if not (exists window 1) then reopen
        activate
    if busy of window 1 then
        tell application "System Events" to keystroke "t" using command down
    end if
    do script "cd " & quoted form of myDir in window 1
end tell

3. Gere uma nova janela a cada vez através de um script de shell chamado de um applescript

tell application "Finder"
    set myDir to POSIX path of (insertion location as alias)
    do shell script "open -a \"Terminal\" " & quoted form of myDir
end tell

4. (BONUS) Alias de Bash para abrir uma nova janela de localização para o diretório de trabalho atual em seu terminal

Adicione este alias ao seu .bash_profile.

alias f='open -a Finder ./' 

5. (BONUS) Altere o diretório na sua janela de terminal para o caminho da janela do Finder frontal

Adicione esta função ao seu .bash_profile.

cdf() {
      target='osascript -e 'tell application "Finder" to if (count of Finder windows) > 0 then get POSIX path of (target of front Finder window as text)''
        if [ "$target" != "" ]; then
            cd "$target"; pwd
        else
            echo 'No Finder window found' >&2
        fi
}
    
por 23.02.2016 / 22:48
0

As respostas acima só funcionam se o Terminal já estiver em execução. Caso contrário, ele abre duas janelas do Terminal de uma só vez - uma por causa do do script e uma por causa do activate .

Você pode evitar isso com um simples if ... else:

if application "Terminal" is running then
    tell application "Terminal"
        do script ""
        activate
    end tell
else
    tell application "Terminal"
        activate
    end tell
end if

Bônus:

Se você quer executar comandos diretamente, você pode fazer isso através de pressionamentos de teclas (não muito elegante - eu sei! Mas funciona)

[...]
else
    tell application "Terminal"
        activate
        tell application "System Events" to keystroke "ls -la" 
        tell application "System Events" to key code 36
    end tell
end if
    
por 11.05.2016 / 11:32