はじめに
私は自分の.emacs.dをhttps://github.com/h12o/.emacs.dに置いています。こうすることで、gitさえあればホームディレクトリで
git clone git@github.com:h12o/.emacs.d.git
または
git clone https://github.com/h12o/.emacs.d.git
と打つだけで、自分の環境を復元できるので便利です。
言いたいことはこれだけです。
レポジトリ名は「dotemacs.d」とかではなくて「.emacs.d」
私の場合、git clone
したあとでリネームなどを一切しなくて済むように、よくある「dotemacs.d」などのディレクトリ名を使わず、「.emacs.d」というレポジトリをhttps://github.com/h12oの下に作っています。Githubから怒られたことはないので、問題ありません。
.gitignoreファイル
~/.emacs.d/.gitignoreを見れば分かりますが、http://gitignore.ioをもとに作っています…と、この記事を書きながら久しぶりにアクセスしたところ、しばらく見ないうちにサイトが生成する.gitignoreの中身が増えていますね。.dir-locals.elなんて初めて見ましたので、誰かアドベントカレンダー記事で書いてください…
(追記: .dir-locals.elはディレクトリーごとのローカル変数であるとの指摘がありました)
~/.emacs.d/user-start.d/*.elの自動走査
Githubにファイルを置いたから、というわけではないのですが、私の.emacs.dは、Emacs起動時に、~/.emacs.d/user-start.d/*.elの自動走査をするように書かれています。
具体的には、~/.emacs.d/init.elに、~/.emacs.d/user-start.d配下の*.elファイルを自動走査するコードを入れています。
(setq my-user-start-dir (expand-file-name "~/.emacs.d/user-start.d"))
(let* ((dir my-user-start-dir)
(el-suffix "\\.el\\'")
(files (mapcar
(lambda (path) (replace-regexp-in-string el-suffix "" path))
(directory-files dir t el-suffix))))
(while files (load (car files) 'noerror) (setq files (cdr files))))
コードの本体は(files
と(while files
で、files
にはmy-user-start-dir
(=~/.emacs.d/user-start.d)の中の.elファイルがリストとして入ることを狙っています。files
にリストが入ってしまえば、あとは(while files
で(load (car files) 'noerror)
したら(setq files (cdr files))
していってfiles
の中身が尽きるまでロードするだけです。
なお、~/.emacs.d/user-start.dのファイルは、ロードしたいライブラリごとにファイルを分けて、標準ライブラリをロードするファイルは数字2桁+ライブラリ名+「.el」と命名しています。
最初の数字2桁は、その機能が追加された・そのライブラリが取り込まれたEmacsのメジャーバージョンとしています。たとえば18x-win.elはEmacs 18でX関係の機能が追加されたので「18」ではじまります。私の場合(https://github.com/h12o/.emacs.d/tree/master/user-start.d参照)、最初に読まれるのは15simple.elで最後に読み込まれるのは24mac-win.elということになります。古いライブラリほど依存関係という名のしがらみが少ないはずなので、多少はトラブルを減らすことができるだろうと考えています。といっても普通はライブラリを書く側がきちんと書けばいい話なので、この慣習は半分以上、気休めです。また、Emacsに標準でない機能を呼び出すファイルは単にライブラリ名+.elとしています。これらは比較的あとになって呼ばれるようにと意図しています。
秘密情報の排除
Emacsのライブラリの中には、設定ファイルに認証情報をベタ書きすることを意図した設計のものもありますが、そのようなファイルをGithubに置くのははばかられます。
幸いにして、Emacsの標準ライブラリに「netrc」というものがあり、~/.authinfo(~/.netrc)を扱うことができます。すなわち、Emacs標準ライブラリnetrcを使って、レポジトリ外のファイルに認証情報を追い出すのがおすすめです。詳しくは『simplenote.elの設定でsimplenote-emailとsimplenote-passwordをべた書きせずに済むようにする』をご覧ください。
ひょっとしたらEmacsからmacOSのキーチェーンを呼ぶことができる人というのが世の中にはいるのかもしれませんが、私は寡聞にしてその方法を知りません。
おわりに
以上、オレオレ.emacsじまんでした。