क्या मैं अपने .emacs या अन्य .el कॉन्फ़िगरेशन फ़ाइल को बनाने के लिए org-mode का उपयोग कर सकता हूं?


48

मेरी .emacsकॉन्फ़िगरेशन फ़ाइल बड़ी और बड़ी हो जाती है और मैं शीर्षकों, सबहेडिंग को जोड़कर और उन्हें छुपाने या उन्हें दिखाने में सक्षम होने की तरह एक बेहतर अवलोकन और संरचना प्राप्त करना चाहता हूं जैसे मैं Emacs के साथ कर सकता हूं org-mode

मैंने देखा कि मैं बफर org-modeमें भी सक्रिय हो सकता हूं .emacsऔर शीर्षकों को जोड़ना और उन्हें ढहना संभव है। लेकिन अगर मैं org-modeशीर्षक (यानी, एक या अधिक तारांकन के साथ शुरू होने वाली लाइनें) जोड़ दूंगा, तो क्या Emacs / Aquamacs अभी भी दस्तावेज़ से Elisp कोड लोड कर पाएंगे ?

क्या मेरे पास एक फ़ाइल में वह सब होगा या मेरे पास एक .*orgफ़ाइल होगी और फिर नियमित रूप से किसी अन्य फ़ाइल में एलिस्प कोड को निर्यात करना होगा?

जवाबों:


46

हां, आप निश्चित रूप org-babel-load-fileसे ऐसा कर सकते हैं ।

अपने में init.el, निम्नलिखित डालें:

