次: Customization Types, 前: Group Definitions, 上: Customization
defcustomを使って、ユーザーが編集可能な変数を宣言します。
カスタマイズ可能なユーザーオプション変数としてoptionを宣言する。 optionをクォートしないこと。 引数docは変数の説明文字列を指定する。
optionが空であると、
defcustomはdefaultで初期化する。 defaultは値を計算する式であること。 これは複数回評価される可能性があるので、書き方には注意すること。
defcustomでは、つぎの追加キーワードも使えます。
:type type:options listこれは、現時点では、型がhookのときだけ意味を持つ。
その場合、listの要素は、フックの値の要素として使える関数であること。
ユーザーはこれらの関数以外も使えるが、便利な選択肢として提示する。
:version version (defcustom foo-max 34
"*Maximum number of foo's allowed."
:type 'integer
:group 'foo
:version "20.3")
:set setfunctionset-default。
:get getfunctiondefault-value。
:initialize functiondefcustomを評価したときに変数の初期化に使う関数。
この関数は、2つの引数、つまり、シンボルと値を取ること。
このように使うことを意図した定義済みの関数がいくつかある。
custom-initialize-set:set関数を使って変数を初期化するが、
変数の値が空でないときには再初期化しない。
これは:initializeのデフォルト。
custom-initialize-defaultcustom-initialize-setに似ているが、
変数の:set関数のかわりに関数set-defaultを使って変数を設定する。
変数の:set関数がマイナモードをオン/オフする場合には、
普通はこれを選ぶ。
これを選ぶと、変数を定義してもマイナモード関数を呼び出さないが、
変数をカスタマイズするとマイナモード関数を呼び出す。
custom-initialize-reset:set関数を使う。
変数の値が空でない場合には、(:getで得られる)現在値で
:set関数を呼び出して、変数をリセットする。
custom-initialize-changed:set関数を使う。
さもなければ、set-defaultを使う。
:requireオプションは、
特定の機能をオンにするようなオプションには便利です。
パッケージがオプション変数の値を検査するように書かれていたとしても、
パッケージをロードするようにする必要があります。
これを:requireで行えるのです。
See Common Keywords。
ライブラリparen.elからとった例をつぎに示します。
(defcustom show-paren-mode nil
"Toggle Show Paren mode...."
:set (lambda (symbol value)
(show-paren-mode (or value 0)))
:initialize 'custom-initialize-default
:type 'boolean
:group 'paren-showing
:require 'paren)
内部的には、defcustomは、
デフォルト値を与える式は属性standard-valueを使って記録し、
ユーザーがカスタマイズバッファで保存した値は
属性saved-valueを使って記録しています。
属性saved-valueは実際にはリストであり、
そのcarが値に評価される式です。