[สตริงที่เหมาะสมของคุณดูผิด - บางทีคุณอาจคัดลอกผิด 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ยังมีคุณสมบัติเหล่านั้น