Ngăn chặn chèn văn bản vào đầu bộ đệm bắt đầu bằng văn bản chỉ đọc


8

Tôi đang mở rộng gói Emacs hiện có và tôi muốn làm cho một phần của bộ đệm không thể chỉnh sửa (chỉ đọc). Trên thực tế, tôi muốn chỉ tạo một dòng ở giữa bộ đệm có thể chỉnh sửa và tôi sử dụng đoạn mã sau để đạt được điều đó:

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

Tuy nhiên, tôi vẫn có thể đặt con trỏ ở đầu bộ đệm và chèn một số văn bản không phải là hành vi mong muốn.

Làm thế nào tôi có thể ngăn chặn chèn vào lúc bắt đầu bộ đệm?

Câu trả lời:


9

Bạn cần (trước khi thêm thuộc tính read-only), làm cho ký tự đầu tiên có giá trị bao gồm thuộc read-onlytính front-sticky:

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

Xem hướng dẫn Elisp, nút Sticky Properties. Vấn đề là mặc dù char đầu tiên có thuộc niltính không read-only, nhưng chèn trước nó không được thừa kế thuộc tính đó, vì read-onlyđó không phải là front-stickygiá trị thuộc tính cho ký tự đầu tiên.


Tôi đã cập nhật liên kết Thuộc tính dính vì phiên bản trước đó với thẻ # không hoạt động trên điện thoại.
Kaushal Modi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.