ボタンはボタン固有の情報を保持するために、オーバーレイプロパティかテキストプロパティを使用してテキストのリージョンに関連付けられます。これらはすべてボタンのタイプ(デフォルトはビルトインのボタンタイプbutton
)から初期化されます。すべてのEmacsテキストと同じようにボタンの外観はface
プロパティにより制御されます。(ボタンタイプbutton
から継承されたface
プロパティを通じることにより)デフォルトでは典型的なウェブページリンクのようなシンプルなアンダーラインです。
簡便さのために2種類のボタン作成関数があります。1つはバッファーの既存リージョンにボタンプロパティを追加するmake-...button
と呼ばれる関数、もう1つはボタンテキストを挿入するinsert-...button
と呼ばれる関数です。
すべてのボタン作成関数は&rest
引数のpropertiesを受け取ります。これはボタンに追加するプロパティを指定するproperty
valueペアーのシーケンスである必要があります。ボタンのプロパティを参照してください。これに加えて他のプロパティの継承元となるボタンタイプの指定にキーワード引数:type
を使用できます。ボタンのタイプを参照してください。作成の間に明示的に指定されなかったプロパティは、(そのタイプがそのようなプロパティを定義していれば)そのボタンのタイプから継承されます。
以下の関数はボタンプロパティを保持するためにオーバーレイを使用してボタンを追加します(オーバーレイを参照)。
これはカレントバッファー内のbegからendにボタンを作成してリターンする。
これはポイント位置にラベルlabelのボタンを挿入してリターンする。
以下の関数も同様ですが、ボタンプロパティを保持するためにテキストプロパティを使用します(テキストのプロパティを参照)。この種のボタンはバッファーにマーカーを追加しないので、非常に多数のボタンが存在してもバッファーでの編集が低速になることはありません。しかしそのテキストに既存のfaceテキストプロパティが存在する場合(たとえばFont Lockモードにより割り当てられたフェイス)には、そのボタンのフェイスは可視にならないかもしれません。これらの関数はいずれも新たなボタンの開始位置をリターンします。
これはテキストプロパティを使用してカレントバッファー内のbegからendにボタンを作成する。
これはテキストプロパティを使用してポイント位置にラベルlabelのボタンを挿入する。
たとえば後でバッファーに挿入されるかもしれないデータ構造の作成時など、即座にバッファーに挿入せずに文字列をボタンにできれば便利なことがある。この関数はstringをそのような文字列にして、ユーザーがそのボタンをクリックした際にはcallbackが呼び出されるようにする。オプションのdataパラメーターはcallbackの呼び出し時にパラメーターとして使用される。nil
ならかわりにボタンがパラメーターとして使用される。