vine-default の仕組み

vine-default は、以下のようにして Vine Linux のデフォルト設定が読み込まれます。

  1. それぞれの elisp アプリケーションの初期設定ファイル /etc/emacs-23.3/site-start.d/*-init.el を然るべき順序で読み込む
  2. vine-default-setup-hook に、 各 elisp アプリケーションの vine-default-package を然るべき順序でひっかけておく
  3. ~/.emacs.d/emacs23-vine-default.el図 2-2) を参照して、それぞれの vine-default-package の挙動がきまる
  4. vine-default-setup を実行することで、 vine-default-setup-hook にひっかけていた vine-default-package~/.emacs.d/emacs23-vine-default.el図 2-2) に応じて、読み込まれる。
実際に、以下のような順序で vine-default に関するファイルを読み込み、 vine-default を実行します。
  1. /usr/share/emacs-23.3/site-lisp/site-start.el
  2. /etc/emacs-23.3/site-start.d/XXpackage-init.el (X ∈ {0, 1, 2,..., 9})
  3. /etc/emacs/emacs23-local.el
  4. vine-default 用設定ファイル ${HOME}/.emacs.d/emacs23-vine-default.el
  5. vine-default-setup を実行: /usr/share/emacs-23.3/site-lisp/ 以下の
    • vine-default-base.el, vine-default-faces.el
    • package/vine-default-package.el
  6. デフォルトのユーザ初期設定ファイル ${HOME}/.emacs.d/init.el
Vine Linux 5 から Vine Linux 6 への変更

Vine Linux 6 の vine-default の仕組みは、 Vine Linux 5 の vine-default からいくつか改良しました。 主な変更点は、以下のようになります。

  • vine-default を呼ぶタイミングを改善するときに、 vine-default 設定ファイル ~/.emacs.d/emacs23-vine-default.el図 2-2) を設けました。 これにより、ユーザ自身の Emacs に関する設定から vine-default に関する設定のみを分離できます。
  • vine-default を呼ぶタイミングを改善したことにより、 after-vine-default-setup-hook を廃止しました。 これにより、vine-default に関する設定が、 ユーザ初期設定ファイル ~/.emacs.d/init.el図 2-3) に混在しません。
  • システム全体での設定(セクション 2.2 - system-wide な設定)を担う設定ファイル名が /etc/emacs/emacs-23-local.el から /etc/emacs/emacs23-local.el へ変更

3.4.1. vine-default に関する関数とフック

具体的には、 /usr/share/emacs-23.3/site-lisp/site-start.el に、以下のような関数とフックを定義しています。

(defcustom vine-default t
  "A boolean for all Vine Linux default settings"
  :type 'boolean)
(if (equal (getenv "LOGNAME") "root") 
    (setq vine-default nil))

(defcustom vine-default-base t
  "A boolean for vine-default-base"
  :type 'boolean)

(defcustom vine-default-faces t
  "A boolean for vine-default-faces"
  :type 'boolean)

(defvar vine-default-setup-hook nil
  "List of functions to be called at vine-default-setup")

(defun vine-default-setup ()
  "A function for setup to default configurations of Vine Linux"
  (when vine-default
    (message "Starting vine-default-setup ...")
    (when vine-default-base 
      (message "Loading vine-default-base ...")
      (require 'vine-default-base))
    (when vine-default-faces 
      (message "Loading vine-default-faces ...")
      (require 'vine-default-faces))
    (run-hooks 'vine-default-setup-hook)
    ;; (run-hooks 'after-vine-default-setup-hook); obsolete
    )
  )

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; run functions from the /etc/emacs-23.3/site-start.d directory
;;; Files in this directory ending with ".el" are run on startup
(mapc 'load (directory-files "/etc/emacs-23.3/site-start.d" t "\\.el\\'"))

;;; load local configuration
(if (file-exists-p (expand-file-name "/etc/emacs/emacs23-local.el"))
    (load (expand-file-name "/etc/emacs/emacs23-local.el")))

;;; load vine-default configuration per user before vine-default-setup
(if (file-exists-p (expand-file-name "~/.emacs.d/emacs23-vine-default.el"))
    (load (expand-file-name "~/.emacs.d/emacs23-vine-default.el")))

;;; run vine-default-setup
(vine-default-setup)
	

3.4.2. 各 elisp アプリケーションの vine-default-package

例えば、ibus-el の場合は /etc/emacs-23.3/site-start.d/95ibus-el-init.el に以下のような設定をしています。

(defcustom vine-default-ibus-el t
  "A boolean for vine-default-ibus-el"
  :type 'boolean)

(add-hook 'vine-default-setup-hook
          (lambda()
            (when vine-default-ibus-el
	      (message "Loading vine-default-ibus-el ...")
	      (require 'vine-default-ibus-el))))
	
/usr/share/emacs-23.3/site-lisp/ibus-el/vine-default-ibus-el.el には、 ibus-el に関するデフォルト設定を記述して、 (provide 'vine-default-ibus-el) を提供しています。