Bu çözümde değişiklik yapılmasını gerektirmez init.el
(küçük değişikliklerle). Yine de dosya-yerel değerlendirmeleri içerir - ancak OP'nin istediği tam olarak budur. Çözümün avantajları:
- kodu değerlendirmek için onay ister
- elisp kodu org-babel ortamında düzenlenebilir ve test edilebilir
- çözüm
init.el
orgmode dosyasında değişiklik gerektirmediği için (güvenilir) kullanıcılar arasında paylaşılabilir
Buradaki çözümü yeniden ifade ediyorum.
Dosyanızın herhangi bir yerine bir src bloğu ekleyin:
#+NAME: startup
#+BEGIN_SRC emacs-lisp
(your-code-here)
#+END_SRC
Ardından, bunu orgmode dosyanızın sonuna yerleştirin:
# Local Variables:
# eval: (progn (org-babel-goto-named-src-block "startup") (org-babel-execute-src-block) (outline-hide-sublevels 1))
# End:
Ekledim (outline-hide-sublevels 1)
çünkü src bloğunu bir başlık içinde gizlemek ve alt düzeylerin başlangıçta gizlenmesini istiyorum. Bu açıklama olmadan, alt düzeyler genişleyecektir (org-babel-goto-named-src-block "startup")
.
Bu çözümle emacs, yürütme iznini 2 kez isteyecektir (1.: Yerel Değişkenleri uygulayın; 2.: "startup" -src-block'u çalıştırın). Dosyamda çok fazla src bloğu var, başka bir dosya-yerel-değişken ayarladım, şöyle org-confirm-babel-evaluate
:
# Local Variables:
# org-confirm-babel-evaluate: nil
# eval: (progn (org-babel-goto-named-src-block "startup") (org-babel-execute-src-block) (outline-hide-sublevels 1))
# End:
Uyarı: Bu ekleme ile emacs, yürütme izni için yalnızca bir kez soracaktır - bu dosyadaki tüm src blokları artık onaylanmadan yürütülebilir. Diğerlerinin daha önce işaret ettiği gibi, bu davranış tehlikeli olabilir ve bu ayara çok dikkat etmelisiniz.
Ancak, ben bu çözüm (özellikle ilk versiyon) daha güvenli olduğunu iddia ediyorum Joe Corneli tarafından verilen birinde en azından nedeniyle edecek yürütmek onay istenecektir. Joe'nun çözümü, dosyada bulunursa, özel bloğu onaylamadan değerlendirecektir. Bir saldırganın elbette özel bloğun adını tahmin etmesi gerekirdi ...
Bu yaklaşımı, örneğin kuruluş dışa aktarma mekanizmalarına uyarlama gerektiren büyük belgeler yazmak için kullanıyorum.