2010-05-11 8 views
18

J'ai récemment installé la version hg tip de Ropemacs et je voudrais l'utiliser lors de l'édition de fichiers distants à l'aide de TRAMP. Est-ce que quelqu'un a fait ça? Lorsque je tente d'utiliser M-/ pour compléter un nom de variable, on me demande d'entrer dans le Rope project root folder et j'entre: /ssh:myhost:/path/to/myproject/ et il me donne l'erreur suivante:Est-il possible d'utiliser Ropemacs avec TRAMP dans Emacs?

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' 

J'imagine ropemacs ne prend pas en charge les fichiers distants avec TRAMP . Je me demandais juste si quelqu'un a trouvé une solution de contournement. Peut-être un peu plus personnalisé? Ou peut-être que je devrais utiliser sshfs et monter le système de fichiers distant localement ...

J'ai installé ropemacs dans un virtualenv situé au /home/saltycrane/lib/python-environments/default. J'utilise GNU Emacs 23.1.50.1 sur Ubuntu Lucid.

Je devrais mentionner que l'achèvement avec M-/ fonctionne très bien quand je n'utilise pas TRAMP.

+3

L'utilisation de sshfs est probablement l'approche pragmatique. Attendre que ropemacs obtienne du soutien pour travailler sur TRAMP, ou pour réparer des ropemacs par vous-même, c'est certainement plus d'effort. –

+0

+1 pour sshfs, qui suit le principe de modularité de la philosophie Unix et ne fonctionne pas seulement avec Emacs. –

Répondre

6

Non, ce n'est pas possible à l'aide CLOCHARD, parce que la bibliothèque Python rope ne pas faire des appels de nouveau dans Emacs quand il veut analyser le système de fichiers pour les fichiers Python pour trouver leurs classes et fonctions - au lieu, il utilise des appels comme listdir() et open() sur le système de fichiers directement, sans donner à Emacs une chance de gêner et d'intercepter les chemins spéciaux TRAMP-préfixés que vous éditez.

En utilisant sshfs pourrait être possible, les commentaires ont mentionné, mais pour rope j'imagine que ce serait une solution lente très, car rope doit ouvrir autant de fichiers pour connaître l'état de votre projet.

Généralement, je laisse rope désactivé, ou bien je vois comment exporter une session Emacs à partir du système distant, lors d'une édition sur une liaison de système de fichiers distant. Je me demande si vous pouvez utiliser quelque chose comme rsync ou dropbox ou même un DVCS pour que les fichiers soient présents sur votre disque dur local comme des copies immédiatement accessibles, mais pour que les changements que vous enregistrez soient copiés?

Questions connexes