मूल-निर्यात की पृष्ठभूमि सेट करें <विषय के अनुसार कोड


24

मैं ऑर्ग-मोड फ़ाइलों को अक्सर निर्यात करता हूं, और उनमें से लगभग सभी में कोड है। जब मैं निर्यात कोड करता हूं, तो यह मेरे विषय के आधार पर पाठ को रंग देता है, हालांकि, मैं नियमित रूप से एक अंधेरे विषय और एक हल्के विषय के बीच स्विच करता हूं। प्रकाश विषय के मामले में, <code>ब्लॉक के लिए एक हल्की पृष्ठभूमि की आवश्यकता होती है, और एक अंधेरे विषय के लिए उन्हें एक गहरे रंग की पृष्ठभूमि की आवश्यकता होती है (अन्यथा मैं एक भूरे रंग की पृष्ठभूमि पर हल्के पीले पाठ के साथ समाप्त होता हूं और यह अपठनीय है)।

मुझे डार्क बैकग्राउंड के लिए इस लाइन को जोड़ना है:

#+HTML_HEAD: <style>pre.src {background-color: #303030; color: #e5e5e5;}</style>

और फिर इसे किसी भी समय निकालने के लिए याद रखें जब मैं हल्के रंग की पृष्ठभूमि पर स्विच करता हूं

क्या कोई तरीका है जो मैं निर्यात समय पर वर्तमान थीम की पृष्ठभूमि का रंग स्वचालित रूप से पता लगा सकता हूं और इसे निर्यात किए गए HTML के सीएसएस में उपयोग कर सकता हूं?

संपादित करें

मैं जॉर्डन के जवाब के साथ जा रहा हूं (धन्यवाद जॉर्डन, आपको कर्म अंक मिलते हैं!), हालांकि मैं अपने समाधान को अपने कोड में जोड़ना चाहता था, क्योंकि यह उनके उत्तर का थोड़ा संशोधित संस्करण था:

