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-default
custom-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が値に評価される式です。