Cegah memasukkan teks di awal buffer yang dimulai dengan teks hanya-baca

8

Saya memperpanjang paket Emacs yang ada dan saya ingin membuat bagian dari buffer tidak dapat diedit (hanya baca). Bahkan, saya ingin membuat hanya satu baris di tengah buffer yang dapat diedit dan saya menggunakan cuplikan berikut untuk mencapai itu:

(put-text-property (point-min) point-before-editable-text 'read-only t)
;; (put-text-property point-after-editable-text (point-max) 'read-only t)

Namun, saya masih bisa meletakkan kursor di awal buffer dan menyisipkan beberapa teks yang bukan perilaku yang diinginkan.

Bagaimana saya bisa mencegah penyisipan di awal buffer?

Andriy Tykhonov
sumber

Jawaban:

9

Anda perlu (sebelum menambahkan properti read-only), membuat karakter pertama memiliki nilai yang termasuk read-onlyuntuk properti front-sticky:

(put-text-property 1 2 'front-sticky '(read-only)) ; Do this one first.
(put-text-property (point-min) 50 'read-only t)

Lihat manual Elisp, simpul Sticky Properties. Masalahnya adalah bahwa meskipun char pertama memiliki non- nilproperti read-only, penyisipan sebelum itu tidak mewarisi properti itu, karena read-onlyitu bukan front-stickynilai properti untuk karakter pertama.

Drew
sumber
Saya memperbarui tautan Sticky Properties karena versi sebelumnya dengan tag # tidak berfungsi di ponsel.
Kaushal Modi