To rozwiązanie nie wymaga zmiany init.el
(z niewielkimi modyfikacjami). Wiąże się to jednak z ocenami lokalnymi dla plików - ale dokładnie o to poprosił PO. Zalety rozwiązania to:
- prosi o potwierdzenie oceny kodu
- Kod elisp może być edytowany i testowany w środowisku org-babel
- ponieważ rozwiązanie nie wymaga modyfikacji
init.el
pliku orgmode, mogą być udostępniane (zaufanym) użytkownikom
Przeredagowuję tutaj rozwiązanie.
Dodaj blok src gdzieś w swoim pliku:
#+NAME: startup
#+BEGIN_SRC emacs-lisp
(your-code-here)
#+END_SRC
Następnie umieść to na końcu pliku orgmode:
# Local Variables:
# eval: (progn (org-babel-goto-named-src-block "startup") (org-babel-execute-src-block) (outline-hide-sublevels 1))
# End:
Dodałem, (outline-hide-sublevels 1)
ponieważ lubię ukrywać blok src w nagłówku i chcę, aby podpoziomy były ukryte podczas uruchamiania. Bez tego oświadczenia podpoziomy zostaną rozszerzone o (org-babel-goto-named-src-block "startup")
.
Dzięki temu rozwiązaniu emacs poprosi 2 razy o pozwolenie na wykonanie (1: zastosuj zmienne lokalne; 2: uruchom blok „startup” -src-block). Ponieważ w moim pliku jest wiele bloków src, ustawiłem inną zmienną lokalną dla pliku org-confirm-babel-evaluate
, taką jak ta:
# 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:
Ostrzeżenie: Po dodaniu tego emacs poprosi tylko raz o zgodę na wykonanie - wszystkie bloki src w tym pliku mogą być teraz wykonywane bez dalszego potwierdzenia. Jak zauważyli wcześniej inni, takie zachowanie może być niebezpieczne i powinieneś być bardzo ostrożny z tym ustawieniem.
Jednak twierdzę, że to rozwiązanie (szczególnie pierwsza wersja) jest bezpieczniejsze niż to, które podał Joe Corneli, ponieważ przynajmniej zostaniesz poproszony o potwierdzenie wykonania. Rozwiązanie Joe oceni specjalny blok bez potwierdzenia, jeśli zostanie znaleziony w pliku. Osoba atakująca musiałaby odgadnąć nazwę specjalnego bloku, oczywiście ...
Używam tego podejścia do pisania dużych dokumentów, które wymagają np. Dostosowania mechanizmów eksportu organizacji.