ऑर्ग-मोड इंडेंटेशन को कैसे कस्टमाइज़ करें?


12

यह प्रश्न वास्तव में उठता है क्योंकि मैं गैर-मोनोस्पेस फ़ॉन्ट, (सबोन, मिनियन, गारमोंड, आदि) का उपयोग करना पसंद करता हूं। ऑर्ग-इंडेंट-मोड का उपयोग करने पर यह एक समस्या का कारण बनता है, क्योंकि हेडलाइंस के तहत पाठ अब हेडलाइन के साथ संरेखित नहीं हैं। उदाहरण: यहाँ छवि विवरण दर्ज करें

फ़ॉन्ट जॉर्जिया है। अब, यदि मैं कंसोल में बदल जाता हूं:

यहाँ छवि विवरण दर्ज करें

मुझे लगता है कि समस्या यह है कि गैर-मोनोस्पेस फ़ॉन्ट में, "स्पेस" और * एक ही स्थान को नहीं लेता है। हालांकि मुझे नहीं पता कि इसे कैसे हल किया जाए। मैंने इंटरनेट पर खोज की है और खुद इंडेंटेशन को ठीक करने के लिए एक ट्यूटोरियल नहीं खोज सका। मैंने org-indent.el को पढ़ने की कोशिश की है, लेकिन मुझे समझने के लिए यह एक लंबा शॉट है। मदद बहुत सराहना की है!


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

1
लगता है कि ऑर्ग मोड के साथ इसका कोई लेना-देना नहीं है और आप सोच रहे हैं कि गैर-मोनोस्पेस फ़ॉन्‍ट को कैसे संरेखित किया जाए। उत्तर यह है कि आपको कोड का उपयोग करने की आवश्यकता है - आप अन्य वर्णों के समान चौड़ाई वाले अंतरिक्ष वर्णों पर भरोसा नहीं कर सकते हैं, आदि संक्षेप में, सामान्य रूप से आप भाग्य से बाहर हैं।
ड्रू

@ क्या आप सही "सामान्य रूप में" हो सकते हैं। लेकिन इस विशिष्ट मुद्दे के लिए एक समाधान है, मेरा जवाब देखें। इंडेंटेशन के लिए उपयोग किए जाने वाले प्रमुख स्थान org-indentवास्तव में नहीं हैं, वे सिर्फ line-prefixगुण हैं, इसलिए उन्हें किसी अन्य वर्ण द्वारा प्रतिस्थापित किया जा सकता है जब तक कि यह अदृश्य न हो।
पदावनत

@deprecated: मैं देख रहा हूं। सुधारों के लिए धन्यवाद। BTW, शायद Org ही डिफ़ॉल्ट हो सकता है, आप क्या सुझाव देते हैं। या बस SPCवर्णों का उपयोग करें लेकिन पाठ (या ओवरले) संपत्ति के साथ जो एक चेहरे को लगाता है (डिफ़ॉल्ट रूप से) में एक मोनोसैप्ड फ़ॉन्ट होता है। शायद एक संगठन वृद्धि अनुरोध क्रम में है। ;-)
ड्रयू

@ क्या यह वास्तव में फ़ॉन्ट-लॉक के साथ करना बहुत आसान है, है ना?
क्लेमेंट

जवाबों:


9

एक उपाय यह है org-indent-stringsकि रिक्त स्थान के बजाय तारों का उपयोग इंडेंटेशन कैरेक्टर के रूप में किया जाए। इसका मतलब है कि आनुपातिक फ़ॉन्ट का उपयोग करते हुए भी इंडेंटेशन की चौड़ाई हमेशा सही होगी। फिर चाल को इंडेंटेशन के अग्रभूमि रंग को पृष्ठभूमि के रंग के समान सेट करना है, ताकि सितारे अदृश्य हो जाएं।

हम निम्नलिखित कोड के साथ इसे प्राप्त कर सकते हैं, जो फ़ंक्शन को सलाह देता है org-indent-initialize:

