ऑर्गन मोड में जल्दी से सोर्स ब्लॉक डालें


61

org-mode निम्नलिखित सिंटैक्स के ब्लॉक के साथ स्रोत कोड रेंडर करने की क्षमता है:

#+NAME: <name>
#+BEGIN_SRC <language> <switches> <header arguments>
    <body>
#+END_SRC

क्या इन ब्लॉकों को जल्दी से सम्मिलित करने के लिए कोई मौजूदा कमांड है org-mode, या मुझे किसी बाहरी उपकरण का उपयोग करने की आवश्यकता है yasnippet?


7
कुछ तरीके हैं: (1) बिल्ट-इन आसान टेम्प्लेट्स (2) hydraपैकेज का उपयोग करना : ब्लॉगपोस्ट (3) आसान ऑर्ग सोर्स ब्लॉक सम्मिलन के लिए एक और स्निपेट
कौशल मोदी

यदि आप Emacs से पेस्ट कर रहे हैं, तो Emacs आपके लिए प्रमुख-मोड और Backlink भर सकते हैं: github.com/unhammer/org-rich-yank#org-rich-paste
unhammer

जवाबों:


89

टिप्पणियों में @kaushalmodi के रूप में आप (org) Easy Templatesविभिन्न प्रकार के ब्लॉकों के सम्मिलन को गति देने के लिए उपयोग कर सकते हैं ।

एक सामान्य चयनकर्ता के< द्वारा सामान्य प्रक्रिया को सम्मिलित किया जाता है , अन्यथा खाली लाइन और प्रेस पर एक अक्षर (आमतौर पर एक अक्षर) ।TAB

जेनेरिक स्रोत ब्लॉक टेम्पलेट के लिए टेम्पलेट चयनकर्ता है s, इसलिए <sइसके बाद टाइपिंग TABआपको यह देगा:

#+BEGIN_SRC 

#+END_SRC

प्वाइंट को पहली पंक्ति के अंत में स्थित किया जाएगा।

यह एक अच्छा पहला सन्निकटन है जिसे आप प्राप्त करना चाहते हैं, लेकिन यह Emacs है, तो चलिए इसे बेहतर बनाते हैं!

आप एक चर नामक एक या अधिक प्रविष्टियों को जोड़कर कस्टम टेम्प्लेट को परिभाषित कर सकते हैं org-structure-template-alist। उदाहरण के लिए:

(add-to-list 'org-structure-template-alist '("n" "#+NAME: ?"))

यह कोड टेम्प्लेट चयनकर्ता के रूप में उपयोग करके एक #+NAME:टेम्प्लेट जोड़ता है । के विस्तार के बाद इस टेम्पलेट बिंदु के स्थान पर तैनात किया जाएगा ।org-structure-template-alistn?

यदि आप हमेशा अपने कोड ब्लॉक का नाम देते हैं, तो आप एक विस्तारित संस्करण के साथ स्रोत ब्लॉक टेम्पलेट के मूल संस्करण को भी अधिलेखित कर सकते हैं जिसमें #+NAME:लाइन शामिल है :

