Ich muss häufig eine neue Registerkarte im selben Verzeichnis wie meine aktuelle Registerkarte öffnen, um etwas anderes zu tun, während meine aktuelle Registerkarte von einem langen Prozess belegt ist. Wenn Sie jedoch eine neue Registerkarte erstellen, beginnt Terminal.app standardmäßig mit ~ /. Irgendeine Idee, wie man es automatisch zum Springen bringt?
24
Antworten:
In OS X 10.7 (Lion) unterstützt Terminal.app dies nativ:
New Windows/Tabs open in: Same working directory
quelle
Man muss sehr vorsichtig sein, wenn man Saiten durch verschiedene Umgebungen führt.
Ich führe 10.4 aus, daher öffnet mein 'tfork'-Skript stattdessen immer ein neues Fenster. Es sollte einfach sein, es an die Verwendung eines Tabs anzupassen:
Beispiel:
tfork git log -p ..FETCH_HEAD
Änderung: cwd eines bereits laufenden Prozesses, der eine Terminal- Registerkarte belegt
Die Vorstellung, dass „das aktuelle Verzeichnis des Programms die aktuelle Registerkarte belegt“, ist nicht so offensichtlich, wie man es erwarten würde.
Jede Registerkarte " Terminal" verfügt über ein einzelnes tty-Gerät, das von den von ihr ausgeführten Prozessen verwendet wird (anfangs eine Shell; danach, unabhängig davon, welche Shell gestartet wird).
Jedes (normale) Terminal- Tty hat eine einzelne Vordergrund-Prozessgruppe, die man als das Tty "besetzend" betrachten könnte.
Jede Prozessgruppe kann mehrere Prozesse enthalten.
Jeder Prozess kann sein eigenes aktuelles Arbeitsverzeichnis (cwd) haben (einige Umgebungen geben jedem Thread ein eigenes cwd oder cwd-Äquivalent, aber das werden wir ignorieren).
Die vorstehenden Tatsachen legen eine Art Spur fest, die von tty bis cwd: tty -> Vordergrundprozessgruppe -> Prozesse der Vordergrundprozessgruppe -> cwds.
Der erste Teil (von tty bis zum Vordergrundprozess) des Problems kann mit der Ausgabe von ps gelöst werden :
(wobei "ttyp6" der Name der gewünschten Menge ist)
Die Zuordnung von process (PID) zu cwd kann mit lsof erfolgen :
(wobei "2515,2516" eine durch Kommas getrennte Liste der interessierenden Prozesse ist)
Unter Tiger sehe ich jedoch keine direkte Möglichkeit, den tty-Gerätenamen eines bestimmten Terminalfensters abzurufen. Es gibt eine schrecklich hässliche Art, den Namen in Tiger zu finden. Vielleicht kann Leopard oder Snow Leopard es besser machen.
Ich habe alles in einem AppleScript wie folgt zusammengefasst:
Speichern Sie es mit dem Skript-Editor ( AppleScript-Editor in Snow Leopard) und verwenden Sie einen Starter (z. B. FastScripts ), um es einer Taste zuzuweisen (oder führen Sie es einfach über das AppleScript-Menü aus (aktiviert über / Applications / AppleScript / AppleScript Utility.app )).
quelle
Ich habe ein Skript veröffentlicht , das den obigen Code von Chris Johnsen verwendet , und ein anderes Skript, um die neue Registerkarte im aktuellen Verzeichnis mit den aktuellen Einstellungen zu öffnen, hauptsächlich, weil ich meine Terminals farblich koordiniere. Vielen Dank, Chris, für dieses Skript, ich benutze es jetzt seit ein paar Monaten und es ist eine großartige Zeitersparnis.
(* Dieses Skript öffnet eine neue Registerkarte Terminal.app im Verzeichnis der aktuellen Registerkarte mit denselben Einstellungen. Sie müssen den Zugriff für unterstützende Geräte aktivieren, sofern dies noch nicht geschehen ist, wie hier beschrieben: http: // www .macosxautomation.com / applescript / uiscripting / index.html
Es ist fast die ganze Arbeit von zwei Skripten zusammen, danke an sie:
Chris Johnsens Skript öffnet eine neue Registerkarte im aktuellen Verzeichnis: OS X Terminal.app: Wie wird eine neue Registerkarte im selben Verzeichnis wie die aktuelle Registerkarte erstellt?
Mit dem "menu_click" von Jacob Rus kann ich den Tab mit denselben Einstellungen erstellen wie mit der API von Terminal: http://hints.macworld.com/article.php?story=20060921045743404
Wenn Sie den Namen eines Terminal-Profils ändern, gibt die AppleScript-API den alten Namen zurück, bis Sie die Anwendung neu starten, sodass das Skript bis dahin nicht mit umbenannten Einstellungen funktioniert. Pfui. Die Notwendigkeit, Terminal für die Ausführung des Menübefehls zu aktivieren, bringt alle Terminalfenster nach vorne.
quelle
Wie an anderer Stelle erwähnt , sollten Sie, wenn Sie Oh My Zsh verwenden , einfach das
terminalapp
Plugin hinzufügen . In Ihrer .zshrc-Datei (vorausgesetzt, Sie verwenden bereits das Git-Plugin):quelle
Ich benutze dieses Alias / Shell-Skript, um es zu tun.
quelle
quelle