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:
- Seguimiento de directorios, manual de Emacs
- Una gran publicación de blog sobre la ejecución de shells en Emacs
- El repositorio ssh-el Github; también está disponible en MELPA . (No tenía idea de que no formaba parte del núcleo de Emacs …)
- Página de EmacsWiki sobre el seguimiento de directorios de shell por indicador
- Explicación de StackExchange de dirtrack-list