[Chuỗi thích hợp của bạn có vẻ sai - có lẽ bạn đã sao chép sai. foo
chỉ 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-properties
là 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 PROPERTIES
là danh sách tài sản mới.
Nếu đối số thứ tư tùy chọn OBJECT
là bộ đệm (hoặc nil, có nghĩa là bộ đệm hiện tại) START
và END
là vị trí bộ đệm (số nguyên hoặc đánh dấu). Nếu OBJECT
là một chuỗi START
và END
là các chỉ số dựa trên 0 vào nó. Nếu PROPERTIES
là 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-properties
và chỉ định nil
cho 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-properties
và set-text-properties
thay đổ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 foo
và bar
bâ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ờ foo
không có tài sản nhưng bar
vẫn có chúng.