(require 'org)
(org-babel-load-file
 (expand-file-name "settings.org"
                   user-emacs-directory))

(मैं ~ / .emacs.d / settings.org का उपयोग कर रहा हूं लेकिन यह व्यक्तिगत प्राथमिकता है)। में settings.orgफ़ाइल आप इसे व्यवस्था कर सकते हैं लेकिन आप चाहते हैं, में elisp लपेटकर:

* Turn off menu bar
#+BEGIN_SRC emacs-lisp
(menu-bar-mode -1)
#+END_SRC

जब आप Emacs शुरू करते हैं, तो यह स्वचालित रूप से निर्धारित करेगा कि settings.org फ़ाइल बदल गई है, और यदि आवश्यक हो, तो settings.elफ़ाइल को लोड करने के लिए इसे टेंगल करें जो लोड हो जाएगा।


1
आप इसे orgएल्पा से नवीनतम लोड करने के लिए इसे कैसे बदलेंगे, इसके बजाय orgएक स्वच्छ ईमैक्स में उपलब्ध है? ऐसा लगता है कि packageआरंभीकरण कोड को बाहर निकालने settings.orgऔर अंदर डालने की आवश्यकता होगी init.el?
mankoff

3
@ मांकॉफ़ यह सही है, यह मेरा है init.el: (require 'package) (package-initialize) (setq custom-file "~/.emacs.d/custom.el") (when (file-exists-p custom-file) (load custom-file)) (require 'org) (org-babel-load-file (expand-file-name "settings.org" user-emacs-directory))
ली एच

2
@mankoff खराब फॉर्मेटिंग के लिए क्षमा करें, मेरे पास राइटक्वे.ओआरजी /org/settings.html
ली एच

2
साक्षर Emacs config के कुछ से अधिक उदाहरण हैं। शायद यह एक सूचकांक शुरू करने का समय है। यहाँ मेरा उदाहरण है github.com/grettke/home
grettke

1
यदि आप Melpa पर उपलब्ध org (9) के नवीनतम संस्करण का उपयोग करना चाहते हैं, तो ओआरजी फ़ाइल के अंदर ओआरजी से संबंधित सामान को कॉन्फ़िगर नहीं करना याद रखें। मैं यह github.com/cescoferraro/dotfiles/blob/master/src/emacs.d/…
CESCO

23

यदि आप चाहते हैं कि शीर्षकों के बीच अनुभागों और नेविगेशन का चयन करना है, तो आपको ऑर्ग मोड की आवश्यकता नहीं है। बस आपको जरूरत है आउटलाइन मोड की । आउटलाइन मोड मूल रूप से ऑर्ग मोड का हेडर स्तर और अनुभाग दृश्यता प्रबंधन है। वास्तव में, ऑर्ग मोड मूल रूप से आउटलाइन मोड के लिए लेखक का एक्सटेंशन था, और बढ़ता गया, और बढ़ता गया, और बढ़ता गया ... आज भी, org-modeसे प्राप्त होता है outline-mode

आउटलाइन मोड एक प्रमुख मोड और एक मामूली मोड के रूप में दोनों मौजूद है। मामूली मोड का उपयोग किसी भी प्रमुख मोड में किया जा सकता है। आप इसे एक हेडर प्रारूप का उपयोग करने के लिए कॉन्फ़िगर कर सकते हैं जो आपके प्रोग्राम सिंटैक्स के साथ संगत है, और कई प्रमुख मोड ऐसा करते हैं, जो outline-regexpवैरिएबल को रीएग्क्सप पर सेट करके है जो हेडर की शुरुआत से मेल खाता है। उदाहरण के लिए, यह Emacs लिस्प मोड में डिफ़ॉल्ट मान है:

";;;\\(;* [^ \t\n]\\|###autoload\\)\\|("

यानी सेक्शन हेडर तीन या अधिक अर्धविराम और एक सिंगल स्पेस, या एक ओपन कोष्ठक से शुरू होते हैं। चर outline-levelमें हेडर की गहराई निर्धारित करने के लिए एक फ़ंक्शन का नाम होता है; डिफ़ॉल्ट मान स्ट्रिंग से मिलान की लंबाई है outline-regexp, और Emacs लिस्प मोड यह ओवरराइड करता है के लिए एक बड़ी गहराई आवंटित करने के लिए (और ;;;###autoload

यदि आपको डिफ़ॉल्ट हेडर प्रारूप पसंद नहीं है, तो चर outline-regexpको फ़ाइल स्थानीय चर घोषणा में सेट करें । यह वही है जो मैं उपयोग करता हूं - मेरे अनुभाग शीर्षकों में सभी ;;;सितारों के क्लासिक अनुक्रम शामिल हैं:

;;; Local Variables:
;;; outline-regexp: ";;;\\*+\\|\\`"
;;; End:

यदि आप चाहते हैं कि जब आप फ़ाइल को लोड करते हैं, तो आउटलाइन माइनर मोड स्वचालित रूप से चालू हो, स्थानीय वेरिएबल्स अनुभाग में निम्न पंक्ति जोड़ें - ध्यान दें कि यह आपको Emacs afe23.x में असुरक्षित कोड के बारे में चेतावनी देगा।

;;; eval: (outline-minor-mode 1)

मामूली मोड की रूपरेखा के लिए आदेश C-c @डिफ़ॉल्ट रूप से बल्कि असुविधाजनक उपसर्ग का उपयोग करते हैं । मैं इसे स्थानांतरित करता M-oहूं (मैं फेसमेनू बाइंडिंग का उपयोग कभी नहीं करता हूं), आप एक अन्य कुंजी पसंद कर सकते हैं, या ऑर्ग मोड के बाइंडिंग को दोहराने के लिए (जो आउटलाइन मोड से काफी अलग हो गए हैं)।


4
मैं इसके समर्थन में हूं। ऑर्ग बहुत बढ़िया है, लेकिन इसके लिए आपको बस जरूरत है आउटलाइन-मोड की। और यह और भी बेहतर हो जाता है यदि आप इसे आउट-मोड-आउटगो, आउटगो और नेवी-मोड के साथ जोड़ते हैं। आउटरीच और आउटगोर्ग के साथ, आपको अच्छे ऑर्ग-मोड-स्टाइल टिप्पणियों को प्राप्त करने के लिए अलग-अलग फ़ाइलों में ऑर्गन-बैबेल और इसके टेंगलिंग का उपयोग करने की आवश्यकता नहीं है। यहाँ पिस्टन, ऐस्पेल और शेल कोड का काम करने के लिए उपयोग किए जाने वाले क्विस्प कोड का एक सार है और रूपरेखा / रूपरेखा में अच्छी तरह से मोड़ो।
--२२:

14

लिट्रेचर प्रोग्रामिंग आपको वहां सबसे ज्यादा ले जाता है, ऑर्ग-मोड ऑर्गन-बाबेल के जरिए इसका समर्थन करता है । दो संभव समाधान पर समझाया गया है @malabarba के ब्लॉग:

सरल तरीका ओआरजी-मोड को लोड करना है, फिर साक्षर एमएसीएस कॉन्फ़िगरेशन को लोड करने के लिए इसकी असंगत सुविधा का उपयोग करना:

(require 'org)
(org-babel-load-file
 (expand-file-name "emacs-init.org"
                   user-emacs-directory))

वैकल्पिक रूप से (पूरी तरह से लोडिंग ऑर्गन से बचने के लिए), इमैकिंग लिम्फ प्राइमेटिक्स के साथ किया जा सकता है:

(defvar endless/init.org-message-depth 3
  "What depth of init.org headers to message at startup.")

(with-temp-buffer
  (insert-file "~/.emacs.d/init.org")
  (goto-char (point-min))
  (search-forward "\n* init.el")
  (while (not (eobp))
    (forward-line 1)
    (cond
     ;; Report Headers
     ((looking-at
       (format "\\*\\{2,%s\\} +.*$"
               endless/init.org-message-depth))
      (message "%s" (match-string 0)))
     ;; Evaluate Code Blocks
     ((looking-at "^#\\+BEGIN_SRC +emacs-lisp.*$")
      (let ((l (match-end 0)))
        (search-forward "\n#+END_SRC")
        (eval-region l (match-beginning 0))))
     ;; Finish on the next level-1 header
     ((looking-at "^\\* ")
      (goto-char (point-max))))))

6

एक और वोट आउटलाइन-मोड के लिए। उदाहरण के लिए व्यवस्थित करने के लिए .emacsमैं निम्नलिखित सिंटैक्स का उपयोग करता हूं:

;;; HEADING:

महत्वपूर्ण भाग हैं ;;;और:\n

(add-hook 'emacs-lisp-mode-hook 
          (lambda ()
            (make-local-variable 'outline-regexp)
            (setq outline-regexp "^;;; ")
            (make-local-variable 'outline-heading-end-regexp)
            (setq outline-heading-end-regexp ":\n")
            (outline-minor-mode 1)
            ))

यहाँ एक नमूना है .emacs:

;;; preliminaries:
;; load-path:
;; This little monster adds all non-dot dirs to Your load path recursively
(let* ((my-lisp-dir "~/.emacs.d/site-lisp/")
       (default-directory my-lisp-dir)
       (orig-load-path load-path))
  (setq load-path (cons my-lisp-dir nil))
  (normal-top-level-add-subdirs-to-load-path)
  (nconc load-path orig-load-path))

;; ...

;;; modes:

;; python-mode:
(setq py-install-directory "~/.emacs.d/site-lisp/python-mode")
(add-to-list 'load-path py-install-directory)
(require 'python-mode)

;; ...

;;; customizations:
(custom-set-variables
 '(blink-cursor-mode nil)
)

;; ...

एक को सक्षम करना चाहिए outline-minor-modeऔर फिर दो आवश्यक स्ट्रोक होने चाहिए:

  • C-c @ C-t - शीर्ष स्तर की संरचना दिखाएं

    ऊपर बन जाता है

    ;;; preliminaries:
    ;;; modes:
    ;;; customizations:
    
  • C-c @ C-a - फिर से दिखाओ

एक विशिष्ट उपयोग शीर्ष स्तर की संरचना को दिखाना, रुचि के शीर्ष पर जाना और फिर से दिखाना है।


1
उदाहरण के लिए: हम ऑर्ग मोड में तरह निर्देशों का उपयोग कर सकते #+STARTUP: overviewया show allया contentsविकल्प।
डॉक्टरेट

@doctorate: तह के लिए ऑर्ग-मोड समर्थन भी आउटलाइन-मोड के शीर्ष पर बनाया गया है। हम सिर्फ निर्देशों का उपयोग नहीं कर सकते हैं: क्योंकि ऑर्ग-मोड के विपरीत - एलीश #में कोई टिप्पणी नहीं है, इसलिए एमएसीएस का अंतर्निहित एलीप्टर दुभाषिया भ्रमित हो जाएगा जब यह #+STARTUPया इस तरह से कुछ मारा । (या मैंने आपको गलत समझा है?)
Adobe

मेरा मतलब है कि STARTUPअंदर निर्देश को लागू करने का एक तरीका है orgstruct-mode, उदाहरण के लिए यह एक आर बफर था लेकिन एक ही विचार: emacs.stackexchange.com/a/8065/2443
डॉक्टरेट

3

निम्नलिखित एसओ उत्तर पर आप देखेंगे कि यह कैसे करना है, एक सिंगल ओआरजी फ़ाइल या कई का उपयोग करके प्रोजेक्ट्स, उदाहरण के लिए कास्क और प्रलेखन के लिंक का उपयोग करने का क्या लाभ है।

https://stackoverflow.com/questions/25430029/whats-the-best-way-to-package-my-emacs-installation-packages-and-config-so-tha/25430745#25430745

मैंने कुछ महीने पहले अपने कॉन्फिग को ओआरजी में बदल दिया, और मैं इससे पूरी तरह संतुष्ट नहीं हूं। इसके लिए एक उपयोगी ओआरजी फाइल रखने के लिए ओआरजी मैनुअल के कुछ कॉन्फिग और रीडिंग की आवश्यकता होती है जो कि क्विस्प कोड को संपादित करना आसान बनाता है। किसी को src ब्लॉक को सक्रिय करने में सक्षम होना चाहिए (डिफ़ॉल्ट रूप से बंद - प्रति फ़ाइल चर का उपयोग करें), जांचें कि अन्य मोड src ब्लॉक (ऑटो-फिल मोड) को संपादित करने के लिए संघर्ष नहीं करते हैं, आदि एक Cc का उपयोग नहीं करना चाहता है (backtick) (org-edit-src-block`) एक src ब्लॉक को संपादित करने के लिए। और यह डिबग के रास्ते में थोड़ा बढ़ जाता है।

मेरी सलाह होगी: अपनी इनिट फ़ाइल को छोटे छोटे टुकड़ों में तोड़कर शुरू करें, वहां कुछ संकुचन पैकेज की कोशिश करें helm-swoop, त्वरित नेविगेशन के लिए उपयोग करें , और फिर उपयोग करने पर विचार करें org-mode


1

मैंने हाल ही में ऐसा करने के लिए कुछ समय का निवेश किया है। मैंने एक कॉन्फ़िगरेशन के साथ समाप्त कर दिया है - जो ओआरजी-मोड के साथ बनाए रखा है - ऑटो-इंस्टॉल लापता पैकेज के लिए 'उपयोग-पैकेज' का उपयोग करता है - एक जीथुब रेपो है जो ऑटो-इंस्टॉल (बेशर्म प्लग: https://github.com) की तरह है / पास्कलफ्यूरी / एमएसीएस-विन्यास )

मैंने कुछ मशीनों (लिनक्स और मैक) को रेपो क्लोन करके और ~ / .emacs et voila में एक ही लाइन जोड़कर 'बूटस्ट्रैप्ड' किया है। मुझे पसंद है मैं सेटअप कर रहा हूं।

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