एक अन्य प्रमुख मोड के साथ एक बफर के एक क्षेत्र को व्यवस्थित करें


12

मेरे पास एक बफ़र है जो Ansible मॉड्यूल के लिए प्रलेखन दिखाता है। इस बफ़र की अपनी एक प्रमुख विधा है जो सभी मानक सामान प्रदान करती है। विशेष रूप से, यह इनलाइन मार्कअप, विकल्प, अनुभाग, आदि सभी को उजागर करने के लिए बफर को सूचित करता है, यह सभी के समान है M-x man

प्रलेखन के निचले भाग में आमतौर पर YAML में कुछ कोड उदाहरण होते हैं। मैं इन्हें भी बेहतर बनाना चाहूंगा। मैं बेशक, YAML के लिए अपने स्वयं के फ़ॉन्ट लॉक कीवर्ड जोड़ सकता हूं, लेकिन मैं YAML मोड के फ़ॉन्टकरण का फिर से उपयोग करना पसंद करूंगा।

मैं उसे कैसे कर सकता हूँ? विशेष रूप से, मैं किसी बफर के किसी विशेष क्षेत्र को फ़ॉन्ट करने के लिए एक अलग प्रमुख मोड का उपयोग कैसे कर सकता हूं?

ध्यान दें कि YAML मोड को इस क्षेत्र में सक्रिय होने की आवश्यकता नहीं है। संपूर्ण बफ़र केवल एक निष्क्रिय प्रदर्शन बफ़र है, और संपादित करने का इरादा नहीं है। मुझे वास्तव में केवल उस फॉन्टिफिकेशन की आवश्यकता है जैसे कि उस क्षेत्र में YAML मोड सक्रिय था।

मुझे लगता है कि मैं बफर के क्षेत्र को एक अस्थायी बफर में कॉपी कर सकता हूं, YAML मोड को सक्षम कर सकता हूं, बफर को सक्रिय कर सकता हूं, और सभी अन्य गुणों को कॉपी कर सकता हूं। क्या इससे काम हो जायेगा? यदि हां, तो मैं पाठ गुणों की प्रतिलिपि कैसे बना सकता हूं, और प्रासंगिक गुणों को कॉपी करने के लिए क्या हैं? या एक बेहतर दृष्टिकोण है?


गैर-यम फ़ॉन्टकरण कैसे कार्यान्वित किया जाता है? क्या आप पाठ गुण मैन्युअल रूप से लागू करते हैं, या क्या आप फ़ॉन्ट-लॉक-मोड का उपयोग करते हैं?
मालाबार

: इस पोस्ट में लिंक योग-अप कम से कम एक अच्छा बाहर वहाँ विकल्पों में से हिस्सा wisdomandwonder.com/link/8610/...
grettke

जवाबों:


10

मैं हाल ही में इसी तरह की समस्या के साथ आया था, मैं मूल रूप से प्रलेखन में कोड स्निपेट्स को फ़ॉन्ट करना चाहता था जो मुझे कुछ अन्य स्रोत मिला। मैंने आपके उत्तर के अंत में बताए गए दृष्टिकोण का पालन किया और यह मेरे लिए ठीक रहा। फ़ंक्शन मैं निम्नलिखित जैसी किसी चीज़ के साथ समाप्त हुआ

