Можно ли использовать Ropemacs с TRAMP в Emacs? - PullRequest
18 голосов
/ 12 мая 2010

Я недавно установил версию 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'

Я думаю, что Romamacs не поддерживает удаленные файлы с TRAMP. Просто интересно, нашел ли кто-нибудь обходной путь. Может быть, какой-нибудь кастомный элисп? Или, может быть, я должен использовать sshfs и локально смонтировать удаленную файловую систему ...

Я установил Romamacs в virtualenv, расположенном в /home/saltycrane/lib/python-environments/default. Я использую GNU Emacs 23.1.50.1 в Ubuntu Lucid.

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

1 Ответ

6 голосов
/ 14 сентября 2011

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

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

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

...