.Emac'lerimi veya diğer .el yapılandırma dosyamı yapılandırmak için org-mode kullanabilir miyim?


48

Benim .emacsyapılandırma dosyası büyüdükçe alır ve ben başlıkları, alt başlıklar ekleme ve postu edememek ya da ben Emacs ile yapabileceğiniz gibi göstermek daha iyi bir bakış ve yapılandırma almak istiyorum org-mode.

Ben etkinleştirebilirsiniz fark org-modeda .emacstampon ve başlık eklemeye ve bunları daraltmak mümkün olduğunu. Ancak, eğer org-modebaşlıklar eklersem Emacs / Aquamacs Elisp kodunu hala belgeden yükleyebilecek mi (yani bir veya daha fazla yıldız işareti ile başlayan çizgiler)?

Bunların hepsini bir dosyada alabilir miyim, yoksa bir dosyaya sahip olmalı mıyım .*orgve daha sonra Elisp kodunu düzenli olarak başka bir dosyaya aktarabilir miyim?

Yanıtlar:


46

Evet, kesinlikle yapabilirsin, bunu org-babel-load-fileyapmak için kullanabilirsin .

Gözlerinde farklı init.el, şu koyun:

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

(~ / .Emacs.d / settings.org kullanıyorum, ancak bu kişisel tercih). Gelen settings.orgdosyanın içeri elisp sarma, ancak istiyoruz ayarlayabilir:

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

Emacs'ı başlattığınızda, settings.org dosyasının değişip değişmediğini otomatik olarak belirleyecek ve gerekirse, settings.elyüklenecek bir dosyayı üretmek için araştıracaktır.


1
Bunu, temiz orgemacs'de orgmevcut olan yerine, en son elpa'dan yüklemek için nasıl değiştirirsiniz ? packageBaşlatma kodunun çıkarılması settings.orgve içine konulması gerekecek gibi görünüyor init.el?
mankoff

3
@ mankoff Bu doğru, bu benim 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))
Lee H

2
@mankoff Zayıf biçimlendirme için üzgünüm, writequit.org/org/settings.html sayfasının
Lee H

2
Birkaç okuryazar Emacs yapılandırma örneği vardır. Belki bir endeks başlatmak için zamanı. İşte benim için örnek github.com/grettke/home
grettke

1
Melpa'da mevcut olan org'un (9) en son sürümünü kullanmak istiyorsanız, org dosyası içindeki org ile ilgili öğeleri konfigüre etmeyi unutmayın. Bunu yapıyorum github.com/cescoferraro/dotfiles/blob/master/src/emacs.d/…
CESCO

23

İstediğiniz tek şey, başlıklar arasındaki bölümlerin ve gezinmelerin seçici gösterilmesi ise, Org moduna ihtiyacınız yoktur. İhtiyacınız olan tek şey Anahat modu . Anahat modu temel olarak Org modunun başlık seviyesi ve bölüm görünürlük yönetimidir. Aslında, Org modu aslen yazarın Anahat moduna olan uzantılarıydı ve büyüdü, büyüdü ve büyüdü… Bugün bile, ondan org-modetüretildi outline-mode.

Anahat modu hem ana mod hem de küçük mod olarak mevcuttur. Küçük mod, herhangi bir ana modda kullanılabilir. Bunu, program sözdiziminizle uyumlu bir başlık formatı kullanacak şekilde yapılandırabilirsiniz ve birçok büyük mod, outline-regexpdeğişkeni bir başlığın başlangıcına uyan bir regexp olarak ayarlayarak yapar . Örneğin, Emacs Lisp modundaki varsayılan değer:

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

