Можно ли использовать Ropemacs с TRAMP в Emacs?
Недавно я установил версию hp tip для Ropemacs, и я хотел бы использовать ее при редактировании удаленных файлов с помощью TRAMP. Кто-нибудь сделал это? Когда я пытаюсь использовать M-/
для завершения имени переменной, меня просят ввести Rope project root folder
, и я ввожу: /ssh:myhost:/path/to/myproject/
, и это дает мне следующую ошибку:
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'
Я полагаю, что ropemacs не поддерживает удаленные файлы с помощью TRAMP. Просто интересно, нашел ли кто-нибудь обходной путь. Может быть, какой-то пользовательский elisp? Или, может быть, я должен использовать sshfs и локально монтировать удаленную файловую систему...
Я установил ropemacs в virtualenv, расположенный в /home/saltycrane/lib/python-environments/default
. Я использую GNU Emacs 23.1.50.1 на Ubuntu Lucid.
Я должен упомянуть, что завершение с помощью M-/
отлично работает, когда я не использую TRAMP.
Ответы
Ответ 1
Нет, это невозможно с помощью TRAMP, потому что библиотека Python rope
выполняет не выполнение обратных вызовов в Emacs, когда она хочет отсканировать файловую систему для файлов Python, чтобы найти их классы и функции - вместо этого он использует вызовы типа listdir()
и open()
в файловой системе напрямую, не давая Emacs шанс встать на пути и перехватить специальные TRAMP-префиксные пути, которые вы редактируете.
Использование sshfs
может быть возможно, как упомянуто в комментариях, но для rope
Я предполагаю, что это будет очень медленное решение, так как rope
должно открыть так много файлов, чтобы узнать состояние вашего проект.
Обычно я оставляю rope
выключен, иначе выясню, как экспортировать сеанс Emacs из удаленной системы при редактировании по ссылке удаленной файловой системы. Интересно, можете ли вы использовать что-то вроде rsync
или dropbox
или даже DVCS, чтобы файлы присутствовали на вашем локальном жестком диске как копии с немедленным доступом, но чтобы изменения, которые вы сохранили, скопировали через?