肥大化した.emacs.dを管理するために私が使っているelisp

init-loader.elによって分割したemacs設定を管理する設定です。頻繁に変更するための拡張機能も付けておきました。

基本設定

私の場合は、「~/.emacs.d/init.el」に記述


;;; init-loader
(require 'init-loader)
;;; 設定ファイルのあるフォルダを指定
(setq inits_dir (expand-file-name "~/.emacs.d/inits/"))
(init-loader-load inits_dir)
;;; emacs起動時にエラーを報告する
(setq init-loader-show-log-after-init t)

initsフォルダはこんな感じで先頭の番号順に読み込まれます。

オートバイトコンパイル(限定的)

設定ファイルの階層のみ、elispファイルを保存時にバイトコンパイルします。同時に設定は反映され、エラーがあった場合はすぐに表示してくれます。


;;; initsフォルダのみ、保存時に自動コンパイルして即反映させる
(defun auto-save-byte-compile-file ()
  "Do `byte-compile-file' and reload setting immediately, When elisp file saved only in inits folder."
  (interactive)
  (when (or (equal default-directory inits_dir)
            (equal default-directory (abbreviate-file-name inits_dir)))
    (byte-compile-file buffer-file-name t)
    ))
(add-hook 'emacs-lisp-mode-hook
  (lambda ()
    (add-hook 'after-save-hook 'auto-save-byte-compile-file nil t)))

一時的に設定を除外する

init-loader.elは数字+アンダースコアで始まるものしか読み込みません。

Diredからのリネームはwdiredを使うと容易ですが、もっと手軽にリネームする関数です。Diredで"_"を打てば一瞬でファイル先頭に"_"を付け、リネーム出来るようにしました。"m"でマークを付ければまとめて"_"を付けられます。

"_"付きのものは取られて、ないものは"_"が先頭に付きます。

prefixを変更すれば、"_"以外を付けられます。


;;; initsフォルダのファイルに"_"をつけて読み込まないようにする
(defun dired-add-underscore-to-file-head ()
  "Add underscore to the head of file name, to exclude
loading init file in inits folder. But file name already
added underscore first, then remove it from file name."
  (interactive)
  (let ((files (dired-get-marked-files t current-prefix-arg))
        (prefix "_"))
    (mapcar (lambda (x)
              (cond
               ;;; filename prefix is already added.
               ((string-match (concat "^" prefix) x)
                ;;; replaced filename is already exists.
                (if (file-exists-p (substring x 1))
                    (error-message-string
                     (concat x " is already exists."))
                  (rename-file x (substring x (length prefix)))))
               ;;; renamed filename is exists. avoid confrict.
               ((file-exists-p (concat prefix x))
                (error-message-string
                 (concat x " is already exists.")))
               ;;; safe to add prefix.
               (t
                (rename-file x (concat prefix x)))
               ))
            files)
    (revert-buffer)))
;;; Diredでのショートカット
(add-hook 'dired-mode-hook
          (lambda ()
            (define-key dired-mode-map (kbd "_")
              'dired-add-underscore-to-file-head)))

init-loaderに限らずプレフィックスが付いたものを除外できる設定のアプリケーションには有効かもしれません。