yani bölüm başlıkları, üç veya daha fazla noktalı virgül ve tek bir boşlukla veya sol kenarda bir parantezle başlar. Değişken outline-level, bir başlığın derinliğini belirleyen bir fonksiyonun adını içerir; Varsayılan değer ile eşleşen dize uzunluğudur outline-regexpve Emacs Lisp modu daha büyük bir derinlik atamak bunu bastıran (ve ;;;###autoload.

Varsayılan başlık biçimini beğenmiyorsanız, değişkeni outline-regexpbir dosya yerel değişken bildiriminde ayarlayın . Kullandığım şey bu - bölüm başlıklarımın tümü ;;;klasik yıldız dizisinden oluşuyor :

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

Anahat küçük modunun dosyayı yüklediğinizde otomatik olarak açılmasını istiyorsanız, Yerel Değişkenler bölümüne aşağıdaki satırı ekleyin - bunun Emacs ≤23.x'deki güvenli olmayan kod hakkında sizi uyaracağını unutmayın.

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

Anahat küçük modu için komutlar C-c @, varsayılan olarak oldukça uygunsuz öneki kullanır . Onu M-o(Asla yüz arası ciltleri kullanmıyorum) 'a taşıdım, başka bir anahtar tercih edebilir veya Org modunun (Anahat modundan biraz fazla sapmış olan) ciltlemelerini çoğaltmak için tercih edebilirsiniz.


4
Bundan ikinciyim. Org harika, ama bunun için tek ihtiyacınız olan taslak modu. Ve bunu outshine modu, outorg ve navi modu ile birleştirirseniz daha da iyi olur. Outshine ve outorg ile, güzel org-mode tarzı yorumlar elde etmek için org-babel ve onun aralarındaki karışıklıkları ayrı dosyalar halinde kullanmanıza gerek yok. İşte ben Python, elisp ve kabuk kod çalışması ve anahat / gölgede bırakan güzel bir şekilde katlamak için kullandıkları elisp kod özü buydu.
blujay

14

Okuryazar programlama sizi en çok oraya götürür, org-mode org-babel aracılığıyla destekler . @Malabarba'nın blogunda iki olası çözüm açıklandı :

En basit yol org-modunu yüklemek, ardından okur-yazar olan Emacs konfigürasyonunu yüklemek için dolaşma özelliğini kullanmaktır:

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

Alternatif olarak (tamamen yükleme işlemini önlemek için), Emacs Lisp primitives ile dolaşma işlemi yapılabilir:

(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

Anahat modu için bir oy daha. Örneğin örgütlenme .emacsiçin şu sözdizimini kullanıyorum:

;;; HEADING:

önemli parçalardır ;;;ve:\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)
            ))

İşte bir örnek .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)
)

;; ...

Biri etkinleştirilmeli outline-minor-modeve ardından iki gerekli tuş vuruşu:

  • C-c @ C-t - üst düzey yapı göster

    yukarıdakiler

    ;;; preliminaries:
    ;;; modes:
    ;;; customizations:
    
  • C-c @ C-a - hepsini tekrar göster

Tipik bir kullanım, en üst düzey yapıyı göstermek, ilgilenilen başlığa gitmek ve tekrar göstermektir.


1
biz org modunda gibi yönergelerini kullanabilirsiniz: mesela #+STARTUP: overviewya show allya contentsseçenekleri.
doktora

@doctorate: katlama için org modu desteği de anahat modunun üstüne kuruludur. Sadece direktifleri kullanamayız: çünkü org-modun aksine - elisp'te #bir yorum işareti değildir, bu nedenle emacs'ın yerleşik elisp tercümanına #+STARTUPveya buna benzer bir şeye karıştığında kafası karışır . (ya da yorumunuzu yanlış mı anladım?)
Adobe

STARTUPDirektifi içeride uygulamanın bir yolu var orgstruct-mode, mesela bu bir R arabelleği ama aynı fikirdi: emacs.stackexchange.com/a/8065/2443
doktora

3

Aşağıdaki SO cevabında nasıl yapılacağını göreceksiniz, örnek olarak tek bir org dosyası veya daha fazlasını kullanarak projeler, Cask kullanmanın yararı ve dokümantasyona bağlantılar.

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

Birkaç ay önce konfigürasyonumu org yapmaya çevirdim ve bundan tamamen memnun değilim. Elisp kodunu düzenlemeyi kolaylaştıran kullanışlı bir org dosyasına sahip olmak için org el kitabının bir miktar yapılandırmasını ve okunmasını gerektirir. Birinin src bloğu fontlamasını etkinleştirmesi gerekir (varsayılan olarak kapalı -> dosya başına bir değişken kullanın), diğer modların src bloklarını düzenlemek için çakışmadığını kontrol edin (otomatik doldurma modu), vb. (backtick) (org-edit-src-block`) bir src bloğunu düzenlemek için. Ve hata ayıklama yolunda biraz alır.

Tavsiyem: init dosyanızı küçük elisp parçalarına bölerek başlayın, orada daralan bir paket deneyin, helm-swoophızlı gezinme için kullanın ve ardından kullanmayı düşünün org-mode.


1

Son zamanlarda tam olarak bunu yapmak için bir süre yatırım yaptım. - org-mode ile korunan - eksik paketleri otomatik olarak kurmak için 'use-pack' kullanan - bir konfigürasyonla bitirdim - bu tür otomatik kurulumların geveze bir deposu (utanmaz fiş: https://github.com) / pascalfleury / emacs-config )

Repoyu klonlayarak ve ~ / .emacs et voila'ya tek bir satır ekleyerek birkaç makineyi (Linux ve Mac) önyüklemiş oldum. İstediğim gibi kurulum yapıyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.