12
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

.emacsAdvent Calendar 2016

Day 8

Githubに.emacs.dを置く

Last updated at Posted at 2016-12-07

はじめに

私は自分の.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ファイルを自動走査するコードを入れています。

~/.emacs.d/init.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じまんでした。

12
13
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?