¿Cómo hago para que se reanuden las sesiones de terminal en Lion con iterm2 y tcshrc?

Según tengo entendido, con Lion, las ventanas de mi terminal deberían restaurar su estado. Sin embargo, esto no sucede para mí. Me pregunto si esto se debe a que uso tcsh en lugar de bash.

¿Hay algo que pueda hacer para que mis sesiones de iterm2 se reanuden donde las dejaron?

Mi intento actual de hacer esto ha sido usar

 alias precmd 'if ( $?TERM_PROGRAM && ${TERM_PROGRAM} == "iTerm.app" ) /opt/local/libexec/gnubin/echo -ne "\033];$cwd\007"'
 set prompt = '%{\e]2;%~\a%}%S[%m:%c3] %n%#%s '

Pero esto establece solo las etiquetas de las pestañas. La etiqueta de la ventana obtiene los nombres de archivo abreviados con ~ en lugar del nombre de archivo completo. No sé si esto está relacionado con mi imposibilidad de obtener la reanudación de la terminal. En cualquier caso, cuando salgo y reinicio, todas las ventanas y pestañas de mi terminal vuelven a estar en mi directorio de inicio.

Los puntos de bonificación adicionales serían una solución sensible al uso de slogin.

Tampoco puedo obtener el comportamiento de reanudación correcto con el terminal Apple incorporado, cuando cambio lo anterior a

if ( $?TERM_PROGRAM && ( ${TERM_PROGRAM} == "iTerm.app" || ${TERM_PROGRAM} == "Apple_Terminal") ) then
  alias precmd ' /opt/local/libexec/gnubin/echo -ne "\033];$cwd\007"'
  set prompt = '%{\e]2;%~\a%}%S[%m:%c3] %n%#%s '
endif

No vuelvo al mismo directorio de trabajo y, aunque puedo ver el historial de comandos, no puedo usarlo (no puedo usar ^P para subir, por ejemplo, y el comando de historial no devuelve nada). Así que creo que de alguna manera esto no funciona con tcsh, a diferencia de bash. Mis colegas me aseguran que no pierden el directorio de trabajo al salir de la aplicación.

Lion guarda y muestra el contenido de los búferes de desplazamiento hacia atrás (y solo para la aplicación Terminal integrada: iTerm2 y otros están solos para admitir la finalización repentina y la reanudación de la aplicación). Cosas como el directorio de trabajo y las variables de shell no se mantienen. ¿Está buscando usar pantallas como su caparazón para guardar ese tipo de contenido mientras se ejecuta la Mac, pero la aplicación Terminal está cerrada?
bash es el shell predeterminado en OS X, y solo está configurado de manera predeterminada para coordinarse con Terminal para restaurar el directorio de trabajo. Puedes ver el código que hace esto en /etc/bashrc. Es posible que necesite encontrar a alguien que lo adapte para tcsh. En otra parte de Stack Exchange publiqué un código equivalente para zsh.
Para guardar y restaurar estados arbitrarios, como variables de entorno, deberá agregar código a sus secuencias de comandos de configuración de shell para administrarlo. Para cada ventana/pestaña de terminal, Terminal establece una variable de entorno $TERM_SESSION_IDen una ID única; su valor exacto está sujeto a cambios, pero actualmente es un UUID. Al restaurar, restaura este ID. Por ejemplo, puede usar el ID para generar un nombre de ruta de archivo y guardar datos en él, luego volver a leerlo cuando se inicie el shell. Probablemente querrá eliminar periódicamente los datos de la sesión anterior, ya que no sabe si una sesión volverá a restaurarse.

Respuestas (1)

Podría agregar algo como esto a la secuencia de comandos de inicio de su shell predeterminado (el mío es zsh, la mayoría de la gente usa bash, supongo, por lo que es posible que tenga que modificarlo).

Aquí está mi parte de pantalla jiggery-pokery (en mi .zshrc)

# Autoload screen if we aren't in it.  (Thanks Fjord!)
if [[ $STY = '' ]] then screen -xRR; fi

Obtuve esto de algún lugar en las redes (no recuerdo dónde, y no sé quién es Fjord, pero bien por él.

Con esto, puede cerrar su ventana de iTerm, y se reanudará donde la dejó cuando la vuelva a abrir. Recomiendo encarecidamente leer la página de manual de la pantalla también.

¿Funciona esto si tiene más de una ventana de iTerm abierta? ¿Cómo se conectarían varias sesiones de pantalla a varias sesiones de iTerm?