[สตริงที่เหมาะสมของคุณดูผิด - บางทีคุณอาจคัดลอกผิด foo
มีเพียง 3 ตัวอักษรดังนั้นจึงเป็นไปไม่ได้ที่จะถูกทำให้เป็นแบบอักษรบนตัวอักษร 0 ถึง 4 (เช่นตัวอักษร 0, 1, 2 และ 3 - นั่นคือ 4 ตัวอักษร) ฉันใช้ 3 แทน 4 ในตัวอย่างที่นี่]
(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
เป็นฟังก์ชั่นในC source code
ตัว
(set-text-properties START END PROPERTIES &optional OBJECT)
แทนที่คุณสมบัติของข้อความจากSTART
เป็นEND
เป็น
อาร์กิวเมนต์ที่สามPROPERTIES
คือรายการคุณสมบัติใหม่
หากอาร์กิวเมนต์ที่สี่ที่เป็นทางเลือกOBJECT
คือบัฟเฟอร์ (หรือศูนย์ซึ่งหมายถึงบัฟเฟอร์ปัจจุบัน) START
และEND
เป็นตำแหน่งบัฟเฟอร์ (จำนวนเต็มหรือเครื่องหมาย) ถ้าOBJECT
เป็นสตริงSTART
และEND
เป็นดัชนีที่อ้างอิง 0 รายการ หากPROPERTIES
เป็นศูนย์ผลกระทบคือการลบคุณสมบัติทั้งหมดออกจากส่วนที่กำหนดของ OBJECT
ดู Elisp คู่มือโหนดเปลี่ยนคุณสมบัติ ที่นั่นคุณจะเห็นสิ่งนี้ภายใต้ฟังก์ชั่นremove-text-properties
(ซึ่งคุณสามารถใช้ในการทำงาน):
ในการลบคุณสมบัติข้อความทั้งหมดออกจากข้อความบางข้อความให้ใช้set-text-properties
และระบุnil
สำหรับรายการคุณสมบัติใหม่
ตามที่ @Dan พูดถึงคุณสามารถใช้งานsubstring-no-properties
ได้ แต่โปรดทราบว่ามันส่งคืนสตริงใหม่ มันไม่ได้ปรับเปลี่ยนวัตถุสตริงที่เกิดขึ้นจริงที่คุณผ่านมัน ทั้งสองremove-text-properties
และset-text-properties
เปลี่ยนสตริงที่คุณส่งผ่านพวกเขา
ตัวอย่างเช่น:
(setq foo #("foo" 0 3 (fontified t face font-lock-function-name-face)))
(setq bar foo)
(set-text-properties 0 (length foo) nil foo)
ทั้งสองfoo
และbar
ตอนนี้เป็นเพียง"foo"
โดยไม่มีคุณสมบัติ
แต่:
(setq foo #("foo" 0 3 (fontified t face font-lock-function-name-face)))
(setq bar foo)
(setq foo (substring-no-properties foo))
ตอนนี้foo
ไม่มีคุณสมบัติ แต่bar
ยังมีคุณสมบัติเหล่านั้น