
Sim, estou tendo uma péssima experiência de novato com o Apple Script.
Preciso abrir uma nova janela do Terminal no espaço da área de trabalho atual. NÃO me mova para outro espaço que tenha um Terminal em execução e abra outra janela do Terminal.
Claro, se o Terminal não estiver em execução, ele deverá iniciar um novo processo do Terminal.
Responder1
tell application "Terminal"
do script " "
activate
end tell
Parece estranho, mas tira vantagem de uma estranheza na forma como o Terminal lida com comandos "do script" recebidos; ele cria uma nova janela para cada uma. Na verdade, você pode substituir isso por algo útil, se quiser; ele executará o que você quiser logo após abrir a nova janela.
Responder2
Se você não tiver nenhum texto entre o script do " ", não receberá um prompt de comando extra no terminal.
tell application "Terminal"
do script ""
activate
end tell
Responder3
Posso pensar em três maneiras diferentes de fazer isso (as duas primeiras roubadas de outro lugar, mas esqueci onde). Eu uso o terceiro, que chama um shell script do applescript, porque quero abrir uma nova janela toda vez e porque era a mais curta.
Ao contrário do script incorporado ao 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 janela do Finder (ou seja, você não precisa ter uma pasta selecionada para abri-lo).
Também foram incluídas algumas funções bash para completar o círculo Finder > Terminal > 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 por meio 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. (BÔNUS) Alias do Bash para abrir uma nova janela do Finder para o diretório de trabalho atual em seu terminal
Adicione este alias ao seu .bash_profile.
alias f='open -a Finder ./'
5. (BÔNUS) Mude o diretório na janela do seu terminal para o caminho da janela frontal do Finder
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
}
Responder4
As respostas acima só funcionam se o Terminal já estiver em execução. Caso contrário, ele abre duas janelas do Terminal ao mesmo tempo - uma por causa do do script
e outra por causa de 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ê deseja executar comandos diretamente, você pode fazer isso pressionando as 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