[Chuỗi thích hợp của bạn có vẻ sai - có lẽ bạn đã sao chép sai. foochỉ có 3 ký tự, do đó không thể in phông chữ trên các ký tự 0 đến 4 (nghĩa là các ký tự 0, 1, 2 và 3 - đó là 4 ký tự). Tôi sử dụng 3 thay vì 4 trong ví dụ ở đây.]
(let* ((foo #("foo" 0 3 (fontified t face font-lock-function-name-face)))
(start 0)
(end (length foo)))
(set-text-properties start end nil foo)
foo)
set-text-propertieslà một chức năng tích hợp trong C source code.
(set-text-properties START END PROPERTIES &optional OBJECT)
Thay thế hoàn toàn các thuộc tính của văn bản từ STARTđến END.
Đối số thứ ba PROPERTIESlà danh sách tài sản mới.
Nếu đối số thứ tư tùy chọn OBJECTlà bộ đệm (hoặc nil, có nghĩa là bộ đệm hiện tại) STARTvà ENDlà vị trí bộ đệm (số nguyên hoặc đánh dấu). Nếu OBJECTlà một chuỗi STARTvà ENDlà các chỉ số dựa trên 0 vào nó. Nếu PROPERTIESlà con số không, hiệu quả là loại bỏ tất cả các thuộc tính khỏi phần được chỉ định của ĐỐI TƯỢNG.
Xem hướng dẫn Elisp, thay đổi thuộc tính nút . Ở đó bạn sẽ thấy điều này, dưới chức năng remove-text-properties(mà bạn cũng có thể sử dụng để thực hiện công việc):
Để xóa tất cả các thuộc tính văn bản khỏi văn bản nhất định, sử dụng set-text-propertiesvà chỉ định nilcho danh sách thuộc tính mới.
Như @Dan đã đề cập, bạn cũng có thể sử dụng substring-no-properties, nhưng lưu ý rằng nó trả về một chuỗi mới. Nó không sửa đổi đối tượng chuỗi thực tế mà bạn vượt qua nó. Cả hai remove-text-propertiesvà set-text-propertiesthay đổi chuỗi bạn vượt qua chúng.
Ví dụ:
(setq foo #("foo" 0 3 (fontified t face font-lock-function-name-face)))
(setq bar foo)
(set-text-properties 0 (length foo) nil foo)
Cả hai foovà barbây giờ chỉ là "foo", không có tài sản.
Nhưng:
(setq foo #("foo" 0 3 (fontified t face font-lock-function-name-face)))
(setq bar foo)
(setq foo (substring-no-properties foo))
Bây giờ fookhông có tài sản nhưng barvẫn có chúng.