TL; DR : Gerçekte ne olduğu find-file-noselectkonusunda hiçbir kontrole sahip değilsiniz ve kullanıcının neyi etkinleştirdiğine bağlı olarak arabellekte etkinleştirilen keyfi küçük modlarla sonuçlanabilir init.el. Ayrıca, temizlik zordur.
Kullanın with-temp-bufferve insert-file-contentsbunun yerine. Arabellekte belirli büyük veya küçük modlara ihtiyacınız varsa, bunları açıkça etkinleştirin . Dosya yazmak için with-temp-filebunun yerine, adına rağmen keyfi dosyalara yazmanıza olanak tanır.
Yan etkiler
find-file-noselectsahip çok da dahil olmak üzere, yan etkilerin
- etkileşimli sorular sormak (sadece interaktif olmayan kullanımda bir hareketsizliktir),
- salt okunur dosyalar için görüntüleme modunu otomatik olarak etkinleştirme,
- aksi takdirde normal moda girilmesi,
- ve çalışıyor
find-file-hook.
Normal Modun kendisi
- geçerli arabellek için otomatik olarak uygun bir ana mod seçer,
- ilgili tüm büyük ve küçük mod kancalarını çalıştırır,
- ve geçerli arabellek için tüm yerel değişkenleri okur, örneğin dosya değişkenleri ve dizin değişkenleri.
Tüm kancalar çalıştığından, kullanıcının etkinleştirdiği tüm küçük modları ve kanca işlevlerini alırsınız init.el, bu da küçük rahatsızlıklardan (istenmeyen küçük modlar etkinleştirilirse) büyük hasara (kullanıcı beklediği bir kanca işlevi eklediyse) etkileşimli bir bağlamdan çağrılabilir).
Örnek için https://github.com/flycheck/flycheck/issues/366 adresine bakın . find-file-noselectBir veri dosyasının kullanımı Flycheck tarafından sözdizimi ile kontrol edilmesine neden oldu ve Emacs kapatıldığında gerçekleştiği için, geçici bir dosyayı geride bırakarak düzgün bir şekilde temizlenmesi için zaman yoktu.
Temizlemek
İle find-file-noselectekstra dikkatli olmak gerekir tekrar tampon öldürmek için. find-file-noselectbunu sizin için yapmaz.
Bir yerde tamponu hatırlamanız ve unwind-protectyerel olmayan çıkışlarda bile tamponun öldürüldüğünden emin olmak için dikkatli bir şekilde kullanmanız gerekir.
Alternatifler
Dosyaları kullanımını okumak için with-temp-bufferve insert-file-contentssadece örneğin sistem dönüşümünü kodlama en temel şeyi gerçekleştirir, ancak kanca veya kurulum yerel değişkenler etkinleştirmek, soru sormak etmeyen,:
(with-temp-buffer
(insert-file-contents (locate-user-emacs-file "foo.el"))
;; Enter the major mode explicitly
(emacs-lisp-mode)
;; …
)
with-temp-buffer geçici tamponu vücudunun sonunda uygun şekilde öldürmeye özen gösterir.
Dosyaları yazmak için with-temp-file, geçici bir arabellek oluşturan ve içeriğini gövdesinin sonunda verilen dosya adına yazan:
(with-temp-file (locate-user-emacs-file "foo.el")
(prin1 (list 'my 'data) (current-buffer)))
good-practicesönce hiç etiket yoktu ; kullanmak iyi bir fikir mi?