क्या ऑर्गेज्म-स्ट्रक्चर-टेम्प्लेट-एलिस्ट में # + BEGIN_ # + END_ के अलावा अन्य टेम्प्लेट जोड़ना संभव है?


9

मैंने देखा है कि ऑर्ग-स्ट्रक्चर-टेम्प्लेट-एलीस्ट बदल गया है (मैं ऑर्ग-मोड संस्करण 9.2 का उपयोग कर रहा हूं) स्वचालित रूप से विस्तार करने के लिए #+BEGIN_<some block tag> #+END_<some block tag>। मुझे आश्चर्य है कि क्या विभिन्न प्रकार के टेम्पलेट जोड़ना संभव है। उदाहरण के लिए एक :PROPERTIES:<some properties>:END:टेम्पलेट।

क्या यह संभव है या क्या मुझे यसनीपेट्स जैसे किसी अन्य पैकेज की ओर मुड़ना चाहिए?

जवाबों:


9

अपडेट करें:

ध्यान नहीं दिया गया कि ऑर्ग मोड 9.2 ने टेम्पलेट विस्तार के तंत्र को बदल दिया है, जहां org-structure-template-alistकेवल द्वारा परिभाषित ब्लॉकों के लिए है "#+BEGIN_"और "#+END_"। और जैसे प्रवेश ("p" ":PROPERTIES:?:END:")अब स्वीकार नहीं है।

जैसा कि उपरोक्त लिंक में उल्लेख किया गया है, अन्य "जटिल" टेम्पलेट को फ़ंक्शन द्वारा परिभाषित किया जा सकता है tempo-define-template, और ऑर्ग-टेम्पो को लोड किया जाना चाहिए ( (require 'org-tempo))। वास्तव में प्रविष्टियों org-structure-template-alist को इसके org-tempo-tagsमाध्यम से रूपांतरित किया जाता tempo-define-templateहै org-tempo, और इसके लिए org-tempo-tagsचूक:

(("<i" . tempo-template-org-index)
 ("<A" . tempo-template-org-ascii)
 ("<H" . tempo-template-org-html)
 ("<L" . tempo-template-org-latex)
 ("<v" . tempo-template-org-verse)
 ("<s" . tempo-template-org-src)
 ("<q" . tempo-template-org-quote)
 ("<l" . tempo-template-org-export-latex)
 ("<h" . tempo-template-org-export-html)
 ("<E" . tempo-template-org-export)
 ("<e" . tempo-template-org-example)
 ("<C" . tempo-template-org-comment)
 ("<c" . tempo-template-org-center)
 ("<a" . tempo-template-org-export-ascii)
 ("<I" . tempo-template-org-include))

अपने मामले के लिए, आप एक टेम्पलेट को परिभाषित कर सकते हैं:

(tempo-define-template "my-property"
               '(":PROPERTIES:" p ":END:" >)
               "<p"
               "Insert a property tempate")

नीचे उत्तर 9.2 से पहले केवल ऑर्ग मोड संस्करण के लिए काम करता है

हां, आप इसमें इस तरह से प्रविष्टि जोड़ सकते हैं:

(add-to-list 'org-structure-template-alist '("p" ":PROPERTIES:?:END:"))

फिर ओआरजी फ़ाइल में, आप टाइप करते हैं <pऔर TAB, यह संपत्ति में विस्तार करेगा और बिंदु की स्थिति पर छोड़ देगा ?

और आप टाइप करके वेरिएबल के डॉक्यूमेंटेशन में अधिक जानकारी पा सकते हैं C-h v org-structure-template-alist RET


बहुत उपयोगी जवाब, धन्यवाद। Btw, एक टाइपो >पर प्रतीक है tempo-define-template? यदि नहीं .... तो परिभाषा में इसकी भूमिका क्या है?
डोक्स

1
खुशी है कि यह मदद करता है :) नहीं लिखने में कोई त्रुटि है, इसका मतलब लाइन इंडेंट किया जाएगा, tempo-define-templateबिल्ट-इन defun है, को देखने के docstring जानकारी के लिए।
व्हाटसॉल्ड

2

जिस आवृत्ति पर वे ऑर्ग-मोड के अनुकूलन में असंगत परिवर्तन पेश करते हैं वह वास्तव में एक अफ़सोस की बात है।

निम्नलिखित कोड आपको 9.2 9.2 संस्करण से पहले ओआरजी-मोड के पुराने संरचना टेम्पलेट देता है। फ़ंक्शन org-complete-expand-structure-template9.1 संस्करण से एक शुद्ध प्रतिलिपि है और 9.1 के org-try-structure-completionएक से थोड़ा संशोधित संस्करण है। (मैंने वहां एक टाइप-चेक जोड़ा।)

उस कोड को इंस्टॉल करने के बाद आप बस
(add-to-list 'org-structure-template-alist '("p" ":PROPERTIES:?:END:"))
फिर से अपने पुराने टेम्पलेट का उपयोग कर सकते हैं ।

(defvar org-structure-template-alist)

(defun org+-avoid-old-structure-templates (fun &rest args)
  "Call FUN with ARGS with modified `org-structure-template-alist'.
Use a copy of `org-structure-template-alist' with all
old structure templates removed."
  (let ((org-structure-template-alist
     (cl-remove-if
      (lambda (template)
        (null (stringp (cdr template))))
      org-structure-template-alist)))
    (apply fun args)))

(eval-after-load "org"
  '(when (version<= "9.2" (org-version))
     (defun org-try-structure-completion ()
       "Try to complete a structure template before point.
This looks for strings like \"<e\" on an otherwise empty line and
expands them."
       (let ((l (buffer-substring (point-at-bol) (point)))
         a)
     (when (and (looking-at "[ \t]*$")
            (string-match "^[ \t]*<\\([a-zA-Z]+\\)$" l)
            (setq a (assoc (match-string 1 l) org-structure-template-alist))
            (null (stringp (cdr a))))
       (org-complete-expand-structure-template (+ -1 (point-at-bol)
                              (match-beginning 1)) a)
       t)))

     (defun org-complete-expand-structure-template (start cell)
       "Expand a structure template."
       (let ((rpl (nth 1 cell))
         (ind ""))
     (delete-region start (point))
     (when (string-match "\\`[ \t]*#\\+" rpl)
       (cond
        ((bolp))
        ((not (string-match "\\S-" (buffer-substring (point-at-bol) (point))))
         (setq ind (buffer-substring (point-at-bol) (point))))
        (t (newline))))
     (setq start (point))
     (when (string-match "%file" rpl)
       (setq rpl (replace-match
              (concat
               "\""
               (save-match-data
             (abbreviate-file-name (read-file-name "Include file: ")))
               "\"")
              t t rpl)))
     (setq rpl (mapconcat 'identity (split-string rpl "\n")
                  (concat "\n" ind)))
     (insert rpl)
     (when (re-search-backward "\\?" start t) (delete-char 1))))

     (advice-add 'org-tempo-add-templates :around #'org+-avoid-old-structure-templates)

     (add-hook 'org-tab-after-check-for-cycling-hook #'org-try-structure-completion)

     (require 'org-tempo)
     ))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.