(defun my/org-inline-css-hook (exporter)
  "Insert custom inline css to automatically set the
background of code to whatever theme I'm using's background"
  (when (eq exporter 'html)
    (let* ((my-pre-bg (face-background 'default))
           (my-pre-fg (face-foreground 'default)))
      (setq
       org-html-head-extra
       (concat
        org-html-head-extra
        (format "<style type=\"text/css\">\n pre.src {background-color: %s; color: %s;}</style>\n"
                my-pre-bg my-pre-fg))))))

(add-hook 'org-export-before-processing-hook 'my/org-inline-css-hook)

यह न केवल पृष्ठभूमि रंग, बल्कि अग्रभूमि रंग भी सेट करता है। यह मौजूदा org-html-head-extraसेटिंग के लिए लाइन को भी जोड़ता है ताकि अन्य HTML गलती से अधिलेखित न हो। मैंने परीक्षण किया है और यह मेरे लिए बहुत अच्छा काम करता है!


1
मुझे यकीन है कि वहाँ एक रास्ता है, लेकिन यह हमेशा बेहतर नहीं होगा कि हमेशा एक ही विषय लागू करते समय निर्यात करें? या क्या आप जानबूझकर विभिन्न विषयों के साथ निर्यात करते हैं?
मालाबार

@ मलबारबा का आशय यह है कि जो भी विषय मैं वर्तमान में उपयोग कर रहा हूं और जो कोड पढ़ने योग्य है, उसका निर्यात करने में सक्षम हो। चूंकि कई थीम सफाई से स्विच नहीं करती हैं (यहां तक ​​कि disable-theme), मैं केवल HTML को निर्यात करने के लिए एक अलग विषय के साथ Emacs को पुनः आरंभ नहीं करना चाहता, जो मैं दिन में कई बार करता हूं।
ली एच

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

@ मलबारबा मेरा वर्तमान सेटअप कोड ब्लॉकों की पृष्ठभूमि का रंग निर्दिष्ट नहीं करता है (हालांकि मैं सीएसएस में पृष्ठभूमि रंग को हार्ड-कोड कर सकता हूं यदि वह मदद करेगा)। मैं ऑर्ग-मोड कोड ब्लॉक के लिए उपयोग किए जाने वाले विषय की पृष्ठभूमि का रंग पसंद करूंगा। नया शीर्षक मेरे लिए काम करता है।
ली एच

उपरोक्त समाधान के साथ दो समस्याएं हैं। सबसे पहले, 'ग्रे 80' जैसे रंग सीएसएस मूल्यों के लिए सही ढंग से अनुवादित नहीं होंगे, और सेट नहीं होंगे। दूसरी बात यह है कि हर बार निर्यात चलता है, इससे org-html-head-extraजुड़ जाता है, जो बिना रुके विकास की ओर जाता है, हालांकि शैली की कार्यक्षमता ख़राब नहीं होगी।
आरपी डिलन

जवाबों:


10

सबसे पहले, मेरा मानना ​​है कि org htmlizeअपने थीम के अनुसार अपने स्रोत कोड ब्लॉक को स्वचालित रूप से रंगने के लिए उपयोग कर सकता है ।

वैकल्पिक रूप से।

की जाँच करें http://definitelyaplug.b0.cx/post/custom-inlined-css-in-org-mode-html-export/ । यह एक उत्कृष्ट उदाहरण है कि org-export-before-processing-hookHTML निर्यात से पहले एक ओआरजी दस्तावेज़ पर कस्टम सीएसएस को फेंकने के लिए कैसे उपयोग किया जाए।

साइट के नीचे जाने की स्थिति में कोड यहाँ है:

यहाँ एक html एक्सपोर्ट पर, org एक फाइल की खोज करेगा, जिसे वर्तमान निर्देशिका में style.css कहा जाता है। .emacs.d डाइरेक्टरी में एक डिफॉल्ट फाइल होती है और उस सीएसएस को डॉक्यूमेंट में इंजेक्ट किया जाता है। यह अच्छा है लेकिन आपके उपयोग के मामले के लिए बिल्कुल सही नहीं है।

(defun my-org-inline-css-hook (exporter)
  "Insert custom inline css"
  (when (eq exporter 'html)
    (let* ((dir (ignore-errors (file-name-directory (buffer-file-name))))
           (path (concat dir "style.css"))
           (homestyle (or (null dir) (null (file-exists-p path))))
           (final (if homestyle "~/.emacs.d/org-style.css" path)))
      (setq org-html-head-include-default-style nil)
      (setq org-html-head (concat
                           "<style type=\"text/css\">\n"
                           "<!--/*--><![CDATA[/*><!--*/\n"
                           (with-temp-buffer
                             (insert-file-contents final)
                             (buffer-string))
                           "/*]]>*/-->\n"
                           "</style>\n")))))

(add-hook 'org-export-before-processing-hook 'my-org-inline-css-hook)

आप इसे कुछ तरीकों से कस्टमाइज़ कर सकते हैं ताकि यह काम कर सके कि आप कैसे चाहते हैं।

एक तरीका यह होगा कि आप अपने विषय के आधार पर सीएसएस का निर्माण करें और उसे सम्मिलित करें।

यहां एक संशोधित संस्करण है जो pre.srcडिफ़ॉल्ट चेहरों के हेक्स मान की पृष्ठभूमि सेट करता है: पृष्ठभूमि संपत्ति।

(defun my-org-inline-css-hook (exporter)
  "Insert custom inline css"
  (when (eq exporter 'html)
    (let ((my-pre-bg (face-background 'default)))
      (setq org-html-head-include-default-style nil)
      (setq org-html-head
            (format "<style type=\"text/css\">\n pre.src { background-color: %s;}</style>\n" my-pre-bg)))))

(add-hook 'org-export-before-processing-hook 'my-org-inline-css-hook)

1
धन्यवाद जॉर्डन, यह बहुत अच्छा है! मैंने अपने मूल प्रश्न को अपने थोड़े से संपादित संस्करण के साथ अपडेट किया है, लेकिन आपको इनाम और समाधान मिलेगा!
ली एच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.