Applescript zum Öffnen eines NEUEN Terminalfensters im aktuellen Bereich

14

Ja, ich habe eine schreckliche Erfahrung mit Apple Script.

Ich muss ein neues Terminal-Fenster im aktuellen Desktop-Bereich öffnen. Verschieben Sie mich NICHT in einen anderen Bereich, in dem ein Terminal ausgeführt wird, und öffnen Sie dann ein anderes Terminalfenster.

Wenn Terminal nicht ausgeführt wird, sollte ein neuer Terminalprozess gestartet werden.

zaf
quelle

Antworten:

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

Es scheint seltsam zu sein, aber es nutzt eine Kuriosität aus, wie Terminal eingehende "do script" -Befehle handhabt. es wird für jeden ein neues Fenster erstellt. Sie können dies durch etwas Nützliches ersetzen, wenn Sie möchten. Es wird ausgeführt, was immer Sie wollen, direkt nach dem Öffnen des neuen Fensters.

Justin Mrkva
quelle
1
Dies funktioniert, aber OSX verschiebt Leerzeichen immer noch automatisch in den Bereich, in dem Terminalfenster geöffnet waren. Wenn ich diese Funktion in den Systemeinstellungen deaktiviere, wird sie behoben, aber jetzt bewegen mich alle anderen Anwendungen nicht mehr in einen Bereich mit geöffneten Fenstern für diese App. Ich hasse es, eine App zu starten, nur um festzustellen, dass keine Fenster angezeigt werden. Nur die Menüleiste oben zeigt an, dass die Anwendung den Fokus hat. So bizarr.
Chev
15

Wenn Sie keinen Text "" zwischen dem Skript "" do haben, wird im Terminal keine zusätzliche Eingabeaufforderung angezeigt.

tell application "Terminal"  
    do script ""  
    activate  
end tell
Adam
quelle
1
Ich denke, es ist in Ordnung, wenn wir es als Antwort belassen - Sie können alternativ eine Bearbeitung der Antwort von @ jfm vorschlagen, um sie weiter zu verbessern und Ihre zu löschen.
Slhck
8

Ich kann mir drei verschiedene Möglichkeiten vorstellen (die ersten beiden, die von einem anderen Ort gestohlen wurden, aber ich vergesse, wo). Ich benutze das dritte, das ein Shell-Skript aus dem Apple-Skript aufruft, weil ich jedes Mal ein neues Fenster öffnen möchte und weil es das kürzeste war.

Im Gegensatz zu dem in OS X seit mindestens 10.10 integrierten Skript öffnen alle das Terminal in dem Verzeichnis, in dem sich das aktuelle Arbeitsverzeichnis in Ihrem Finder-Fenster befindet (dh Sie müssen keinen Ordner auswählen, um es zu öffnen).

Enthält auch einige Bash-Funktionen, um den Kreis Finder> Terminal> Finder zu vervollständigen.

1. Verwenden Sie eine vorhandene Registerkarte erneut oder erstellen Sie ein neues Terminalfenster:

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. Verwenden Sie eine vorhandene Registerkarte erneut oder erstellen Sie eine neue Registerkarte "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. Generieren Sie jedes Mal ein neues Fenster über ein Shell-Skript, das von einem Apple-Skript aufgerufen wird

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) Bash-Alias ​​zum Öffnen eines neuen Finder-Fensters für das aktuelle Arbeitsverzeichnis in Ihrem Terminal

Fügen Sie diesen Alias ​​zu Ihrem .bash_profile hinzu.

alias f='open -a Finder ./' 

5. (BONUS) Wechseln Sie in Ihrem Terminal-Fenster in den Pfad des vorderen Finder-Fensters

Fügen Sie diese Funktion Ihrem .bash_profile hinzu.

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
quelle
0

Die obigen Antworten funktionieren nur, wenn das Terminal bereits ausgeführt wird. Andernfalls werden zwei Terminalfenster gleichzeitig geöffnet - eines wegen do scriptund eines wegen activate.

Sie können dies mit einem einfachen verhindern, wenn ... else:

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

Bonus:

Wenn Sie Befehle direkt ausführen möchten, können Sie dies über Tastatureingaben tun (nicht sehr elegant - ich weiß! Aber es funktioniert)

[...]
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
quelle