Emacs Ruby autocomplete fonctionne presque

J’ai mis à jour ma configuration emacs avec l’utilisation de Rsense pour permettre l’affichage d’une liste déroulante de saisie semi-automatique lors de la saisie du code. Cela fonctionne bien dans la plupart des fichiers, sauf que je ne trouve pas que cela me permette de sélectionner une réponse dans la table lorsque je modifie du code dans mon projet ruby ​​on rails.

Voici ma configuration: https://github.com/map7/simple_emacs

J’utilise ceci sous Ubuntu 10.04.

Pour les fichiers script ruby ​​simples, cela fonctionne très bien. Je peux ouvrir un nouveau fichier et taper.

"test".up... 

Tout comme je saisis le caractère ‘p’, une liste d’options apparaît et je peux monter et descendre la liste avec les touches fléchées et en sélectionner une (par exemple: upcase) avec la touche Entrée.

Ce qui ne fonctionne pas, c’est quand je fais exactement le même test, mais dans le répertoire de base d’un projet de rails.

Mettre à jour:

Trouvé que le problème est avec (require ‘rails), donc c’est quelque chose dans le plug-in emacs-rails que l’autocomplete n’aime pas.

Mettre à jour:

C’est dans emacs-rails -> rails-project.el. Si je commente cette macro, alors la saisie semi-automatique fonctionne, sinon elle ne fonctionne pas:

 (defmacro* rails-project:with-root ((root) &body body) "If you use `rails-project:root' or functions related on it several times in a block of code, you can optimize your code by using this macro. Also, blocks of code will be executed only if rails-root exist. (rails-project:with-root (root) (foo root) (bar (rails-core:file \"some/path\"))) " `(let ((,root (rails-project:root))) (when ,root (flet ((rails-project:root () ,root)) ,@body)))) 

Est-ce que quelqu’un peut expliquer pourquoi cela se rompt automatiquement?

    Voici une pensée: La macro lie une fonction flet (rails-project:root) une fois à la valeur qui (rails-project:root) a juste avant l’exécution du body . (C’est comme cela qu’il revendique une augmentation de performance: apparemment, le système externe (rails-project:root) est cher, donc appeler une fois et mettre la valeur en cache semble être une bonne idée.)

    Malheureusement, s’il y a du code dans le body qui a un effet secondaire intentionnel pour changer la valeur que (rails-project:root) renvoie, cela n’aura aucun effet. Ce changement sera invisible même pour les autres codes appelés dans le body car Emacs lisp a une liaison dynamic des noms de flet .