Con frecuencia necesito abrir una nueva pestaña en el mismo directorio que mi pestaña actual para hacer otra cosa mientras mi pestaña actual está ocupada por un proceso de larga ejecución. Sin embargo, de manera predeterminada cuando crea una nueva pestaña, Terminal.app comienza en ~ /. ¿Alguna idea de cómo hacer que el salto automático?
24
Respuestas:
En OS X 10.7 (Lion), Terminal.app admite esto de forma nativa:
New Windows/Tabs open in: Same working directory
fuente
Hay que tener mucho cuidado al pasar cadenas a través de diferentes entornos.
Ejecuto 10.4, por lo que mi script 'tfork' siempre abre una nueva ventana. Debería ser fácil adaptarlo para usar una pestaña:
Ejemplo:
tfork git log -p ..FETCH_HEAD
Enmienda: cwd de un proceso que ya se está ejecutando "ocupando" una pestaña Terminal
La idea de "el directorio actual del programa que ocupa la pestaña actual" no es tan obvia como cabría esperar.
Cada pestaña de Terminal tiene un único dispositivo tty que es utilizado por los procesos que ejecuta (inicialmente, un shell; luego, sea lo que sea que se inicie el shell).
Cada terminal (normal) tty tiene un único grupo de procesos en primer plano que se podría considerar como "ocupando" el tty.
Cada grupo de procesos puede tener múltiples procesos en él.
Cada proceso puede tener su propio directorio de trabajo actual (cwd) (algunos entornos le dan a cada hilo su propio cwd o equivalente a cwd, pero lo ignoraremos).
Los hechos anteriores establecen un tipo de rastro que de tty a cwd: tty -> grupo de procesos en primer plano -> procesos del grupo de procesos en primer plano -> cwds.
La primera parte (desde tty hasta procesos en primer plano) del problema se puede resolver con la salida de ps :
(donde "ttyp6" es el nombre del tty de interés)
La asignación del proceso (PID) a cwd se puede hacer con lsof :
(donde "2515,2516" es una lista separada por comas de los procesos de interés)
Pero bajo Tiger, no veo una forma directa de obtener el nombre del dispositivo tty de una ventana de Terminal en particular . Hay una forma horriblemente fea de obtener el nombre tty en Tiger. Quizás Leopard o Snow Leopard pueden hacerlo mejor.
Lo puse todo junto en un AppleScript como este:
Guárdelo con Script Editor ( AppleScript Editor en Snow Leopard) y use un iniciador (por ejemplo, FastScripts ) para asignarlo a una tecla (o simplemente ejecútelo desde el menú AppleScript (habilitado a través de / Applications / AppleScript / AppleScript Utility.app ).
fuente
He publicado una secuencia de comandos que utiliza Chris Johnsen código 's arriba y otro script para abrir la nueva pestaña en el directorio actual con la configuración actual, sobre todo porque el color de la coordenada mis terminales. Gracias Chris, por ese guión, lo he estado usando durante algunos meses y es un gran ahorro de tiempo.
(* Este script abre una nueva pestaña Terminal.app en el directorio de la pestaña actual con la misma configuración. Necesitará, si aún no lo ha hecho, habilitar el acceso para dispositivos de asistencia como se describe aquí: http: // www .macosxautomation.com / applescript / uiscripting / index.html
Es casi todo el trabajo de dos guiones juntos, gracias a ellos:
El script de Chris Johnsen abre una nueva pestaña en el directorio actual: OS X Terminal.app: ¿cómo iniciar una nueva pestaña en el mismo directorio que la pestaña actual?
El "menu_click" de Jacob Rus me permite crear la pestaña con la misma configuración, ya que la API de Terminal no lo hace: http://hints.macworld.com/article.php?story=20060921045743404
Si cambia el nombre de un perfil de Terminal, la API de AppleScript devuelve el nombre anterior hasta que reinicie la aplicación, por lo que el script no funcionará en la configuración renombrada hasta ese momento. Ugh Además, la necesidad de activar Terminal para ejecutar el comando de menú trae todas las ventanas de terminal al frente.
fuente
Como se mencionó en otra parte , si está utilizando Oh My Zsh , entonces simplemente debe agregar el
terminalapp
complemento. En su archivo .zshrc (suponiendo que ya esté usando el complemento git:fuente
Yo uso este script alias / shell para hacerlo.
fuente
fuente