(add-to-list 'org-structure-template-alist
             '("s" "#+NAME: ?\n#+BEGIN_SRC \n\n#+END_SRC"))

<sइसके बाद टाइपिंग TABआपको देनी होगी:

#+NAME: 
#+BEGIN_SRC 

#+END_SRC

यह केवल एक ऊपरी हिस्सा है; आप भाषा-विशिष्ट कोड ब्लॉक, विशिष्ट हेडर तर्क के साथ कोड ब्लॉक आदि के लिए अतिरिक्त टेम्पलेट्स को परिभाषित करने के लिए एक समान दृष्टिकोण का उपयोग कर सकते हैं।


1
नोट: आसान टेम्पलेट को ऑर्ग-मोड HEAD में असंगत तरीके से बदल दिया गया है। मैं yasnippet का उपयोग करने की सलाह देता हूं।
लूर्दन

@lurdan क्या अभी भी यही है? मैं सिर्फ <s TABमैक ओएस एक्स पर 25 Emacs पर कोशिश की और यह काम करने के लिए लग रहा था।
रुडोल्फ ओलह

1
@RudolfOlah हां, कम से कम org-mode (git) HEAD के लिए। यहां तक ​​कि emacs26 के साथ, बंडल किए गए ऑर्ग-मोड में अभी भी org-try-structure-completionफ़ंक्शन (ईजी-टेम्प्लेट के लिए) है। लेकिन वैसे भी, यह भविष्य में स्ट्रक्चर-टेम्प्लेट द्वारा प्रतिस्थापित किया जाएगा। सीएफ code.orgmode.org/bzg/org-mode/commit/...
lurdan

14

इसे खुद क्यों नहीं लिखते?

(defun org-insert-source-block (name language switches header)
  "Asks name, language, switches, header.
Inserts org-mode source code snippet"
  (interactive "sname? 
slanguage? 
sswitches? 
sheader? ")
  (insert 
   (if (string= name "")
       ""
     (concat "#+NAME: " name) )
   (format "
#+BEGIN_SRC %s %s %s

#+END_SRC" language switches header
)
   )
  (forward-line -1)
  (goto-char (line-end-position))
  )

6

मेरे बॉक्स में 99% समय मैं स्रोत ब्लॉक बना रहा हूं और 1% समय मैं बाकी सब कुछ कर रहा हूं। 1% के लिए आसान टेम्पलेट सही हैं और 99% के लिए मुझे एक YaSnippet मिला है।

  • यह एक अनूठा NAMEप्रयोग org-idकरता है, लेकिन यह हमारे लिए कुछ भी मायने नहीं रखता है) और फिर यह मुझसे पूछता है कि मैं किस भाषा का उपयोग करना चाहता हूं, इसे उन लोगों तक सीमित करना है जिन्हें मैंने ऑर्ग-मोड लिटरेट प्रोग्रामिंग (बैबेल) को बताया था
  • उन भाषा प्रकारों की एक सूची प्रस्तुत करता है जो आपने Org-Mode को बताया था जिसका उपयोग आप करना चाहते हैं, और हर प्रकार को टाइप करने के बजाय (हालांकि मैं उन सभी का उपयोग नहीं करता) चुनने के बजाय
  • यदि भाषा को एक फ़ाइल उत्पन्न करनी है तो वह आउटपुट फ़ाइल नाम के लिए पूछती है

यहाँ अंत में मेरे समर्थन कोड के साथ YaSnippet है।

# -*- mode: snippet -*-
# key: sc
# name: Source Block
# group: HELP
# contributor: gcr@wisdomandwonder.com
# expand-env: ((yas-indent-line 'fixed))
# --
#+NAME: ${1:`(help/org-id-new)`}
#+BEGIN_SRC ${2:$$(let ((langs (sort (-map (lambda (x) (symbol-name (car x))) (if (-contains? org-babel-load-languages '(js . t)) (-snoc org-babel-load-languages '(javascript . t)) org-babel-do-load-languages)) 'string<))) (yas-choose-value (if (-contains? langs "shell") (-snoc langs "sh") langs)))}${2:$(when (-contains? '("ditaa" "dot" "plantuml") yas-text) (concat " :file \\"./image/" (yas-field-value 1) ".png\\""))} $3
$0
#+END_SRC

इसके लिए डैश और ओआरजी-मोड लोड करना होगा।

(require 'org-id)
(setq org-id-link-to-org-use-id 'nil)
(setq org-id-prefix (concat "org_" (user-real-login-name) "_" (format-time-string "%Y-%m-%d") "_" (system-name)))
(setq org-id-method 'uuid)
(defun help/org-id-new ()
  "Re-purposing `org-id' hit a snag when colons were forbidden in Source-Block
  names. Adding support for a user-defined Org-Id separator would have fixed
  this but with no benefit to Org-Id. So this function removes the colon
  instead.
 "
  (interactive)
  (let* ((gend (org-id-new))
         (newid (replace-regexp-in-string ":" "_" gend)))
    newid))

यहाँ आप इस आईडी समारोह का एक उदाहरण हो सकता है:

C-u M-:
(insert (help/org-id-new))

का परिणाम

org_gcr_2017-08-06_mara_DD608C9A-33B0-4A8D-9123-298746BE973Anil

2
;;; package --- Summary
;;; Commentary:
;;; Code:
(defvar org-sai-src-default "C++"
 "This is the list used to store the default label for source code section.")

(defun org-insert-src-block ()
  "Insert the source code section in `org-mode'."
  (interactive)
  (let* ((src-code-types
          '("emacs-lisp" "python" "C" "sh" "java" "js" "clojure" "C++" "css"
            "calc" "asymptote" "dot" "gnuplot" "ledger" "lilypond" "mscgen"
            "octave" "oz" "plantuml" "R" "sass" "screen" "sql" "awk" "ditaa"
            "haskell" "latex" "lisp" "matlab" "ocaml" "org" "perl" "ruby"
            "scheme" "sqlite"))
         (src-prompt-str
          (concat "Source code type (default "
                  org-sai-src-default
                  "): "))
         (temp-src-code-types 
          (cons org-sai-src-default src-code-types))
         (src-type-str
          (completing-read src-prompt-str temp-src-code-types
                           nil nil nil nil org-sai-src-default)))
    (setq org-sai-src-default src-type-str))
    (insert (format "#+BEGIN_SRC %s\n" src-type-str))
    (newline)
    (org-indent-line)
    (insert "#+END_SRC\n")
    (forward-line -2))))

(add-hook 'org-mode-hook
          (lambda ()
            ;; keybinding for inserting code blocks
            (local-set-key (kbd "C-c s") 'org-insert-src-block)))

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