Evite insertar texto al comienzo de un búfer que comienza con texto de solo lectura

8

Estoy extendiendo un paquete Emacs existente y quiero hacer que una parte del búfer no sea editable (solo lectura). De hecho, quiero hacer que solo una línea en el medio del búfer sea editable y utilizo el siguiente fragmento para lograrlo:

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

Sin embargo, todavía puedo colocar el cursor al comienzo del búfer e insertar texto que no sea el comportamiento deseado.

¿Cómo puedo evitar las inserciones al comienzo del búfer?

Andriy Tykhonov
fuente

Respuestas:

9

Debe (antes de agregar la propiedad read-only), hacer que el primer carácter tenga un valor que incluya read-onlypara la propiedad front-sticky:

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

Consulte el manual de Elisp, nodo Sticky Properties. El problema era que, aunque el primer carácter tenía una no nilpropiedad read-only, la inserción antes de que no heredara esa propiedad, porque read-onlyno era un front-stickyvalor de propiedad para el primer carácter.

Dibujó
fuente
Actualicé el enlace Sticky Properties ya que la versión anterior con la etiqueta # no funcionaba en el teléfono.
Kaushal Modi