Next: Splicing into Lists, Previous: Simple Types, Up: 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)