Actualiza automáticamente el directorio predeterminado cuando PWD cambia en el modo de shell y en el modo de término

Pregunta:

¿Hay opciones o paquetes que hagan que el default-directory se actualice si el directorio de trabajo cambia en shell-mode term-mode ? Es decir, al usar cd , pero la solución tendría que ser más robusta que solo buscar este comando en particular y tal vez algunos otros; en realidad, debería verificar el valor de $PWD después de cada comando, creo.

Más importante aún, también debería funcionar cuando se conecta a una máquina remota desde dentro de un búfer en term-mode shell-mode o en shell-mode term-mode que se creó por primera vez con default-directory local. Esa es realmente la característica que realmente necesito: poder decir mediante programación si los comandos que escribo en dichos terminales se ejecutan en una máquina remota. Me gustaría obtener esa información en forma de un default-directory configurado correctamente y calcular si hay una manera de obtenerlo, entonces la herramienta que hace esto también funcionaría localmente como se describe anteriormente.

Respuesta:

Creo que la primera parte de tu pregunta se puede hacer con dirtrack-mode . Primero, configura su indicador de shell para incluir el directorio de trabajo actual. A continuación, establece dirtrack-list en una expresión regular que le dice a dirtrack-mode cómo extraerlo. Ejemplo: configuré PS1 en Bash para que sea esto:

export PS1="[\h:\w] $ "

y en Emacs configuro dirtrack-list y dirtrack-mode :

(set-variable 'dirtrack-list '("^.*[^ ]+:\\(.*\\)]" 1 nil))
(dirtrack-mode 1)

(Tomado de esta gran publicación de blog ).

Después de eso, puedo cambiar de directorio a voluntad y default-directory cambia a medida que avanzo. Esto también funciona si, en un shell, hago SSH a una máquina remota donde configuré el indicador de la misma manera: cd /etc/apache2 , en la máquina remota, cambia default-directory a /etc/apache2 . Sin embargo, tenga en cuenta que esto es local ; en el caso de la máquina remota, default-directory seguirá estando configurado en /etc/apache2 en la máquina local .

Si entiendo la segunda parte de su pregunta, desea que default-directory se establezca en algo como remote-machine:/etc/apache2 cuando utilice SSH en otra máquina. Cuando use ssh-el , puede ejecutar ssh-directory-tracking-mode para que esto funcione. Por ejemplo, si ejecuto Mx ssh , cd en /etc/apache2 , luego ejecuto Cx Cf , el mensaje que veo es:

Find Files or Url: /scp:aardvark@remote-machine:/etc/apache2

Puede ejecutar 'Mx ssh-directory-tracking-mode` a mano, pero es más conveniente configurarlo como un gancho para ssh-mode:

(setq ssh-mode-hook 'ssh-directory-tracking-mode)

Más información:

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım