org-mode를 사용하여 .emacs 또는 기타 .el 구성 파일을 구성 할 수 있습니까?


48

.emacs구성 파일은 커지고 얻고 난 제목, 부제목을 추가하고 숨기거나 내가 이맥스로 할 수처럼 표시 할 수있는 방법으로 좀 더 개요와 구조를 좀하고 싶습니다 org-mode.

버퍼 org-mode에서도 활성화 .emacs할 수 있으며 제목을 추가하고 축소 할 수 있음을 알았 습니다. 그러나 org-mode제목 (예 : 하나 이상의 별표로 시작하는 줄)을 추가해도 Emacs / Aquamacs는 여전히 문서에서 Elisp 코드를로드 할 수 있습니까?

하나의 파일로 모든 것을 가질 수 있습니까? 아니면 하나의 파일을 가지고 .*org정기적으로 Elisp 코드를 다른 파일로 내 보내야합니까?

답변:


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
깔끔한 emacs에서 사용할 수있는 것이 org아니라 elpa 에서 최신 버전을로드하도록 어떻게 변경 org하시겠습니까? package초기화 코드를 꺼내서 settings.org넣어야 할 것 같습니다 init.el.
mankoff

3
맞습니다 @mankoff, 이것은 내 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))
리 H

2
@mankoff 형식이 잘못되어 죄송합니다. writequit.org/org/settings.html 상단 근처에 더 읽기 쉬운 버전이 있습니다
Lee H

2
읽고 쓸 수있는 Emacs 설정에는 몇 가지 이상의 예가 있습니다. 아마도 인덱스를 시작할 때입니다. 예를 들면 다음과 같습니다. github.com/grettke/home
grettke

1
Melpa에서 사용 가능한 최신 버전의 조직 (9)을 사용하려면 조직 파일 내에 조직 관련 항목을 구성하지 마십시오. 이 github.com/cescoferraro/dotfiles/blob/master/src/emacs.d/…를하고 있습니다
CESCO

23

원하는 부분 만 선택하고 제목 사이를 탐색하면 조직 모드가 필요하지 않습니다. 필요한 것은 아웃 라인 모드 입니다. 아웃 라인 모드는 기본적으로 조직 모드의 헤더 레벨 및 섹션 가시성 관리입니다. 사실, 조직 모드는 원래 모드 개요하는 저자의 확장, 그리고 성장하고, 성장하고, ... 심지어 오늘날, 성장 org-mode에서 파생됩니다 outline-mode.

아웃 라인 모드는 주 모드와 부 모드로 존재합니다. 부 모드는 모든 주 모드에서 사용할 수 있습니다. 프로그램 구문과 호환되는 헤더 형식을 사용하도록 구성 할 수 있으며 헤더 outline-regexp의 시작과 일치하는 regexp로 변수를 설정하여 많은 주요 모드에서 사용할 수 있습니다. 예를 들어, 이것은 Emacs Lisp 모드의 기본값입니다.

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

