ボタンはテキスト領域に関連付けられており、オーバーレイやテキストプロパティを用いてボタン固有の情報を保持します。これらはすべて、ボタンのタイプ(デフォルトは組み込みのボタンタイプ
button)から初期化されます。他のすべてのEmacsテキストと同様に、ボタンの外観は face プロパティによって制御されます。デフォルトでは(button ボタンタイプから継承された face
プロパティにより)、これは一般的なウェブページのリンクのようなシンプルな下線となります。
便宜上、ボタン作成関数には、バッファの既存領域にボタンプロパティを追加するmake-...buttonと、ボタンテキストも併せて挿入するinsert-...buttonの2種類があります。
The button-creation functions all take the &rest argument properties,
which should be a sequence of property value pairs,
specifying properties to add to the button; see Button Properties. In addition, the
keyword argument :type may be used to specify a
button-type from which to inherit other properties; see Button Types. Any properties not explicitly
specified during creation will be inherited from the button’s type (if
the type defines such a property).
以下の関数は、ボタンのプロパティを保持するためのオーバーレイ(オーバーレイを参照)を使用してボタンを追加します。
これにより、現在のバッファ内に beg から end までのボタンが作成され、それが返されます。
これは、ポイントに label というラベルのボタンを挿入し、それを返します。
以下の関数は似ていますが、ボタンのプロパティを保持するためにテキストプロパティ(テキストプロパティを参照)を使用します。このようなボタンはバッファにマーカーを追加しないため、ボタンの数が極めて多くても、バッファ内での編集が遅くなることはありません。ただし、テキストに既存のフェイステキストプロパティ(例:Font Lockモードによって割り当てられたフェイス)がある場合、ボタンのフェイスが表示されないことがあります。これら両方の関数は、新しいボタンの開始位置を返します。
これにより、テキストプロパティを使用して、現在のバッファ内に beg から end までのボタンが作成されます。
これにより、テキストプロパティを用いて、ポイントに label というラベルのボタンが挿入されます。
バッファに即座に挿入することなく、文字列をボタンとして作成する方が便利な場合があります。例えば、後でバッファに挿入される可能性のあるデータ構造を作成する場合などです。この関数は
string をそのような文字列に変換し、ユーザーがボタンをクリックすると callback が呼び出されます。オプションの data
パラメータは、callback が呼び出される際のパラメータとして使用されます。nil が指定されている場合は、代わりにボタンがパラメータとして使用されます。
新しいテキストを挿入するよりも、バッファ内の既存のテキストをボタンに変換する方が便利な場合があります。この関数は、start と end の間の領域をボタンに変換します。引数 callback と data の意味は buttonize と同様です。オプション引数 help-echo
は、ボタンの help-echo プロパティとして使用されます。
この関数は、現在のバッファ内にある start から end までのすべてのボタン(オーバーレイおよびテキストプロパティの両方)を削除します。