Applescript pour ouvrir une nouvelle fenêtre de terminal dans l'espace actuel

14

Oui, j'ai une terrible expérience de débutant avec Apple Script.

J'ai besoin d'ouvrir une nouvelle fenêtre de terminal dans l'espace de bureau actuel. PAS me déplacer vers un autre espace qui a un terminal en cours d'exécution, puis ouvrez une autre fenêtre de terminal.

Bien sûr, si Terminal n'est pas en cours d'exécution, il doit démarrer un nouveau processus Terminal.

zaf
la source

Réponses:

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

Cela semble étrange, mais il profite d'une bizarrerie dans la façon dont Terminal gère les commandes entrantes "faire script"; il crée une nouvelle fenêtre pour chacun. Vous pouvez réellement remplacer cela par quelque chose d'utile si vous le souhaitez; il exécutera tout ce que vous voulez juste après avoir ouvert la nouvelle fenêtre.

Justin Mrkva
la source
1
Cela fonctionne, mais OSX déplace toujours les espaces automatiquement vers l'espace où les fenêtres de terminal étaient ouvertes. Si je désactive cette fonctionnalité dans les préférences système, elle la corrige, mais maintenant toutes mes autres applications ne me déplacent plus vers un espace avec des fenêtres ouvertes pour cette application. Je déteste lancer une application uniquement pour constater qu'aucune fenêtre n'apparaît, seule la barre de menus en haut montre que l'application a le focus. Tellement bizarre.
Chev
15

Si vous n'avez pas de texte entre le script "", vous n'aurez pas d'invite de commande supplémentaire dans le terminal.

tell application "Terminal"  
    do script ""  
    activate  
end tell
Adam
la source
1
Je pense que ce n'est pas grave si nous la laissons comme réponse - vous pouvez également suggérer une modification de la réponse de @ jfm pour l'améliorer davantage et supprimer la vôtre.
slhck
8

Je peux penser à trois façons différentes de le faire (les deux premiers volés ailleurs mais j'oublie où). J'utilise la troisième, qui appelle un script shell à partir de l'applescript, parce que je veux ouvrir une nouvelle fenêtre à chaque fois et parce qu'elle était la plus courte.

Contrairement au script intégré à OS X depuis au moins 10.10, tous ces éléments ouvrent le terminal dans n'importe quel répertoire qui est le répertoire de travail actuel dans votre fenêtre de recherche (c'est-à-dire que vous n'avez pas besoin d'avoir un dossier sélectionné pour l'ouvrir).

Comprend également quelques fonctions bash pour compléter le cercle Finder> Terminal> Finder.

1. Réutilisez un onglet existant ou créez une nouvelle fenêtre de 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. Réutilisez un onglet existant ou créez un nouvel onglet 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. Générez une nouvelle fenêtre à chaque fois via un script shell appelé depuis un 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 ​​Bash pour ouvrir une nouvelle fenêtre de recherche pour le répertoire de travail actuel dans votre terminal

Ajoutez cet alias à votre .bash_profile.

alias f='open -a Finder ./' 

5. (BONUS) Remplacez le répertoire de votre fenêtre de terminal par le chemin de la fenêtre principale du Finder

Ajoutez cette fonction à votre .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
}
shibaku
la source
0

Les réponses ci-dessus ne fonctionnent que si Terminal est déjà en cours d'exécution. Sinon, il ouvre deux fenêtres de terminal à la fois - une à cause de do scriptet une à cause de activate.

Vous pouvez empêcher cela avec un simple si ... sinon:

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

Prime:

Si vous souhaitez exécuter directement des commandes, vous pouvez le faire à l'aide de touches (pas très élégant - je sais! Mais cela fonctionne)

[...]
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
Peter Piper
la source