Często muszę otwierać nową kartę w tym samym katalogu, co moja bieżąca karta, aby zrobić coś innego, podczas gdy moja bieżąca karta jest zajęta przez długi proces. Jednak domyślnie po utworzeniu nowej karty Terminal.app zaczyna się od ~ /. Masz pomysł, jak sprawić, by skakał automatycznie?
24
Odpowiedzi:
W OS X 10.7 (Lion) Terminal.app obsługuje natywnie:
New Windows/Tabs open in: Same working directory
źródło
Należy bardzo ostrożnie przepuszczać łańcuchy przez różne środowiska.
Korzystam z wersji 10.4, więc mój skrypt „tfork” zawsze otwiera nowe okno. Dostosowanie go do użycia karty powinno być łatwe:
Przykład:
tfork git log -p ..FETCH_HEAD
Poprawka: cwd już uruchomionego procesu „zajmowania” karty Terminal
Idea „bieżącego katalogu programu zajmującego bieżącą kartę” nie jest tak oczywista, jak można się spodziewać.
Każda karta Terminal ma jedno urządzenie tty, które jest używane przez procesy, które uruchamia (początkowo powłokę, a następnie cokolwiek startuje powłoka).
Każdy (normalny) terminal tty ma jedną grupę procesów na pierwszym planie, którą można uznać za „zajmującą” tty.
Każda grupa procesów może zawierać wiele procesów.
Każdy proces może mieć swój bieżący katalog roboczy (cwd) (niektóre środowiska nadają każdemu wątkowi własny cwd lub ekwiwalent cwd, ale to zignorujemy).
Powyższe fakty ustanawiają rodzaj ścieżki, która od tty do cwd: tty -> grupa procesów pierwszego planu -> procesy grupy procesów pierwszego planu -> cwds.
Pierwszą część (od procesów tty do procesów pierwszoplanowych) problemu można rozwiązać za pomocą danych wyjściowych ps :
(gdzie „ttyp6” to nazwa interesującego nas zestawu)
Mapowanie z procesu (PID) na cwd można wykonać za pomocą lsof :
(gdzie „2515,2516” to oddzielona przecinkami lista interesujących procesów)
Ale pod Tygrysem nie widzę bezpośredniego sposobu uzyskania nazwy urządzenia tty określonego okna terminalu . Istnieje strasznie brzydki sposób na zdobycie nazwy tty w Tiger. Może Leopard lub Snow Leopard poradzą sobie lepiej.
Złożyłem to wszystko w AppleScript w następujący sposób:
Zapisz go za pomocą Script Editor ( AppleScript Editor w Snow Leopard) i użyj programu uruchamiającego (np. FastScripts ), aby przypisać go do klucza (lub po prostu uruchom go z menu AppleScript (włączonego przez / Applications / AppleScript / AppleScript Utility.app )).
źródło
Mam napisali skrypt , który wykorzystuje Chris Johnsen kod jest powyżej i innego skryptu, aby otworzyć nową kartę w bieżącym katalogu z aktualnymi ustawieniami, głównie dlatego, że kolor koordynować swoje terminale. Dzięki Chris, za ten skrypt, używam go od kilku miesięcy i to świetna oszczędność czasu.
(* Ten skrypt otwiera nową kartę Terminal.app w katalogu bieżącej karty z tymi samymi ustawieniami. Jeśli jeszcze tego nie zrobiłeś, musisz włączyć dostęp do urządzeń pomocniczych zgodnie z opisem tutaj: http: // www .macosxautomation.com / applescript / uiscripting / index.html
To prawie cała praca dwóch skryptów razem, dziękuję im:
Skrypt Chrisa Johnsena otwiera nową kartę w bieżącym katalogu: OS X Terminal.app: jak uruchomić nową kartę w tym samym katalogu co bieżąca karta?
„Menu_click” Jacoba Rusa pozwala mi utworzyć kartę z tymi samymi ustawieniami, ponieważ interfejs API terminalu nie: http://hints.macworld.com/article.php?story=20060921045743404
Jeśli zmienisz nazwę profilu terminala, interfejs API AppleScript zwraca starą nazwę do momentu ponownego uruchomienia aplikacji, więc skrypt nie będzie działał na ustawieniach o zmienionej nazwie do tego czasu. Ugh. Konieczność aktywacji Terminala w celu wykonania polecenia menu powoduje wyświetlenie wszystkich okien terminala na pierwszym planie.
źródło
Jak wspomniano w innym miejscu , jeśli używasz Oh My Zsh , powinieneś po prostu dodać
terminalapp
wtyczkę. W pliku .zshrc (zakładając, że już używasz wtyczki git:źródło
Używam do tego tego skryptu aliasu / powłoki.
źródło
źródło