Saya memiliki kode elisp yang ingin saya jalankan dalam file orgmode ketika mereka memuat (berbeda untuk file yang berbeda, dan didefinisikan dalam file itu sendiri). Apakah ada cara untuk melakukan ini? Saya tidak melihat apa pun di http://orgmode.org/manual/In_002dbuffer-settings.html
Jika saya dapat menambahkan sesuatu ke inisialisasi emacs yang menjalankan blok kode bernama khusus setiap kali sebuah file orgmode memuat, itu mungkin merupakan solusi, tetapi saya tidak yakin bagaimana melakukannya, dan idealnya ada sesuatu yang tertanam di dalamnya.
# -*- eval: (lisp code here) -*-
tetapi Anda juga harus mewaspadai bahayanya. Bahkan jika Anda tidak membagikan dokumen-dokumen ini dengan orang lain, sifat yang ditafsirkan dari Emacs Lisp akan berarti bahwa suatu perubahan secara tidak sengaja dapat mengakibatkan hilangnya data. Juga, mode hook terdengar seperti opsi yang lebih baik jika Anda ingin menjalankan kode yang sama untuk lebih dari satu file.Jawaban:
Solusi ini tidak memerlukan perubahan
init.el
(dengan modifikasi kecil). Ini melibatkan evaluasi file-lokal, tetapi - itulah yang diminta OP. Keuntungan dari solusi ini adalah:init.el
pada file orgmode dapat dibagikan di antara pengguna (tepercaya)Saya ulangi solusinya di sini.
Tambahkan src-block di suatu tempat di file Anda:
Kemudian, letakkan ini di akhir file-orgmode Anda:
Saya telah menambahkan
(outline-hide-sublevels 1)
karena saya suka menyembunyikan src-block di dalam heading dan ingin agar sublevel disembunyikan saat startup. Tanpa pernyataan ini, sublevel akan diperluas oleh(org-babel-goto-named-src-block "startup")
.Dengan solusi ini, emacs akan meminta izin untuk mengeksekusi 2 kali (pertama: terapkan Variabel Lokal; 2: jalankan "startup" -src-block). Karena saya memiliki banyak blok-src di file saya, saya telah menetapkan variabel-file-lokal lain
org-confirm-babel-evaluate
,, seperti ini:Peringatan: Dengan tambahan ini, emacs hanya akan meminta izin sekali untuk mengeksekusi - semua src-blok dalam file itu sekarang dapat dieksekusi tanpa konfirmasi lebih lanjut. Seperti yang telah ditunjukkan orang lain sebelumnya, perilaku ini bisa berbahaya dan Anda harus sangat berhati-hati dengan pengaturan ini.
Namun, saya berpendapat bahwa solusi ini (terutama versi pertama) lebih aman daripada yang diberikan oleh Joe Corneli karena setidaknya Anda akan diminta untuk melakukan konfirmasi. Solusi Joe akan mengevaluasi blok khusus tanpa konfirmasi, jika ditemukan dalam file. Seorang penyerang harus menebak nama blok khusus, tentu saja ...
Saya menggunakan pendekatan ini untuk menulis dokumen besar yang memerlukan, misalnya, adaptasi terhadap mekanisme ekspor-org.
sumber
Jadi, di init.el Anda:
sumber
Karena Anda memintanya
lalu, coba solusi ini .
sumber
Saya setuju dengan saran @ Jooe Corneli tentang menggunakan kail.
Terlintas dalam benak saya juga bahwa Anda dapat memanfaatkan bookmark di sini: letakkan penanda bookmark tertentu di hook. Keuntungan dari penunjuk ke blok kode adalah bahwa ia biasanya dipindahkan secara otomatis (mis. Ketika konten file berubah), sehingga menemukan blok tersebut biasanya secara otomatis dijaga.
[Tetapi tidak jelas bagi saya mengapa Anda memiliki kode dalam file mode-Org, bukan di tempat lain. Kami menganggap itu sebagai yang diberikan, per pernyataan masalah, tapi saya ingin tahu mengapa Anda melakukan itu. Memberi tahu kami lebih banyak tentang desain dalam hal itu bisa mengarah pada bantuan yang lebih baik.]
sumber
Saya telah mencoba meningkatkan kode dari Joe Corneli:
Anda memerlukannya di file init.el Anda:
Setiap kali Anda membuka buffer mode-org, itu akan mencari blok sumber bernama startblock, jika ada, itu akan menjalankannya.
Dalam file mode org Anda, Anda kemudian dapat menempatkan:
sumber