initsplit 20160919.1118(in MELPA)
code to split customizations into different files

概要

initsplit.el は、M-x customize等によるGUIでのカスタマイズ結果を
変数名別のファイルに分けます。

本来ならば custom-file にすべてのカスタマイズ結果が書き出されますが、
これを使うことで、特定のパッケージに関するカスタマイズ結果を
別のファイルに追い出し、見通しを良くします。

このように使います。

(load "initsplit")
;; カスタマイズ結果のファイルをバイトコンパイルする
(setq custom-file "~/.emacs.d/settings.el")
;; orgとgnusのカスタマイズは別々のファイルに保存する
(setq initsplit-customizations-alist
  '(("^gnus-" "~/.emacs.d/gnus-settings.el")
    ("^org-" "~/.emacs.d/org-settings.el")))
(add-hook 'after-save-hook 'initsplit-byte-compile-files t)

;; 全カスタマイズファイルを読み込む
(load custom-file)
(load "~/.emacs.d/gnus-settings.el")
(load "~/.emacs.d/org-settings.el")

インストール

パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。

(package-initialize)
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("melpa" . "http://melpa.org/packages/")
        ("org" . "http://orgmode.org/elpa/")))

初めてinitsplitを使う方は
以下のコマンドを実行します。

M-x package-install initsplit

アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。

M-x package-install package-utils (初めてアップグレードする場合のみ)
M-x package-utils-upgrade-by-name initsplit

テストファイル initsplit-test.el(以下のコードと同一)

どのような動作をするのかがわかりにくいかもしれないので、
パッケージの方でテストファイルが添付してあります。

以下の変数を定義し、ファイルに分けます。

  • custom-file
  • mac-command-modifier
  • initsplit-customizations-alist
  • apple
  • boy
  • cat
  • dog
(message "testing")
(setq debug-on-error t)
(add-to-list 'load-path (file-name-directory load-file-name))
(custom-set-variables
 '(custom-file "/tmp/settings.el")
 '(mac-command-modifier 'meta)
 '(initsplit-customizations-alist
   '(("\\`a" "/tmp/a-settings.el")
     ("\\`b" "/tmp/b-settings.el")
     ("\\`[ac]" "/tmp/c-settings.el")
     ("\\`d" "/tmp/a-settings.el")))
 )
(require 'initsplit)

(defgroup test nil "")

(dolist (symbol '(apple boy cat dog))
  (eval `(defcustom ,symbol nil "doc" :group 'test))
  (set symbol t)
  (put symbol 'saved-value '(t)))

(custom-save-all)
(kill-emacs)
(customize-group "test")

;; expectations:
;; a-settings.el: apple, dog
;; b-settings.el: boy
;; c-settings.el: cat

init.elを別ファイルに退避し、
initsplit-test.elをinit.elにして読み込むと、
以下のファイルが書き出されて終了します。

/tmp/a-settings.el
apple, dog
/tmp/b-settings.el
boy
/tmp/c-settings.el
cat
/tmp/settings.el
それ以外

これを見てわかるように、カスタマイズ結果をファイルに分けたら、
すべてのファイルを読み込む必要があることです。


本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。