org-modeを使用して、.emacsまたはその他の.el構成ファイルを構成できますか?


48

私の.emacs設定ファイルはどんどん大きくなって、私は見出し、小見出しを追加し、非表示にすることができるというか、私はEmacsので行うことができますようにそれらを表示することで、より良い概要と構造を取得したいのですがorg-mode

バッファでorg-modeもアクティブに.emacsできること、見出しを追加して折りたたむことができることに気付きました。しかし、org-mode見出し(つまり、1つ以上のアスタリスクで始まる行)を追加しても、Emacs / AquamacsはドキュメントからElispコードをロードできますか?

これらすべてを1つのファイルに.*org含めることはできますか、それとも1つのファイルを用意してから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
マンコフ14年

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 14年

2
@mankoff書式設定が悪いので申し訳ありませんが、writequit.org / org / settings.htmlの上部にもっと読みやすいバージョンがあります。
リーH

2
読み書きができるEmacsの設定の例はいくつかあります。おそらく、インデックスを開始する時です。たとえば、github.com
grettke /

1
Melpaで入手可能な最新バージョンのorg(9)を使用する場合は、orgファイル内のorg関連のものを設定しないでください。私はこれをやっていますgithub.com/cescoferraro/dotfiles/blob/master/src/emacs.d/…–
CESCO

23

セクションの選択的な表示と見出し間のナビゲーションのみが必要な場合は、組織モードは必要ありません。必要なのは、アウトラインモードだけです。アウトラインモードは、基本的に組織モードのヘッダーレベルとセクションの可視性管理です。実際、Orgモードは元々、Outlineモードに対する著者の拡張機能であり、成長し、成長し、成長しました...今日でも、org-modeはから派生していoutline-modeます。

アウトラインモードは、メジャーモードとマイナーモードの両方として存在します。マイナーモードは、どのメジャーモードでも使用できます。プログラムの構文と互換性のあるヘッダー形式を使用するように構成できます。多くのメジャーモードoutline-regexpでは、ヘッダーの先頭に一致する正規表現に変数を設定することにより、互換性があります。たとえば、これはEmacs Lispモードのデフォルト値です。

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

つまり、セクションヘッダーは、3つ以上のセミコロンと1つのスペースで始まるか、左マージンの開き括弧です。この変数outline-levelには、ヘッダーの深さを決定する関数の名前が含まれています。デフォルト値は、によってマッチした文字列の長さでありoutline-regexp、そしてEmacs Lispのモードに、より大きな深さを割り当てるために、それを上書き(し、;;;###autoload

デフォルトのヘッダー形式が気に入らない場合outline-regexpは、ファイルのローカル変数宣言で変数を設定します。これが私が使用するものです。私のセクションヘッダーはすべて;;;、星の古典的なシーケンスが後に続きます:

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

ファイルをロードするときにアウトラインマイナーモードを自動的にオンにするには、[ローカル変数]セクションに次の行を追加します。これは、Emacs≤23.xの安全でないコードについて警告することに注意してください。

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

アウトラインマイナーモードのコマンドはC-c @、デフォルトではかなり不便なプレフィックスを使用します。私はそれをM-o(フェイスメニューバインディングを使用することはありません)に移動し、別のキーを好むか、組織モードのバインディング(アウトラインモードとはかなり異なる)を複製することができます。


4
2番目にこれ。Orgは素晴らしいですが、このために必要なのはアウトラインモードだけです。そして、outshine-mode、outorg、navi-modeと組み合わせるとさらに良くなります。outshineとoutorgを使用すると、org-babelとそのもつれを別々のファイルに使用して、素晴らしいorg-modeスタイルのコメントを取得する必要はありません。 ここで私は、Python、elispの、シェルコードを動作させると、アウトライン/光っできれいに折るために使用するのelispコードの骨子です。
ブルージェイ

14

Literateプログラミングはそこに最も多くの方法を取ります。org-modeorg-babelを介してサポートします@malabarbaのブログで2つの可能な解決策が説明されています

最も簡単な方法は、org-modeをロードし、そのもつれを解く機能を使用して読み書き可能なEmacs設定をロードすることです。

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

あるいは(組織を完全にロードしないようにするために)、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

アウトラインモードへのもう1つの投票。たとえば、整理.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あり、2つの必要なキーストロークは次のとおりです。

  • C-c @ C-t —トップレベルの構造を表示

    上記は

    ;;; preliminaries:
    ;;; modes:
    ;;; customizations:
    
  • C-c @ C-a —すべてを再度表示

典型的な使用法は、最上位の構造を表示し、関心のある見出しに移動して、すべてを再度表示することです。


1
org-modeのようなディレクティブを使用できます#+STARTUP: overviewか:eg またはshow allor contentsオプション。
博士号

@doctorate:折り畳みの組織モードのサポートもアウトラインモードの上に構築されています。org-modeとは対照的に、elisp #ではコメント記号ではないため、ディレクティブのみを使用することはできません#+STARTUP。(または私はあなたのコメントを誤解しましたか?)
Adobe

私が意味を実装する方法があるSTARTUPディレクティブの内側にはorgstruct-mode、例えばこれは、Rの緩衝液であったが、同じ考え方:emacs.stackexchange.com/a/8065/2443
博士号

3

次のSOの回答では、その実行方法、1つまたは複数のorgファイルを使用したサンプルプロジェクト、Caskを使用する利点とドキュメントへのリンクが表示されます。

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

数か月前にconfigをorgに切り替えましたが、完全に満足しているわけではありません。elispコードを簡単に編集できる便利な組織ファイルを作成するには、組織マニュアルの設定と読み取りが必要です。srcブロックのフォント化を有効にし(デフォルトではオフ->ファイルごとの変数を使用)、srcブロックの編集で他のモードが競合しないことを確認する必要があります(自動入力モード)。Ccを使用したくない(backtick) (org-edit-src-block`)でsrcブロックを編集します。そして、デバッグの邪魔になります。

私のアドバイスは次のとおりです。initファイルを小さなelispピースに分割し、そこからいくつかの絞り込みパッケージを試してhelm-swoop、クイックナビゲーションに使用してから、の使用を検討しorg-modeます。


1

私は最近、正確にそれを行うためにいくつかの時間を投資しました。私は-org-modeで維持される-「use-package」を使用して欠落しているパッケージを自動インストールする構成になりました-githubリポジトリはその種の自動インストール(恥知らずなプラグイン:https : //github.com / pascalfleury / emacs-config

リポジトリのクローンを作成し、〜/ .emacs et voilaに1行追加することで、いくつかのマシン(LinuxおよびMac)を「ブートストラップ」しました。私は好きなようにセットアップしています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.