स्ट्रिंग से सजावट (पाठ गुण) कैसे छीनें?


18

एक "सजाया स्ट्रिंग" से मेरा मतलब कुछ ऐसा है

#("foo" 0 4 (fontified t face font-lock-function-name-face))

... "सादे स्ट्रिंग" के विपरीत

"foo"

(यदि एलिसिप कोड एक बफर से सीधे स्ट्रिंग पढ़ता है, तो इसे इस तरह सजाया जा सकता है।)

एक सजाया स्ट्रिंग को एक सादे (सभी सजावट को अलग करके) में बदलने का सबसे सरल तरीका क्या है?


7
सबस्ट्रिंग-नो-गुण
दान

आपको इन गुणों को हटाने की आवश्यकता क्यों है? वे आमतौर पर कोई नुकसान नहीं करते हैं। बस दिखावा वे मौजूद नहीं है एक अच्छा पर्याप्त समाधान हो सकता है।
यंगफ्रॉग

जवाबों:


16

[आपका उचित स्ट्रिंग गलत दिखता है - शायद आपने इसे गलत कॉपी किया है। fooकेवल 3 वर्ण हैं, इसलिए इसे वर्णों 0 से 4 (यानी, वर्ण 0, 1, 2, और 3 - कि 4 वर्ण) पर फ़ॉन्ट किया जाना असंभव है। मैं यहां उदाहरण में 4 के बजाय 3 का उपयोग करता हूं।]

(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


जैसा कि @ उल्लेख किया गया है, आप भी उपयोग कर सकते हैं 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भी उनके पास है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.