Emacs Ruby otomatik tamamlama neredeyse çalışıyor


132

Bir otomatik tamamlama açılır kutusunun kodu yazarken görünmesine izin vermek için emacs yapılandırmamı Rsense kullanımıyla güncelliyorum. Bu, ruby ​​on rails projemde bazı kodları düzenlerken tablodan bir yanıt seçmeme izin vermediği dışında çoğu dosyada iyi çalışıyor.

İşte kurulumum: https://github.com/map7/simple_emacs

Bunu Ubuntu 10.04 altında kullanıyorum.

Basit Ruby betik dosyaları için harika çalışıyor. Yeni bir dosya açıp yazabilirim.

"test".up...

Yukarıya 'p' karakterini yazdığım gibi, bir seçenekler listesi beliriyor ve ok tuşlarıyla listede yukarı ve aşağı gidip enter tuşuyla birini (örneğin: büyük harf) seçebiliyorum.

Çalışmayan şey, tam olarak aynı testi yaptığımda, ancak bir raylar projesinin temel dizini içinde yaptığımda.

Güncelleme:

Sorunun ('rails gerektirir) ile ilgili olduğu bulundu, bu nedenle bu, otomatik tamamlamanın hoşlanmadığı emacs-rails eklentisinde bir şey.

Güncelleme:

Emacs-rails -> rails-project.el içinde. Bu makroya yorum yaparsam otomatik tamamlama çalışır, aksi takdirde çalışmaz:

(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))))

Birisi bunun neden otomatik tamamlamayı bozduğunu açıklayabilir mi?


1
Otomatik tamamlama işlevi ruby, C ++, lisp ve her şeyde kullanılıyor
map7

1
Demek istediğim, buradaki makro nerede kullanılıyor?
milkypostman

1
MVC'deki farklı dosyalar arasında atlamak ve DB / sunucu / konsol / vb. Başlatmak için esas olarak raylar makrosunu kullanıyorum.
map7

1
Çözümünüzü yanıtlamak için çıkarabilir ve ona "işe yarıyor" bileti verebilir misiniz?
przemo_li

2
przemo_li, buna bir cevabım olsaydı yapardım, ancak rails.el eklentisini yüklediğinizde ve bir rails küçük mod kaynak kodu dosyası içinde otomatik tamamlamaya çalıştığınızda otomatik tamamlama hala çalışmıyor.
harita 7

Yanıtlar:


7

İşte bir düşünce: Makro, bir fletişlevi çalıştırılmadan hemen önceki (rails-project:root)değere bir kez bağlar . (Performans artışını şu şekilde iddia ediyor: Görünüşe göre dış kısım pahalı, bu yüzden bir kez aramak ve değeri önbelleğe almak iyi bir fikir gibi görünüyor.)(rails-project:root)body(rails-project:root)

Ne yazık ki, içinde bodykasıtlı olarak (rails-project:root)dönen değeri değiştirmek anlamına gelen bir yan etkisi olan kod varsa , bunun hiçbir etkisi olmayacaktır. Bu değişiklik, içinde çağrılan diğer kodlar için bile görünmez olacaktır, bodyçünkü Emacs lisp dinamik fletad bağlarına sahiptir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.