Latar Belakang
Saya sedang menulis mode presentasi untuk Emacs. Saya ingin input menjadi file org, karena file org bagus untuk data.
Masalah
Saya harus mengubah file mode org ke dalam daftar "slide" struktur data yang bisa saya ulangi. Untuk melakukan ini, saya ingin mengambil sesuatu seperti file mode-org berikut:
* this is the first headline, with a title property and no contents
* this is the second headline, with contents
- dash list nested under the second headline
- further nested
** nested headline
dan bisa berjalan itu. Saya sudah mencoba (org-element-parse-buffer)
, dan itu memang memberi saya daftar elemen, tetapi sulit untuk mencari cara untuk melangkah lebih jauh di dalamnya. Misalnya, panggilan (org-element-map (org-element-parse-buffer) 'headline #'identity)
memberi daftar tiga elemen; yang terakhir mewakili "headline bersarang". Saya ingin "nested headline" menjadi anak dari "this headline kedua, dengan konten".
Menghindari masalah XY
Saya tentu saja terbuka dengan cara lain untuk mengubah file mode-org menjadi struktur data Elisp. Saya tidak berpikir ekspor-org adalah alat yang tepat bagi saya, karena saya tidak ingin berakhir dengan file baru yang berisi hasil, tetapi struktur data yang dapat saya ulas. Cara naif saya adalah sesuatu seperti "beri saya semua tajuk top-level, dan kemudian saya bisa mendapatkan properti mereka dan elemen yang terkandung (misalnya, teks biasa atau daftar bersarang - apakah tajuk lebih lanjut atau daftar tanda hubung)".
no-recursion
dariorg-element-map
harus melakukan apa yang Anda inginkan.Jawaban:
Saya memiliki masalah yang sama, jadi mungkin ini akan membantu - Saya tidak terlalu mengenal ekspor org atau internal org, tetapi saya tidak dapat menemukan apa pun yang akan mengurai file org ke struktur pohon. Tapi diberi buffer like
itu akan memberi Anda
dan dapat memasukkan informasi lain dari pohon juga.
Jadi dengan memberikan daftar level yang datar kita perlu menghasilkan pohon, mis. (1 1 2 3 1) => (1 1 (2 (3)) 1). Saya tidak dapat menemukan fungsi yang akan melakukan ini, jadi tulis satu demi satu gambar banyak sel kontra - saya yakin ada cara yang lebih baik untuk melakukan ini tetapi berfungsi. Fungsi ini
unflatten
mengambil daftar datar dan beberapa fungsi untuk mengekstrak informasi yang Anda inginkan dari daftar dan tingkat item dan menghasilkan struktur pohon.Di
org-get-header-list
Anda dapat menambahkan lebih banyak informasi yang ingin Anda ekstrak dari setiap item dengan panggilanorg-element-property
, dan kemudian diorg-get-header-tree
Anda bisa memasukkan fungsi untuk mengekstrak informasi dari daftar.Seperti berdiri ini tidak termasuk penanganan untuk daftar dasbor, tapi mungkin bisa disesuaikan untuk menangani mereka juga tanpa terlalu banyak masalah ...
sumber