本当は作りたい物があったんだけど、自分のemacsにjavascriptモードが無かったためそれを追加した。でもあれ、そもそもemacs-lispっていつもサンプルから拾うだけであんまり中身知らないなあと思って調べてみた。
初めてemacsに出会ったのは大学1回生時の授業であるけど
emacs-lispに興味を持ったことは今までついぞ無かったのであった。
まず、自分の構成は以下
~/.emacs.d/
init.el
/site-lisp
ホームディレクトリ直下の".emacs.d"配下に設定を集めています。
こうすると、設定がディレクトリごとコピーできるのでポータブルになるとWEB+DB vol.58に書いてありました。site-lisp配下には外から取ってきたemacs-lispをぽいぽい入れていきます。
# あ、そういえばこれ買いました。神本。
内容ですが、長いので3部に分けます予定です(いつまでに書ききれるか分からんけど)。
- 第1部:イントロダクション、load-path設定等
- 第2部:メジャーモード等設定
- 第3部:文字コードとか見た目の設定とかこまいとこ
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; load-path
まずはload-pathに関する設定から。たぶんここの設定はみんな似たり寄ったりだと思う。
S式のままだと関数と変数をぱっと見分けられないので、javascript風に変換してみる。
↓↓
完全に見た目の分かりやすさだけのために変換します。
(dynamic scopeとlexical scopeの)変数スコープの違い等の言語的特質は無視で。
スコープの話はこの機会に少し勉強したので、また別途まとめたい。
1行目:let句でローカル変数"default-directory"に値を束縛する。束縛する値は、expand-file-name関数の戻り値。expand-file-name関数は、文字列が表すパスを絶対パスに置き換えます。let句の構成は以下になり、最初のvarlist-to-bindで、変数に値を束縛します。"(hoge 1)":hogeという変数に1を設定します!みたいな感じで。そして、その後にその"hoge"を使用した処理を書くスタイルになるかと思います。
(let varlist-to-bind body...)今回のvarlist-to-bind(束縛変数リスト)はこの"default-directory"だけ。今回のケースだと2行目以降がbody(実行文)にあたる。
2行目:add-to-list関数でリストに値をいれてるんだけど、この関数は値の重複を許さないので、動きとしてはSetに値をぶっこんでいることに近い。"load-path"という変数に、さきほど束縛したdefault-directoryを挿入しています。"load-path"というのは、Emacs が*.el や*.elc(emacs-lispをバイトコンパイルしたもの)を探す順を指定するための変数です。シェル変数の$PATHのイメージ。load-path、いっぱい入ってます。
("/Users/hoge/.emacs.d/site-lisp" "/usr/share/emacs/22.1/site-lisp" "/usr/share/emacs/site-lisp" "/usr/share/emac\
s/22.1/lisp" "/usr/share/emacs/22.1/lisp/url" "/usr/share/emacs/22.1/lisp/textmodes" "/usr/share/emacs/22.1/lisp/\
progmodes" "/usr/share/emacs/22.1/lisp/play" "/usr/share/emacs/22.1/lisp/obsolete" "/usr/share/emacs/22.1/lisp/ne\
t" "/usr/share/emacs/22.1/lisp/mh-e" "/usr/share/emacs/22.1/lisp/mail" ...)
3,4行目:normal-top-level-add-subdirs-to-load-pathという(長い!)関数が存在するかを確認して、存在したら呼び出す。この関数は、ディレクトリを再帰的に探索し、見つかったディレクトリを load-path に追加します。
これで、"~/.emacs.d/site-lisp"配下に追加した*.elやら*.elcやらが読み込まれるようになるということですね。何気ない顔してコピペ、というのはいい加減卒業しないとなあという今日この頃。
続きは、(あるかもしれない)第二部で。
.emacs.d、Githubに置いてみました。
https://github.com/k-ori/emacs.d
# syntax-highlight、amazonのiframeのバナー張ると動かないのか!
# http://blog.heartofsword.net/archives/794