Emacsの設定(その2)設定ファイル(init.el)をorg-modeで管理する

自分のinit.elを見てると嫌になってくる.なんとかしようと弄り回すが,結局,訳わからんコードが山のように残ったまま.これをなんとかしようと,以前から気になっていたorg-modeでinit.elを管理するという方法を試してみた.まず,参考にしたサイトを最初にまとめておくので,そちらを見たほうが良いかもしれない.

参考サイト

Preludeを使いながら,init.orgから個人用のinit.elを自動作成させてEmacsを設定する方法

基本方針

  • 個人用の設定内容は,~/.emacs.d/personal/init.orgに書き込む.
  • 起動時にEmacsはinit.orgを解釈できないので,init.elにはそれを解釈するように書き込む.
  • 具体的には,init.elで,(require ‘org)した後にorg-babel-load-fileでinit.orgを読み込む.
  • しかし,Preludeを導入しているので,そのまま~/.emacs.dにinit.elを書き込むわけにはいかず,少し工夫する.

Preludeの導入

前回のポスト(Emacsの設定(その1)Preludeの導入)を参考 

emac-init.elの作成

  • ~/.emacs.d/personal/emacs-init.elというファイルを作成し,下記のように書き込む
(require 'org)
(defvar my-config-dir (concat user-emacs-directory "personal/"))
(org-babel-load-file
 (expand-file-name "init.org" my-config-dir))
  • 工夫と言っても, init.elの名前のままではinit.orgからinit.elが生成されるときに衝突してしまう ので,違う名前(emacs-init.el)にしていることと,init.orgを~/.emacs.d/personal/に置くようにしているだけ.
  • これでEmacsを起動すると,init.org内のcode blockだけを抜き出したinit.elが同じdirectory (personal)に作成される.

init.orgの作成

  • これでいよいよ肝心のinit.orgの作成を行う
  • org-modeについては,今更説明不要であろう.とにかくすごいやつ.超高機能アウトラインメジャーモード.文書作成,このブログ作成など殆どのことをこれでやっている.
  • 具体的な内容は次回以降に記述予定だが,code blockの挿入は特筆すべき者であり,先に書いておく..

Code blockの挿入

  • 俺、ちゃんと全部管理してます(org-modeでinit.elを管理する)で指摘されているとおり,とにかく便利.以下はほとんどそのままコピペしたような記述である.

  • org-modeで以下のようにする.(後述する設定が必要)

    <l ここで<TAB>すると...)
    以下のように展開される
    #+begin_src emacs-lisp
    
    #+end_src
    
  • 2019年1月14日追加

上記の「TABで展開」に関して,Disqusで,mickaushyさんから「<lではなくて<sではないのか」とのご指摘をいただいた.全くそのとおりで,(後述する設定が必要)と自分で書いておきながら,その設定を書き忘れていた.mickaushyさんが指摘されている通りの設定をしている.

-   参考:<http://pages.sachachua.com/.emacs.d/Sacha.html#org74bcbb3>

```lisp
#+begin_src emacs-lisp
(setq org-structure-template-alist
      '(("s" "#+begin_src ?\n\n#+end_src" "<src lang=\"?\">\n\n</src>")
        ("e" "#+begin_example\n?\n#+end_example" "<example>\n?\n</example>")
        ("q" "#+begin_quote\n?\n#+end_quote" "<quote>\n?\n</quote>")
        ("v" "#+BEGIN_VERSE\n?\n#+END_VERSE" "<verse>\n?\n</verse>")
        ("c" "#+BEGIN_COMMENT\n?\n#+END_COMMENT")
        ("p" "#+BEGIN_PRACTICE\n?\n#+END_PRACTICE")
        ("l" "#+begin_src emacs-lisp\n?\n#+end_src" "<src lang=\"emacs-lisp\">\n?\n</src>")
        ;; ("l" "#+begin_src lisp\n?\n#+end_src" "<src lang=\"lisp\">\n?\n</src>")
        ("L" "#+latex: " "<literal style=\"latex\">?</literal>")
        ("h" "#+begin_html\n?\n#+end_html" "<literal style=\"html\">\n?\n</literal>")
        ("H" "#+html: " "<literal style=\"html\">?</literal>")
        ("a" "#+begin_ascii\n?\n#+end_ascii")
        ("A" "#+ascii: ")
        ("i" "#+index: ?" "#+index: ?")
        ("I" "#+include %file ?" "<include file=%file markup=\"?\">")))
#+end_src
```

この設定を,init.orgに書き込んでおいて,「<lのあとにTAB」とすれば,上述のように展開される.この次の記事でまとめて書こうと考えていたが,すっかり失念していた.ここに書いておいたほうが確かにわかりやすい.mickaushyさん,ご指摘ありがとうございました.

Codeの記述

  • 上記の#+begin_src emacs-lispと#+end_srcの間にemacs-lispで設定内容を書く.ここからが便利にできているところ.
  • code-blockの中にいるときに
    • C-c ‘とする

    • 当該のcode blockだけのバッファが表示される(下図の下のバッファ)

    • この中はemacs-lisp modeでsyntaxも普通に効くので,普通にコードを書く.もちろん,括弧の対応もハイライトで表示される.

    • C-c nとする

    • すると,インデントも綺麗に整えてくれる.

    • 満足したら,C-c ‘で元のバッファに戻る.整形は綺麗なまま反映される.素晴らしい!

  • 具体的なinit.orgの内容は次回のポスト以降に記述予定
Avatar
taipapa
本人ではありません (^^)

Related

Next
Previous
comments powered by Disqus