Función de salida genérica para iTerm2

Recientemente comencé a usar iTerm2 en lugar de la aplicación Terminal de macOS y estoy muy contento con ella. Estoy muy acostumbrado a usar exitcomandos para cerrar la instancia que actualmente tiene el foco. Con instancia me refiero a uno de los siguientes: pestaña, ventana o panel dividido.

¿Cómo puedo escribir una salida de función que cierre la instancia que se está ejecutando actualmente? La siguiente solución funciona para las ventanas, pero no para las pestañas ni para los paneles divididos:

function exit {
    osascript -e 'tell application "iTerm2" to close first window'
}

La solución debería funcionar con zsho bash.

exites un shell incorporado (comando). Tener una función con el mismo nombre no es una buena idea.
Este tema no está muy claro. Cuando tengo varias instancias de iTerm, escribir exit solo cierra esa instancia (solo se prueba para verificar).
@Allan, perdón por la confusión: con instancia me refiero a uno de los siguientes: pestaña, ventana o panel dividido. Dicho esto, me refiero a lo siguiente: si tengo una ventana iTerm2 que contiene dos pestañas, quiero cerrar la enfocada escribiendo exit. Si esta primera pestaña está cerrada, exitcierra toda la ventana (esta es la parte que ya está funcionando).
Si esta primera pestaña está cerrada, salir cierra toda la ventana . Esta es la parte que es confusa. Si su primera pestaña está cerrada, ya no tiene una ventana de iTerm2 que consta de dos pestañas. Tiene una ventana que consta de una pestaña. La salida está cerrando lo único que queda.
@Allan De nuevo, perdón por la confusión. Eso es exactamente lo que me gustaría lograr, ya que imita el comportamiento predeterminado de cualquier terminal de Linux que conozco.
Ok... así que la forma en que estoy leyendo esto es que quieres que la función de salida funcione de manera diferente cuando hay > 1 ventana/pestaña/panel. No veo esto como posible.
Sí exactamente. Gracias hasta ahora. Funciona usando la aplicación Terminal.
Creo que hay una confusión entre salir de una sesión y cerrar una ventana. Estoy dispuesto a ser eso en Terminal, cuando escribes exit, cierra la sesión pero deja abierta la ventana/pestaña/panel. ¿Correcto?

Respuestas (3)

En Terminal, la configuración predeterminada para manejar sesiones cerradas es dejar la ventana abierta.

En Preferencias > Perfiles:

ingrese la descripción de la imagen aquí

En iTerm2, el valor predeterminado es cerrar la ventana

ingrese la descripción de la imagen aquí

Si deshabilita esa opción en iTerm2, debería darle el comportamiento que está buscando.

La sección Scripting de la documentación de iTerm2 me ayudó a solucionar mi problema.

En .zshrcdefiní la siguiente función:

function exit {
    osascript ~/.zsh/.function_exit.as
}

con ~/.zsh/.function_exit.ascomo

tell application "iTerm2"
    tell current window to close current session
end tell

Además, configuré la siguiente opción en la configuración de iTerm2:

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Usando todas las cosas anteriores juntas, logro el siguiente comportamiento:

ingrese la descripción de la imagen aquí

Dado que esto no depende del Shell utilizado, todo debería funcionar perfectamente bash(y el archivo de puntos correspondiente).

Esta es una buena solución con la excepción del nombre de la función. exites un comando integrado y la creación de una función con un nombre reservado podría causar resultados adversos.

en tu .profile podrías agregar

alias killiTerm2='killall iTerm2'

desde la terminal, simplemente llamaría a killiTerm2, y mataría todas las instancias en ejecución de iTerm2

Esto de ninguna manera resuelve mi problema ya que no quiero cerrar toda la aplicación.