TL; DR : Gerçekte ne olduğu find-file-noselect
konusunda 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-buffer
ve insert-file-contents
bunun 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-file
bunun yerine, adına rağmen keyfi dosyalara yazmanıza olanak tanır.
Yan etkiler
find-file-noselect
sahip ç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-noselect
Bir 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-noselect
ekstra dikkatli olmak gerekir tekrar tampon öldürmek için. find-file-noselect
bunu sizin için yapmaz.
Bir yerde tamponu hatırlamanız ve unwind-protect
yerel 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-buffer
ve insert-file-contents
sadece ö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?