¿Cambiar el directorio en la Terminal si la carpeta de trabajo se movió a la Papelera (en el shell interactivo)?

Entonces, ocasionalmente estaré trabajando en zsh, en un shell interactivo, y cambiaré al Finder (o Path Finder) y mientras esté allí, arrojaré la carpeta, que es el directorio de trabajo actual en la Terminal, a la Papelera. Luego volveré al shell para buscar otra cosa y encontraré que el shell todavía está en la carpeta ahora eliminada.

¿Hay alguna manera en que zsh pueda darse cuenta de que, si el padre de la carpeta ha cambiado para convertirse en ".Trash", debería, por ejemplo, cambiar su directorio (en mi caso, idealmente a la carpeta del escritorio)? ¿Pero que solo debería hacer esto en un shell interactivo, a diferencia del medio de un script de shell u otra aplicación?

Puedo buscar en Google e implementar, pero no he podido encontrar los términos correctos, y soy más lo que yo llamo un empalmador o un kludger que cualquier tipo de programador real. Esperando el pensamiento de alguien en este sentido antes.

Respuestas (1)

No, no hay forma de que Zsh lo note automáticamente mientras no lo estés usando activamente.

Pero que importa? Simplemente puede escribir cdpara volver a su carpeta de inicio.

Actualizar

Muy bien, aquí hay una solución real que he probado y funciona. ¡Gracias a @nohillside por los ánimos!

autohome() {
  # If the present working dir doesn't exist...
  if [[ ! -d $PWD ]]; then
    # Go back to ~
    cd $HOME

    # If the line editor is active, redraw the prompt.
    zle && zle .reset-prompt
  fi
}

# This will call the function above as soon as you start typing.
autoload -Uz add-zle-hook-widget
add-zle-hook-widget line-pre-redraw autohome
Hmm, uno podría verificar la ruta actual real en PROMPT_COMMANDo PS1(o lo que sea que zshtenga para esto) y mostrar un mensaje en el aviso.
@nohillside No sin obtener primero la entrada del usuario. Zsh no tiene forma de saber si una ventana de terminal vuelve a estar "activa", a menos que el usuario realmente escriba algo.
@nohillside Muy bien, agregué una solución a mi respuesta que hace exactamente eso.