Можно ли использовать Ropemacs с TRAMP в Emacs?

Недавно я установил версию Ropemacs hg tip и хотел бы использовать ее при редактировании удаленных файлов с помощью 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 в виртуальную среду, расположенную по адресу /home/saltycrane/lib/python-environments/default. Я использую GNU Emacs 23.1.50.1 на Ubuntu Lucid.

Я должен упомянуть, что завершение с помощью M-/ отлично работает, когда я не использую TRAMP.


person saltycrane    schedule 11.05.2010    source источник
comment
Использование sshfs, вероятно, является прагматичным подходом. Ждать, пока роумаксы получат поддержку для работы над TRAMP, или самостоятельно исправлять роумаксы, определенно требует больше усилий.   -  person Erik Kaplun    schedule 06.04.2011
comment
+1 для sshfs, который следует принципу модульности философии Unix и работает не только с Emacs.   -  person Niklas B.    schedule 02.09.2011


Ответы (1)


Нет, с помощью TRAMP это невозможно, потому что библиотека Python rope не выполняет обратные вызовы в Emacs, когда хочет просканировать файловую систему на наличие файлов Python, чтобы найти их классы и функции — вместо этого она использует вызовы например, listdir() и open() непосредственно в файловой системе, не давая Emacs возможности встать на пути и перехватить редактируемые вами специальные пути с префиксом TRAMP.

Использование sshfs может быть возможно, как упоминалось в комментариях, но для rope я полагаю, что это будет очень медленное решение, поскольку rope нужно открыть так много файлов, чтобы узнать состояние вашего проекта.

Обычно я отключаю rope или выясняю, как экспортировать сеанс Emacs из удаленной системы при редактировании через ссылку удаленной файловой системы. Интересно, могли бы вы использовать что-то вроде rsync или dropbox или даже DVCS, чтобы файлы присутствовали на вашем локальном жестком диске в виде немедленно доступных копий, но чтобы изменения, которые вы сохраняете, копировались?

person Brandon Rhodes    schedule 13.09.2011