次: Splicing into Lists, 前: Simple Types, 上: Customization Types
単純型が適切でない場合には、 他の型から新たな型を作り上げる複合型を使えます。 これには、いくつかの方法があります。
(restricted-sexp :match-alternatives criteria)nilかnil以外を返す。
リスト内の述語がオブジェクトに対してnil以外を返せば
そのオブジェクトを受理することを意味する。
'object。
リスト内のこの種の要素は、
objectそのものが受理できる値であることを意味する。
たとえば、
(restricted-sexp :match-alternatives
(integerp 't 'nil))
は、整数、t、nilが正しい値である。
カスタマイズバッファでは、すべての正しい値はその入力構文で表示し、
ユーザーはそれらをテキストとして編集する。
(cons car-type cdr-type)(cons string symbol)は、
("foo" . foo)などの値に一致するカスタマイズ型である。
カスタマイズバッファでは、
carとcdrは、
それらに指定した型に応じて別々に表示され、個別に編集できる。
(list element-types...)たとえば、(list integer string function)は、
3要素のリストを意味し、
第1要素は整数、第2要素は文字列、第3要素は関数であることを指定する。
カスタマイズバッファでは、
各要素は、それらに指定した型に応じて別々に表示され、個別に編集できる。
(vector element-types...)listと同様だが、値はリストではなくベクトルである必要がある。
その要素はlistの場合と同じ。
(choice alternative-types...)(choice integer string)は、整数か文字列を許す。
カスタマイズバッファでは、ユーザーはメニューを使って選択肢を選び、 その選択肢において普通の方法で値を編集する。
通常、このメニューの選択肢名は、選択肢から自動的に決定されるが、
選択肢に:tagキーワードを含めることで、
メニューに異なる名前を指定できる。
たとえば、整数が空白の個数を表し、文字列がそのまま使うテキストを表す場合には、
つぎのようにカスタマイズ型を書く。
(choice (integer :tag "Number of spaces")
(string :tag "Literal text"))
そうすると、メニューには、 `Number of spaces'と`Literal Text'が表示される。
const以外のnilが正当な値ではない選択肢では、
そのような選択肢には:valueキーワードを使って
正当なデフォルト値を指定すること。
See Type Keywords。
(const value)constの主な用途はchoiceの内側である。
たとえば、(choice integer (const nil))は、整数かnilを許す。
choiceの内側では、constにしばしば:tagを使う。
たとえば、
(choice (const :tag "Yes" t)
(const :tag "No" nil)
(const :tag "Ask" foo))
は、tは『yes』(はい)、nilは『no』(いいえ)、
fooは『ask』(問い合わせる)を意味する変数を記述する。
(other value)otherは、主に、choiceの最後の要素として使うことである。
たとえば、
(choice (const :tag "Yes" t)
(const :tag "No" nil)
(other :tag "Ask" foo))
は、tは『yes』(はい)、nilは『no』(いいえ)、
それ以外は『ask』(問い合わせる)を意味することを示す。
ユーザーが選択肢のメニューから`Ask'を選ぶと、値fooを指定する。
しかし、(tでもnilでもfooでもない)それ以外の値は、
fooと同様に`Ask'と表示される。
(function-item function)constと同様だが、関数であるような値に使う。
これは、関数名に加えて説明文字列を表示する。
説明文字列は、:docに指定したものか、
functionそのものの説明文字列である。
(variable-item variable)constと同様だが、変数名であるような値に使う。
これは、変数名に加えて説明文字列を表示する。
説明文字列は、:docに指定したものか、
variableそのものの説明文字列である。
(set elements...)(repeat element-type)