(require 'cl)
(defun org-indent-use-stars-for-strings ()
  "Initialize the indentation strings with stars instead of spaces."
  (setq org-indent-strings (make-vector (1+ org-indent-max) nil))
  (aset org-indent-strings 0 nil)
  (loop for i from 1 to org-indent-max do
    (aset org-indent-strings i
          (org-add-props
          (concat (make-string (1- i) ?*) ; <- THIS IS THE ONLY CHANGE
              (char-to-string org-indent-boundary-char))
          nil 'face 'org-indent))))

(advice-add 'org-indent-initialize :after #'org-indent-use-stars-for-strings)
(set-face-foreground 'org-indent "white")

परिणाम मैक ओएस एक्स का उपयोग करके मेरे लिए इस तरह दिखता है emacs -Qऔर (set-face-font 'default :family "Gill Sans"):

यहाँ छवि विवरण दर्ज करें


हाय @deprecated, उत्तर प्रदान करने के लिए बहुत बहुत धन्यवाद! यह एक मूर्खतापूर्ण प्रश्न है लेकिन क्या मुझे अपना कोड org-indent.el या my init.el में रखना चाहिए? न ही मेरे लिए काम करने लगता है। मैं विंडोज़ के तहत 24.4 Emacs का उपयोग कर रहा हूं, - क्या मुझे कुछ भी संकलन करने की आवश्यकता है या क्या? धन्यवाद!
एलेक्स

ठीक है, मैंने एक बेवकूफ सवाल पूछा। मुझे org-indent.el को संकलित करने की आवश्यकता है। भविष्य में संदर्भ के लिए:: सबसे आसान तरीका है इस लाइन को बदलने के लिए किया जाएगा (concat (make-string (1- i) ?\ ) करने के लिए (concat (make-string (1- i) ?*) परिभाषा की org-indent-initializeयानी (defun org-indent-initialize... तो संगठन-indent.elc के संकलन ऑर्ग-indent.el करने के लिए MX बाइट-संकलन फ़ाइल का उपयोग करें। फिर emacs को पुनरारंभ करें।
एलेक्स

3

पदावनत का जवाब बहुत अच्छा है, लेकिन यह मेरे लिए बहुत काम नहीं आया। मैं वर्तमान में Emacs 24.4 और org 8.2.4 पर हूं, और सलाह देने से org-indent-initializeकुछ नहीं हुआ। मुझे बदले हुए इंडेंट चरित्र के साथ फ़ंक्शन को फिर से परिभाषित करना पड़ा, और यह काम किया। शायद जब मैं Emacs 24.5 और org 8.3 पर अपग्रेड करता हूँ तो सलाह काम करेगी।

लेकिन मुझे कुछ अन्य समायोजन भी करने पड़े, क्योंकि मैं अलग-अलग शीर्षक स्तरों के लिए विभिन्न आकार के चर-चौड़ाई वाले फ़ॉन्ट का उपयोग करता हूं, जिसका अर्थ है कि स्तर -1 शीर्षक का स्तर -2 *के समान चौड़ाई नहीं है, और इसी तरह।

इसलिए मुझे भी ऐसा करना पड़ा:

  1. यह निर्धारित करने के लिए कि वे एक ही आकार में एक ही फ़ॉन्ट का उपयोग करते हैं , चेहरे सेट करें org-hide(हेडलाइन लाइनों का उपयोग करने के लिए) और org-indent(गैर-हेडलाइन लाइनों को इंडेंट करने के लिए उपयोग किया जाता है)।
  2. चर सेट org-indent-boundary-characterकरने के लिए *डिफ़ॉल्ट के बजाय (एक अंतरिक्ष)। यह वह चरित्र है जो इंडेंटेशन वर्णों के बाद लेकिन सामग्री से पहले डाला जाता है। मुझे यकीन नहीं है कि अगर यह बदलना एक आवश्यकता है, लेकिन यह स्थिरता में मदद करता है। यह आपके द्वारा उपयोग किए जा रहे फ़ॉन्ट, आकार आदि पर निर्भर हो सकता है।

org-indent-initializeउपलब्ध कराए गए परिवर्तन के अतिरिक्त उन चीजों को करने से ऐसा लगता है कि यह किया गया है। मैं इस तरह देख एक बफर के साथ समाप्त होता है:

स्क्रीनशॉट

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

वैसे भी, यह शायद काफी अच्छा है। :)

पीएस के अनुरोध के अनुसार, यहां मेरे org-levelचेहरे हैं। इनसे नकल की जाती है custom-set-faces, लेकिन यदि आप इसका उपयोग नहीं करते हैं customizeतो आप इसे इसके बाहर स्थापित कर सकते हैं।

 '(org-level-1 ((t (:inherit variable-pitch :foreground "#cb4b16" :weight bold :height 1.3))))
 '(org-level-2 ((t (:inherit variable-pitch :foreground "#859900" :weight bold :height 1.2))))
 '(org-level-3 ((t (:inherit variable-pitch :foreground "#268bd2" :weight bold :height 1.15))))
 '(org-level-4 ((t (:inherit variable-pitch :foreground "#b58900" :weight bold :height 1.1))))
 '(org-level-5 ((t (:inherit variable-pitch :foreground "#2aa198" :weight bold))))
 '(org-level-6 ((t (:inherit variable-pitch :foreground "#6c71c4" :weight bold))))
 '(org-level-7 ((t (:inherit variable-pitch :foreground "#d33682" :weight bold))))
 '(org-level-8 ((t (:inherit variable-pitch :foreground "#dc322f" :weight bold))))

@bluejay मुझे पसंद है कि यह कैसे दिखता है। क्या आपके पास यह पोस्ट करने के लिए पूर्ण कॉन्फ़िगर है?
erikstokes

खैर, मैं solarized-darkविषय का उपयोग कर रहा हूं , जो उस solarized-themeपैकेज का हिस्सा है जिसे आप ईएलपीए से स्थापित कर सकते हैं। org-level-*चेहरे के लिए के रूप में , मैं उन्हें ऊपर के जवाब में जोड़ देंगे।
6

यह सुपर कूल लग रहा है। आप उन विशेष प्रतीकों के साथ डिफ़ॉल्ट * को कैसे बदलें?
एलेक्स

वह org-bulletsपैकेज से है। के package-list-packagesसाथ शुरू होने वाले सभी पैकेजों को चलाएं और जांचें org-। :)
ब्ल्यूज

2

किसी तरह मुझे अपने सेटअप के लिए काम करने के लिए अन्य उत्तर नहीं मिल सके, लेकिन मेरे लिए सबसे तेज़ और सबसे आसान फिक्स था:

`M-x customize-face org-hide`

फिर, केवल Font Familyअपने मोनोस्पेस फ़ॉन्ट (मेरे मामले में Iosevka) के लिए विशेषता बदलें ।

और यह शाब्दिक रूप से आपको केवल इतना करना है , क्योंकि org-indent(चेहरे की रूपरेखा इंडेंटेशन के लिए) स्वचालित रूप से विरासत में मिली है org-hide(सुर्खियों में प्रमुख सितारों को छिपाने के लिए इस्तेमाल किया जाने वाला चेहरा)

यहाँ छवि विवरण दर्ज करें


1

एक बहुत सरल समाधान: ऑर्गन मोड में, M-:निम्नलिखित दबाएं और चलाएं

(font-lock-add-keywords 
 nil 
 '(("^[[:space:]*]+" 0 '(face (:family "Ubuntu Mono")) append))
 'append)

M-x font-lock-fontify-bufferउसके बाद आपको जरूरत पड़ सकती है। यह समाधान केवल प्रमुख पात्रों (रिक्त स्थान और सितारों) को एक मोनोस्पेस फ़ॉन्ट का उपयोग करने के लिए मजबूर करता है।

इसके अलावा, आप "उबंटू मोनो" को अपने चयन के एक मोनोस्पेस फ़ॉन्ट से बदलना चाहेंगे,


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