Saya memiliki buffer yang memperlihatkan dokumentasi untuk modul Ansible. Buffer ini memiliki mode utama sendiri yang menyediakan semua hal standar. Khususnya, ini mengklasifikasikan buffer untuk menyorot markup inline, opsi, bagian, dll. Semua dalam semua, itu sangat mirip dengan M-x man
.
Di bagian bawah dokumentasi biasanya ada beberapa contoh kode dalam YAML. Saya ingin mengklasifikasikan ini juga. Saya bisa menambahkan kata kunci kunci font saya sendiri untuk YAML, tentu saja, tetapi saya lebih suka menggunakan kembali fontifikasi Mode YAML.
Bagaimana saya bisa melakukan itu? Secara khusus, bagaimana saya bisa menggunakan mode utama yang berbeda untuk mengklasifikasikan wilayah buffer tertentu?
Perhatikan bahwa Mode YAML tidak perlu aktif di wilayah ini. Seluruh buffer hanya merupakan buffer tampilan pasif, dan tidak dimaksudkan untuk diedit. Saya benar-benar hanya memerlukan fontifikasi yang dihasilkan seolah-olah Mode YAML aktif di wilayah itu.
Saya kira saya bisa menyalin wilayah buffer ke buffer sementara, mengaktifkan Mode YAML, mengatur buffer, dan menyalin semua properti teks. Apakah itu akan berhasil? Jika demikian, bagaimana cara menyalin properti teks, dan properti apa yang relevan untuk disalin? Atau ada pendekatan yang lebih baik?
Jawaban:
Saya baru-baru ini menemukan masalah yang sama, pada dasarnya saya ingin mengklasifikasikan potongan kode dalam dokumentasi yang saya dapatkan dari sumber lain. Saya mengikuti pendekatan yang disebutkan di akhir jawaban Anda dan itu berhasil baik untuk saya. Fungsi saya berakhir dengan beberapa hal seperti berikut ini
Seperti @Malabarba tunjukkan dalam komentar pendekatan sederhana di atas tidak berfungsi jika buffer tujuan menggunakan font-lock-mode. Namun kita dapat menipu mode font-lock-mode untuk meyakini bahwa string sudah font dikunci dengan menyetel properti teks
font-lock-face
keface
, (kita mendapatkanface
set properti, ketika kita menggunakan fungsi di atas) dan mengatur properti teksfontified
ket
. Fungsi berikut mengambil string yang dikembalikan oleh fungsi di atas dan melakukan pemrosesan yang diperlukan sehingga string tersebut dimasukkan dengan huruf (ini diambil dariorg-src-font-lock-fontify-block
fungsi mode-orgSekarang Anda dapat menggunakannya sebagai berikut
sumber
sx.el
, tetapi penting untuk dicatat bahwa itu hanya akan berfungsi jika buffer tujuan tidak menggunakan mode font-lock-mode.Library Narrow Indirect (
narrow-indirect
) dapat membantu di sini - lihat komentar tajuknya. Itu bergantung pada:Perhatikan bahwa penyempitan dinonaktifkan secara default karena dianggap pemula-tidak ramah (pengikatan default adalah
C-x n n
). Anda dapat mengaktifkannya dengan meletakkan yang berikut ini di file init Anda:Anda juga dapat melihat buatan tangan
myfn-narrow-indirect
saya di conf saya .sumber
disabled
properti dari perintah untuk memanggilnya dari Emacs Lisp. Ini hanya memengaruhi penggunaan interaktif.Saya akan menyarankan melihat blok org-src-font-lock-fontify-yang menyediakan fungsi ini untuk blok sumber mode-org. Tampaknya hanya menyalin bagian-bagian yang relevan ke buffer lain, mengaktifkan mode utama di sana, dan kemudian menyalin teks yang sudah di-fontifikasi kembali. Meretas, tetapi tampaknya berhasil.
sumber