Impedir a inserção de texto no início de um buffer que comece com texto somente leitura

8

Estou estendendo um pacote Emacs existente e quero tornar uma parte do buffer não editável (somente leitura). Na verdade, quero tornar editável apenas uma linha no meio do buffer e usar o seguinte snippet para conseguir isso:

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

No entanto, ainda posso colocar o cursor no início do buffer e inserir algum texto que não seja o comportamento desejado.

Como posso impedir inserções no início do buffer?

Andriy Tykhonov
fonte

Respostas:

9

Você precisa (antes de adicionar a propriedade read-only), fazer com que o primeiro caractere tenha um valor que inclua read-onlya propriedade front-sticky:

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

Veja o manual do Elisp, nó Sticky Properties. O problema foi que, embora o primeiro caractere teve uma não- nilpropriedade read-only, a inserção antes que não herdou essa propriedade, porque read-onlynão era um front-stickyvalor da propriedade para o primeiro caractere.

Desenhou
fonte
Atualizei o link Sticky Properties, pois a versão anterior com a tag # não estava funcionando no telefone.
precisa