मैं emacs में मार्कडाउन के एसई स्वाद का उपयोग कैसे कर सकता हूं?


17

मैं अपने एमएसीएस में मार्कडाउन के एसई स्वाद का उपयोग करना चाहूंगा। डिफ़ॉल्ट मार्कडाउन मोड में कुछ विशेषताएं हैं (बैकटिक्स और इंडेंटेशन मार्क कोड, #हेडर बनाता है और >फॉन्ट भी बदलता है) लेकिन मैं यह भी करना चाहूंगा:

  • * इंडेंटेशन सहित एक सूची आइटम बनाने के लिए।
  • [foo](http://example.com)फू के रूप में दिखाने के लिए और http://example.comक्लिक करने पर एक ब्राउज़र खोलें ।

आदर्श रूप में, मैं यह चाहूंगा कि मेरे एमाक्स में इसे मार्कडाउन के रूप में दिखाया जाए। उदाहरण के लिए, अगर मुझे लिखना था:

## Header

* item 1
* item 2

         while true; do echo foo; done

End of list and more code

    while true; do echo bar; done

 See [here](http://example.com) for details

मैं इसे इस तरह से emacs में प्रस्तुत करना चाहूंगा:


हैडर

  • वस्तु 1
  • आइटम 2

    while true; do echo foo; done
    

सूची का अंत और अधिक कोड

while true; do echo bar; done

देखें यहाँ जानकारी के लिए


क्या यह हासिल किया जा सकता है और, यदि हां, तो कैसे?


कोड ब्लॉक किए जाने के बारे में: क्या मार्कडाउन मोड आपके लिए पहले से ही कोड ब्लॉक को उजागर नहीं करता है? तुम वहाँ क्या देख रहे थे?
मालाबार

इसके अलावा, क्या आप इसे WYSIWYG मार्कडाउन संपादक की तरह संपादन योग्य बनाना चाहते हैं? या यह एक अलग बफर में "संकलित" आउटपुट को प्रदर्शित करने के लिए पर्याप्त है? उत्तरार्द्ध बल्कि सरल है, पूर्व एक कोडिंग बीहमोथ है।
मालाबार

@ मलबारबा, हाँ, कोड ठीक है। मैं जो चाहूंगा वह है) ऑटो इंडेंटेड लिस्ट्स ii) यूआरएल हैंडलिंग। या तो के माध्यम से xdg-openया यहां तक ​​कि बस लक्ष्य पता प्रदर्शित जब पर क्लिक किया लेकिन लिंक पाठ जब नहीं: " यहाँ क्लिक करें " Click [here](http://example.com)जब क्लिक करने के लिए बनने के लिए । मेरे पाठ दस्तावेज़ों में URL को मूल रूप से सम्मिलित करने का एक त्वरित तरीका है।
टेराडॉन

ठीक है, फिर इन दोनों को फ़ॉन्ट-लॉक-ऐड-कीवर्ड के साथ प्राप्त किया जा सकता है। मैं कल कुछ लिखने की कोशिश करूँगा, अगर कोई मुझे इसके लिए नहीं धड़कता है।
मालाबार

जवाबों:


19

** EDIT: ** इस लेखन के बाद से, ऐसा लगता है कि सुविधाओं के हिस्से को सीधे मार्कडाउन-मोड में लागू किया गया है। इस टिप्पणी की जाँच करें , और उसमें लिंक।


विन्यास

दो दृष्टिकोण हैं जो आप ले सकते हैं।

  1. आप एक कमांड लिख सकते हैं जो मार्कडाउन कोड (शेल कमांड का उपयोग करके) को संकलित करता है और HTML को बफर में प्रदर्शित करता है।
  2. आप कुछ अनुकूलन एक-la ऑर्ग मोड बफर बनाने के लिए कर सकते हैं देखो गाया markdown की तरह।

मैं यहां बताता हूं कि नंबर को कैसे लागू किया जाए 2. आप सभी नीचे दिए गए कोड को init फाइल में कॉपी कर लें।

फ़ॉन्ट-लॉक नियम जोड़ें

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

(defvar endless/bullet-appearance
  (propertize (if (char-displayable-p ?•) "  •" "  *")
              'face 'markdown-list-face)
  "String to be displayed as the bullet of markdown list items.")

यह वह आदेश है जो वास्तव में नियमों को जोड़ता है। सूचियों के लिए एक और लिंक के लिए एक है।

(require 'rx)
(defvar endless/markdown-link-regexp
    "\\[\\(?1:[^]]+\\)]\\(?:(\\(?2:[^)]+\\))\\|\\[\\(?3:[^]]+\\)]\\)"
  "Regexp matching a markdown link.")

(font-lock-add-keywords
 'markdown-mode
 '(("^ *\\(\\*\\|\\+\\|-\\|\\) "
    1 `(face nil display ,endless/bullet-appearance) prepend)
   (endless/markdown-link-regexp
    1 '(face nil display "") prepend))
 'append)

लिंक को संपादन योग्य बनाएं

क्योंकि हम displayलिंक का हिस्सा छिपाने के लिए संपत्ति का उपयोग कर रहे हैं, हमें फॉन्ट-लॉक को यह बताने की आवश्यकता है कि जब भी आप लिंक के हिस्से को हटाते हैं, तो उस संपत्ति को मिटा देना चाहिए (इस तरह से हम अभी भी इसे संपादित कर सकते हैं)।

(add-hook 'markdown-mode-hook #'endless/markdown-font-lock)

(defun endless/markdown-font-lock ()
  "Configure aggressive font-locking of `markdown-mode'."
  (define-key markdown-mode-map "\C-c\C-l" #'endless/markdown-insert-link)
  (add-to-list (make-local-variable 'font-lock-extra-managed-props) 'display))

हम इसे आसानी से संपादित करने के लिए एक कमांड को भी परिभाषित कर सकते हैं C-c C-l, जैसे कि ऑर्ग-मोड में।

(defun endless/markdown-insert-link ()
  "Insert or edit link at point."
  (interactive)
  (if (or (looking-at endless/markdown-link-regexp)
          (and (ignore-errors (backward-up-list) t)
               (or (looking-at endless/markdown-link-regexp)
                   (and (forward-sexp -1)
                        (looking-at endless/markdown-link-regexp)))))
      (let ((data (endless/ask-for-link
                   (match-string-no-properties 1) 
                   (or (match-string-no-properties 2)
                       (match-string-no-properties 3)))))
        (if (match-string-no-properties 2)
            (replace-match (cdr data) :fixedcase :literal nil 2)
          (replace-match (cdr data) :fixedcase :literal nil 3))
        (replace-match (car data) :fixedcase :literal nil 1))
    (let ((data (endless/ask-for-link)))
      (insert "[" (car data) "](" (cdr data) ")"))))

(defun endless/ask-for-link (&optional name link)
  (cons (read-string "Text of the link: " name)
        (read-string "URL of the link: " link)))

(वैकल्पिक) कुछ चेहरे कॉन्फ़िगर करें

आपके द्वारा अनुरोधित बिंदुओं के लिए यह पर्याप्त होना चाहिए। यदि आप चाहते हैं कि आपका बफ़र SE मार्कडाउन की तरह और भी अधिक दिखे, तो कॉल करें

M-x customize-group RET markdown-faces

और जो आप फिट देखते हैं उसे बदल दें। मैंने कुछ अपने आप को कॉन्फ़िगर किया, और यहाँ मुझे क्या मिला।

(custom-set-faces
 '(markdown-header-face-1 ((t (:inherit markdown-header-face :height 2.0))))
 '(markdown-header-face-2 ((t (:inherit markdown-header-face :height 1.7))))
 '(markdown-header-face-3 ((t (:inherit markdown-header-face :height 1.4))))
 '(markdown-header-face-4 ((t (:inherit markdown-header-face :height 1.1))))
 '(markdown-inline-code-face ((t (:inherit font-lock-constant-face :background "gainsboro"))))
 '(markdown-link-face ((t (:inherit link))))
 '(markdown-pre-face ((t (:inherit font-lock-constant-face :background "gainsboro")))))

परिणाम

यहाँ विन्यास के पहले 2 सेट के बाद आपको क्या मिलेगा:
यहां छवि विवरण दर्ज करें

यहाँ पर आपको चेहरों को कॉन्फ़िगर करने के बाद क्या मिलेगा। यह तर्कपूर्ण है कि क्या यह बेहतर दिखता है, मैं व्यक्तिगत रूप से ऊपर वाले के साथ रहूँगा।
यहां छवि विवरण दर्ज करें


वाह! यह एकदम सही है, धन्यवाद। यह मेरे द्वारा मांगी गई हर चीज का जवाब देता है, लेकिन अतिरिक्त ब्राउनी बिंदुओं के लिए, क्या लिंक को अधिक इंटरैक्टिव बनाने का एक तरीका है? मेरा मतलब है, URL निकालने का एक आसान तरीका। क्या क्लिक करके [foo]और उसके बीच टॉगल करना संभव होगा [foo](http://bar.com)? मैं विवरणों पर बहुत परेशान नहीं हूं, लेकिन यदि वांछित है तो आसानी से URL प्रदर्शित करने का एक तरीका चाहेंगे। फिलहाल, मुझे इसे प्रदर्शित करने के लिए एक कोष्ठक को हटाना होगा। मैं उसके साथ रह सकता हूं लेकिन मैं बेहतर तरीके से दिलचस्पी लूंगा।
टेराडॉन

@terdon Done! ..
मालाबार

मैं इसे Emacs के साथ Edit के साथ संयोजित करने जा रहा हूँ , और फिर मैं Tri-State Area पर अधिकार कर लूंगा!
nispio

@ मालाबार को वहाँ एक त्रुटि प्रतीत होती है। मुझे यहाँ "Unknown rx form ग्रुप-एन '' . Output of - डिडबग-इनिट` मिलता है । कोई विचार?
टेराडो

@terdon यह संभव है समूह-एन केवल 24.4 में परिभाषित किया गया है, मैं जांचने की कोशिश करूंगा। आप group-n X बस के साथ प्रत्येक की जगह की कोशिश कर सकते हैं group। यह अभी भी काम कर सकता है
मालाबार

5

शुरू करने के लिए एक अच्छी जगह होगी markdown-mode.elजिसे यहाँ से डाउनलोड किया जा सकता है

यह मोड org-modeशैली सौंदर्यीकरण की पेशकश नहीं करता है , लेकिन यह सिंटैक्स हाइलाइटिंग और customizeविकल्पों की एक बीवी प्रदान करता है।

इस शैली के सौंदर्यीकरण को प्राप्त करने के लिए, किसी को मार्कडाउन-मोड को लागू करने के लिए एक एक्सटेंशन लिखना होगा।

  • अधिकांश org-mode.el के चेहरे org-face.el में परिभाषित किए गए हैं

  • इसके अतिरिक्त आप यह देखना चाहेंगे कि ऑर्ग-मोड नेत्रहीन टेक्स्ट को अक्षरों के साथ कैसे बदलता है। वह कोड org- संस्थाओं में है । यह वह कोड है जो लेटेक्स \pmको repl से बदलता है ।


धन्यवाद, मैं इस समय मार्कडाउन मोड का उपयोग कर रहा हूं, जैसा कि मैंने अपने उत्तर में उल्लेख किया है। मैं जानना चाहूंगा कि जो सुविधाएँ गायब हैं उन्हें कैसे कार्यान्वित किया जाए और कैसे उन्हें emacs भी प्रदान किया जाए। वैकल्पिक रूप से, मैं यह जानना चाहूंगा कि यदि यह मामला है तो उन्हें प्रदर्शित करना असंभव है।
टेराडॉन

ऐसा करना संभव है, ऑर्ग-मोड उस तरह से वाक्य रचना सौंदर्यीकरण करता है। कोड खोजने के लिए मुझे कुछ क्षण दें। मैंने एक और प्रमुख-मोड के लिए समान कोडिंग की है। मुझे महसूस नहीं हुआ कि आप पहले से ही markdown.el के बारे में जानते थे।
निक्सनगल

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