मैं एक विशिष्ट चेहरे के साथ पाठ कैसे सम्मिलित करूं?


15

मेरे पास एक चेहरा है, इस तरह से बनाया गया है:

(defface test-face
  '((t . (:height 2.0)))
  "A face for testing.")

मैं उस चेहरे के साथ कुछ पाठ सम्मिलित करना चाहूंगा। लेकिन ये तरीके चेहरे के बिना पाठ सम्मिलित करते हैं:

(insert (propertize "text to insert" 'face 'test-face))

(let ((current-string "text to insert"))
  (put-text-property 1 (length current-string) 'face 'test-face)
  (insert current-string))

और यहां तक ​​कि पहले पाठ सम्मिलित करना, फिर उस पर चेहरा लगाने के लिए वापस जाना काम नहीं कर रहा है:

(progn
  (insert "text to insert")
  (add-text-properties
   (save-excursion
     (backward-word 3)
     (point))
   (point)
   '(face test-face)))

समस्या चेहरे की परिभाषा नहीं है, क्योंकि अगर मैं इसे अनुकूलित करने के लिए जाता हूं, तो यह पहले से ही दो बार बड़ा दिखा रहा है। फिर भी, चेहरे को अंदर लेने से भी काम नहीं होता है:

(insert (propertize "to insert" 'face '(:height 2.0)))

तो मैं विशिष्ट चेहरे के साथ कुछ पाठ में कैसे डाल सकता हूं? मुझे पता है कि मैं एक ओवरले का उपयोग कर सकता हूं, लेकिन यह ओवरकिल की तरह लगता है क्योंकि यह अधिक क्रिया है, पहले पाठ को सम्मिलित करने की आवश्यकता होती है (इसलिए हमें पाठ के आकार और स्थिति का पता लगाना होगा) और अधिक कचरा बनाने की आवश्यकता है एकत्र किया हुआ।


2
ऊपर दिए गए उदाहरणों को मूलभूत मोड या फ़ॉन्ट-लॉक अक्षम (वे ठीक काम करेंगे) के साथ किसी अन्य मोड में आज़माएं। मुद्दा यह है कि फ़ॉन्ट-लॉक faceसिंटैक्स हाइलाइटिंग कोड के लिए भी उपयोग होता है, इसलिए यह आपके चेहरे की संपत्ति को बदल रहा है। मुझे यकीन है कि किसी दिए गए पाठ के लिए फ़ॉन्ट-लॉक को अक्षम करने का कोई तरीका होना चाहिए लेकिन मुझे कोड को थोड़ा शोध करना होगा (कोई समय सही नहीं)। शायद रीडिंग font-lock.elकोड कुछ सुराग दे सकता है
इकबाल अंसारी

जवाबों:


16

कोड के साथ कुछ समस्याएँ हैं:

  • put-text-propertyकिसी वस्तु पर लागू किया जाता है। इस मामले में आपकी स्ट्रिंग। आपको अंतिम पैरामीटर के रूप में इसे पास करने की आवश्यकता है।
  • put-text-property शून्य पर गिनना शुरू करता है।
  • यदि font-lock-modeसक्षम है, तो यह faceसंपत्ति के किसी भी पाठ को छीन लेगा ।

यदि कोड-लॉक मोड अक्षम है, तो कोड का निम्नलिखित टुकड़ा काम करता है:

(let ((current-string "text to insert"))
  (put-text-property 0 (length current-string) 'face 'font-lock-warning-face
                     current-string)
  (insert current-string))

यदि आप इसे फॉन्ट-लॉक सक्षम के साथ उपयोग करना चाहते हैं, तो आप font-lock-faceइसके बजाय संपत्ति सेट कर सकते हैं । इसका प्रभाव समान है लेकिन इससे प्रभावित नहीं होता है font-lock


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