(defun my-fontify-yaml (text)
  (with-temp-buffer
    (erase-buffer)
    (insert text)
    (delay-mode-hooks (yaml-mode))
    (font-lock-default-function 'yaml-mode)
    (font-lock-default-fontify-region (point-min)
                                      (point-max)
                                      nil)
    (buffer-string)))

जैसा कि @Malabarba ने टिप्पणी में बताया कि ऊपर दिए गए सरल दृष्टिकोण से काम नहीं होता है यदि गंतव्य बफर फ़ॉन्ट-लॉक-मोड का उपयोग करता है। हालाँकि हम फॉन्ट-लॉक-मोड को यह मान सकते हैं कि टेक्स्ट प्रॉपर्टी font-lock-faceको सेट करके स्ट्रिंग पहले से ही फॉन्ट है face, (हम faceप्रॉपर्टी सेट प्राप्त करते हैं, जब हम ऊपर फंक्शन का उपयोग करते हैं) और टेक्स्ट-प्रॉपर्टी सेट fontifiedकरने के लिए t। निम्न फ़ंक्शन उपरोक्त फ़ंक्शन द्वारा लौटाए गए स्ट्रिंग को लेता है और आवश्यक प्रसंस्करण करता है ताकि स्ट्रिंग को फ़ॉन्टबद्ध किया जाए (यह ऑर्ग-मोड org-src-font-lock-fontify-blockफ़ंक्शन से लिया गया है

(defun my-fontify-using-faces (text)
  (let ((pos 0))
    (while (setq next (next-single-property-change pos 'face text))
      (put-text-property pos next 'font-lock-face (get-text-property pos 'face text) text)
      (setq pos next))
    (add-text-properties 0  (length text) '(fontified t) text)
    text))

अब आप इसे निम्नानुसार उपयोग कर सकते हैं

(insert (my-fontify-using-faces (my-fontify-yaml "application: test\nversion: 1")))

यह वही समाधान है जिसके लिए मैंने पाया था sx.el, लेकिन यह ध्यान रखना महत्वपूर्ण है कि यह केवल तभी काम करेगा जब गंतव्य बफर फ़ॉन्ट-लॉक-मोड का उपयोग नहीं करता है।
मालाबार

सही! मुझे सिर्फ इस बात का एहसास हुआ कि यह मेरे लिए काम कर रहा है क्योंकि मैं बफर में इस्तेमाल किया गया था, जहां फॉन्ट-लॉक का इस्तेमाल नहीं किया गया था (हेल्प बफर)
इकबाल अंसारी

@ मालाबार ने फॉन्ट-लॉक-मोड सक्षम के साथ गंतव्य बफ़र्स के साथ इस काम को बनाने का एक तरीका पाया
इकबाल अंसारी


ओह अच्छा! खुशी है कि मैं मदद कर सकता हूँ :)
इकबाल अंसारी

3

लाइब्रेरी नैरो इनडायरेक्ट ( narrow-indirect) यहाँ मदद कर सकता है - हेडर कमेंट्री पर एक नज़र। यह पर निर्भर करता है:

  1. संकुचन, जो एक बफर पर एक हिस्से के संपादन को सीमित करता है, और
  2. अप्रत्यक्ष बफ़र, जो एक बफर को दूसरे में कॉपी करते हैं जिसके लिए आप प्रमुख मोड को बदल सकते हैं।

ध्यान दें कि संकीर्णता डिफ़ॉल्ट रूप से अक्षम है क्योंकि इसे शुरुआती-अनफ्रीगेटेड (डिफ़ॉल्ट बाइंडिंग C-x n n) माना जाता है । आप अपनी इनिट फ़ाइल में निम्नलिखित डालकर इसे सक्षम कर सकते हैं:

(put 'narrow-to-region 'disabled nil)

तुम भी मेरे हाथ से बने के लिए देख सकते हैं myfn-narrow-indirectमेरी में conf


क्या संकुचन वास्तव में फ़ॉन्ट लॉक को प्रभावित करता है, अर्थात इसे संकुचित क्षेत्र के बाहर से दूर रखता है? क्या फॉन्ट लॉक वास्तव में कभी बफर प्रतिबंध नहीं हटाता है?
चंद्रग्रहण

और वैसे भी, विकी पैकेज एक विकल्प नहीं है।
चंद्रग्रहण

इसके अलावा, आपको disabledEmacs Lisp से कॉल करने के लिए प्रॉपर्टी को कमांड से हटाने की जरूरत नहीं है । यह केवल इंटरैक्टिव उपयोग को प्रभावित करता है।
चंद्रग्रहण

0

मेरा सुझाव है कि org-src-font-lock-fontify-block को देखें जो कि ऑर्ग-मोड सोर्स ब्लॉक के लिए यह कार्यक्षमता प्रदान करता है। ऐसा लगता है कि संबंधित भागों को किसी अन्य बफ़र पर कॉपी करें, वहां प्रमुख मोड को सक्षम करें, और फिर फ़ॉन्ट टेक्स्ट को कॉपी करें। Hackish, लेकिन यह काम करने लगता है।


2
यह उत्तर एक टिप्पणी इंसोफर की तरह दिखता है क्योंकि यह समस्या से निपटने के लिए एक सुझाई गई दिशा प्रदान करता है, लेकिन पूर्ण उत्तर नहीं। कृपया इसे टिप्पणी में बदलने पर विचार करें।
दान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.