즉, 섹션 헤더는 세 개 이상의 세미콜론과 단일 공백으로 시작하거나 왼쪽 여백에 여는 괄호로 시작합니다. 변수 outline-level에는 헤더의 깊이를 결정하는 함수 이름이 포함됩니다. 디폴트 값은 일치 문자열의 길이 outline-regexp, 그리고 이맥스 리스프 모드에 더 큰 깊이를 할당을 무시 (하고 ;;;###autoload.

기본 헤더 형식이 마음에 들지 않으면 파일 로컬 변수 선언outline-regexp 에서 변수 를 설정하십시오 . 이것은 내가 사용하는 것입니다-섹션 헤더는 모두 고전적인 별 시퀀스 로 구성됩니다 .;;;

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

파일을로드 할 때 아웃 라인 마이너 모드가 자동으로 켜지도록하려면 로컬 변수 섹션에 다음 줄을 추가하십시오. 그러면 Emacs ≤23.x의 안전하지 않은 코드에 대해 경고합니다.

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

개요 보조 모드 명령은 C-c @기본적으로 다소 불편한 접두사를 사용합니다 . 나는 M-o(페이스 메뉴 바인딩을 사용하지 않음)으로 이동 하거나 다른 키를 선호하거나 조직 모드의 바인딩을 복제 할 수 있습니다 (개요 모드에서 약간 벗어난).


4
나는 이것을 두 번째로한다. 조직은 훌륭하지만이를 위해서는 개요 모드 만 있으면됩니다. outshine-mode, outorg 및 navi-mode와 결합하면 더 좋아집니다. outshine과 outorg를 사용하면 org-babel과 그 엉킴을 별도의 파일로 사용하여 멋진 org-mode 스타일의 주석을 얻을 필요가 없습니다. 다음 은 파이썬, elisp 및 셸 코드를 작동시키고 개요 / 개요에서 멋지게 접는 데 사용하는 elisp 코드의 요지입니다.
blujay

14

Literate Programming 은 여러분에게 가장 좋은 방법을 제공합니다. org-modeorg-babel을 통해 지원합니다 . @malabarba 의 블로그 에는 두 가지 가능한 솔루션 이 설명되어 있습니다 .

가장 간단한 방법은 org-mode를로드 한 다음 언 탱글 링 기능을 사용하여 리터럴 Emacs 구성을로드하는 것입니다.

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

또는 (org를 완전히로드하지 않기 위해) Emacs Lisp 프리미티브를 사용하여 언 탱글 링을 수행 할 수 있습니다.

(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 : 폴딩에 대한 org-mode 지원 또한 outline-mode 위에 구축되었습니다. 우리는 지시어 만 사용할 수는 없습니다. org-mode와 달리 elisp #는 주석 부호가 아니기 때문에 emacs의 내장 elisp 인터프리터가 #+STARTUP이와 같은 것을 칠 때 혼란 스러울 것 입니다. (또는 의견을 잘못 이해 했습니까?)
Adobe

나는 구현하는 방법이 의미하는 STARTUP내부 지침을 orgstruct-mode이이 R 버퍼하지만 같은 생각이었다 예를 들어이 : emacs.stackexchange.com/a/8065/2443이
박사

3

다음 SO 답변에서 수행 방법, 단일 조직 파일 하나 이상을 사용하는 프로젝트 예, Cask 사용의 이점 및 문서 링크를 볼 수 있습니다.

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

몇 달 전에 설정을 조직으로 변경했으며 완전히 만족하지 못했습니다. elisp 코드를 쉽게 편집 할 수있는 유용한 org 파일을 가지려면 org 매뉴얼을 약간 구성하고 읽어야합니다. 하나는 src 블록 fontizing을 활성화해야하고 (기본적으로 꺼져 있습니다-> 파일 당 변수 사용) 다른 모드가 src 블록을 편집하기 위해 충돌하지 않는지 확인하십시오 (자동 채우기 모드). (backtick) (org-edit-src-block`)를 사용하여 src 블록을 편집하십시오. 그리고 디버그에 조금 방해가됩니다.

내 충고는 : init 파일을 작은 조각으로 나누고, 좁은 패키지를 사용 해보고, helm-swoop빠른 탐색에 사용하고을 사용 하는 것을 고려하십시오 org-mode.


1

나는 최근에 정확히 그 일을하기 위해 시간을 투자했습니다. 조직 모드로 유지 - - 나는 구성과 만난다 사용 '사용-패키지'에 누락 된 패키지를 자동 설치 - github의의 환매 특약은 그 자동차의 설치 작업 종류 (뻔뻔한 플러그 : https://github.com / pascalfleury / emacs-config )

리포지토리를 복제하고 ~ / .emacs et voila에 단일 행을 추가하여 몇 대의 컴퓨터 (Linux 및 Mac)를 '부트 스트래핑'했습니다. 원하는대로 설정했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.