J'ai souvent besoin d'ouvrir un nouvel onglet dans le même répertoire que mon onglet actuel pour faire autre chose alors que mon onglet actuel est occupé par un long processus. Cependant, par défaut lorsque vous créez un nouvel onglet, Terminal.app démarre à ~ /. Une idée de comment le faire sauter automatiquement?
24
Réponses:
Dans OS X 10.7 (Lion), Terminal.app prend en charge cela nativement:
New Windows/Tabs open in: Same working directory
la source
Il faut être très prudent lors du passage de chaînes dans différents environnements.
Je lance 10.4, donc mon script 'tfork' ouvre toujours une nouvelle fenêtre à la place. Il devrait être facile de l'adapter pour utiliser un onglet:
Exemple:
tfork git log -p ..FETCH_HEAD
Amendement: CWW d'un processus déjà en cours «occupant» un onglet Terminal
L'idée du «répertoire actuel du programme occupant l'onglet actuel» n'est pas aussi évidente qu'on pourrait s'y attendre.
Chaque onglet Terminal possède un seul périphérique tty qui est utilisé par les processus qu'il exécute (initialement, un shell; ensuite, quel que soit le shell qui démarre).
Chaque terminal (normal) Terminal possède un seul groupe de processus de premier plan que l'on pourrait considérer comme «occupant» le terminal.
Chaque groupe de processus peut contenir plusieurs processus.
Chaque processus peut avoir son propre répertoire de travail actuel (cwd) (certains environnements donnent à chaque thread leur propre cwd ou équivalent cwd, mais nous l'ignorerons).
Les faits précédents établissent une sorte de piste qui va de tty à cwd: tty -> groupe de processus de premier plan -> processus du groupe de processus de premier plan -> cwds.
La première partie (des processus tty aux processus de premier plan) du problème peut être résolue avec la sortie de ps :
(où «ttyp6» est le nom du tty d'intérêt)
Le mappage du processus (PID) au cwd peut être fait avec lsof :
(où «2515,2516» est une liste séparée par des virgules des processus d'intérêt)
Mais sous Tiger, je ne vois aucun moyen direct d'obtenir le nom du périphérique tty d'une fenêtre de terminal particulière . Il y a un moyen horriblement laid d'obtenir le nom tty dans Tiger. Peut-être que Leopard ou Snow Leopard peuvent faire mieux.
J'ai tout rassemblé dans un AppleScript comme celui-ci:
Enregistrez-le avec Script Editor ( AppleScript Editor dans Snow Leopard) et utilisez un lanceur (par exemple FastScripts ) pour l'affecter à une clé (ou exécutez-le simplement à partir du menu AppleScript (activé via / Applications / AppleScript / AppleScript Utility.app )).
la source
J'ai publié un script qui utilise le code de Chris Johnsen ci-dessus et un autre script pour ouvrir le nouvel onglet dans le répertoire actuel avec les paramètres actuels, principalement parce que je coordonne les couleurs de mes terminaux. Merci Chris, pour ce script, je l'utilise depuis quelques mois maintenant et c'est un excellent gain de temps.
(* Ce script ouvre un nouvel onglet Terminal.app dans le répertoire de l'onglet actuel avec les mêmes paramètres. Vous devrez, si vous ne l'avez pas déjà fait, activer l'accès pour les appareils et accessoires fonctionnels comme décrit ici: http: // www .macosxautomation.com / applescript / uiscripting / index.html
C'est presque tout le travail de deux scripts réunis, merci à eux:
Le script de Chris Johnsen ouvre un nouvel onglet dans le répertoire courant: OS X Terminal.app: comment démarrer un nouvel onglet dans le même répertoire que l'onglet courant?
Le «menu_click» de Jacob Rus me permet de créer l'onglet avec les mêmes paramètres, contrairement à l'API de Terminal: http://hints.macworld.com/article.php?story=20060921045743404
Si vous modifiez le nom d'un profil de terminal, l'API AppleScript renvoie l'ancien nom jusqu'au redémarrage de l'application, de sorte que le script ne fonctionnera pas sur les paramètres renommés jusque-là. Pouah. De plus, la nécessité d'activer Terminal pour exécuter la commande de menu met toutes les fenêtres du terminal au premier plan.
la source
Comme mentionné ailleurs , si vous utilisez Oh My Zsh , vous devez simplement ajouter le
terminalapp
plugin. Dans votre fichier .zshrc (en supposant que vous utilisez déjà le plugin git:la source
J'utilise ce script alias / shell pour le faire.
la source
la source