Verhindern Sie das Einfügen von Text am Anfang eines Puffers, der mit schreibgeschütztem Text beginnt

8

Ich erweitere ein vorhandenes Emacs-Paket und möchte einen Teil des Puffers nicht bearbeitbar machen (schreibgeschützt). Tatsächlich möchte ich nur eine Zeile in der Mitte des Puffers bearbeitbar machen und verwende dazu das folgende Snippet:

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

Ich kann jedoch immer noch den Cursor an den Anfang des Puffers setzen und Text einfügen, der nicht dem gewünschten Verhalten entspricht.

Wie kann ich Einfügungen am Anfang des Puffers verhindern?

Andriy Tykhonov
quelle

Antworten:

9

Sie müssen (vor dem Hinzufügen einer Eigenschaft read-only) dafür sorgen, dass das erste Zeichen einen Wert read-onlyfür die Eigenschaft enthält front-sticky:

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

Siehe das Elisp-Handbuch, Knoten Sticky Properties. Das Problem war, dass, obwohl das erste Zeichen eine Nicht- nilEigenschaft hatte read-only, das Einfügen, bevor es diese Eigenschaft nicht erbte, read-onlykein front-stickyEigenschaftswert für das erste Zeichen war.

Drew
quelle
Ich habe den Link Sticky Properties aktualisiert, da die frühere Version mit dem Tag # auf dem Telefon nicht funktioniert hat.
Kaushal Modi