python - ¿Es posible usar Ropemacs con TRAMP en Emacs?
(1)
Recientemente instalé la versión hg tip de Ropemacs y me gustaría usarla cuando edite archivos remotos utilizando TRAMP. ¿Alguien ha hecho esto? Cuando trato de usar M-/
para completar un nombre de variable, se me pide que ingrese a la Rope project root folder
y que ingrese: /ssh:myhost:/path/to/myproject/
y me da el siguiente error:
Opening [/ssh:myhost:/path/to/myproject/] project ...
pymacs-report-error: Python: Traceback (most recent call last):
File "/home/saltycrane/lib/python-environments/default/lib/python2.6/site-packages/Pymacs/pymacs.py", line 147, in loop
value = eval(text)
File "<string>", line 1, in <module>
File "/home/saltycrane/lib/python-environments/default/lib/python2.6/site-packages/ropemode/decorators.py", line 53, in newfunc
return func(*args, **kwds)
File "/home/saltycrane/lib/python-environments/default/lib/python2.6/site-packages/ropemode/interface.py", line 254, in code_assist
_CodeAssist(self, self.env).code_assist(prefix)
File "/home/saltycrane/lib/python-environments/default/lib/python2.6/site-packages/ropemode/interface.py", line 538, in code_assist
proposals = self._calculate_proposals()
File "/home/saltycrane/lib/python-environments/default/lib/python2.6/site-packages/ropemode/interface.py", line 597, in _calculate_proposals
self.interface._check_project()
File "/home/saltycrane/lib/python-environments/default/lib/python2.6/site-packages/ropemode/interface.py", line 448, in _check_project
self.open_project()
File "/home/saltycrane/lib/python-environments/default/lib/python2.6/site-packages/ropemode/decorators.py", line 53, in newfunc
return func(*args, **kwds)
File "/home/saltycrane/lib/python-environments/default/lib/python2.6/site-packages/ropemode/interface.py", line 88, in open_project
self.project = rope.base.project.Project(root)
File "/home/saltycrane/lib/python-environments/default/lib/python2.6/site-packages/rope/base/project.py", line 134, in __init__
os.mkdir(self._address)
OSError: [Errno 2] No such file or directory: ''/ssh:myhost:/path/to/myproject''
Me imagino que ropemacs no admite archivos remotos con TRAMP. Me pregunto si alguien ha encontrado una solución. Tal vez algún elisp personalizado? O tal vez debería usar sshfs y montar el sistema de archivos remoto localmente ...
Instalé ropemacs en un virtualenv ubicado en /home/saltycrane/lib/python-environments/default
. Estoy usando GNU Emacs 23.1.50.1 en Ubuntu Lucid.
Debo mencionar que la finalización con M-/
funciona bien cuando no estoy usando TRAMP.
No, esto no es posible usando TRAMP, porque la biblioteca de rope
Python no hace llamadas a Emacs cuando quiere escanear el sistema de archivos en busca de archivos de Python para encontrar sus clases y funciones; en cambio, usa llamadas como listdir()
y open()
en el sistema de archivos directamente, sin darle a Emacs la oportunidad de interponerse e interceptar las rutas especiales con el prefijo TRAMP que está editando.
El uso de sshfs
podría ser posible, como lo mencionaron los comentarios, pero para la rope
, imagino que sería una solución muy lenta, ya que la rope
tiene que abrir tantos archivos para averiguar el estado de su proyecto.
Por lo general, dejo la rope
o me imagino cómo exportar una sesión de Emacs desde el sistema remoto, al editar a través de un enlace de sistema de archivos remoto. Me pregunto si podría usar algo como rsync
o dropbox
o incluso un DVCS para que los archivos estén presentes en su disco duro local como copias de acceso inmediato, pero para que los cambios que guarde se copien.