マウスを動かさずに同じマウスボタンを短時間に複数回押すと、Emacsは2回目以降の押下に対して特別なrepeatマウスイベントを生成します。
最も一般的な繰り返しイベントはダブルクリックイベントです。Emacsでは、ボタンを2回クリックするとダブルクリックイベントが発生します。このイベントは、ボタンを離したときに発生します(これはすべてのクリックイベントにおいて通常の動作です)。
ダブルクリックイベントのイベントタイプには、接頭辞 ‘double-’
が含まれています。したがって、meta
を押したままマウスの右ボタンをダブルクリックすると、Lispプログラムには M-double-mouse-2
として伝わります。ダブルクリックイベントにバインディングが設定されていない場合は、対応する通常のクリックイベントのバインディングが実行に使用されます。そのため、特に必要がない限り、ダブルクリック機能を意識する必要はありません。
ユーザーがダブルクリックを行うと、Emacsはまず通常のクリックイベントを生成し、続いてダブルクリックイベントを生成します。したがって、ダブルクリックイベントのコマンドバインディングは、シングルクリックコマンドが既に実行済みであることを前提として設計する必要があります。シングルクリックの結果を起点として、ダブルクリックとして期待される結果が得られるようにしなければなりません。
ダブルクリックの意味が、どういうわけかシングルクリックの意味を基盤としているのであれば――これはダブルクリックにおける推奨されるユーザーインターフェース設計の手法ですが――これは便利です。
ボタンをクリックし、再度押し下げた状態で、ボタンを押したままマウスを動かし始めると、最終的にボタンを離した際にダブルドラッグイベントが発生します。そのイベントタイプには、単なる‘drag’ではなく‘double-drag’が含まれます。ダブルドラッグイベントにバインディングが設定されていない場合、Emacsはそのイベントを通常のドラッグであるかのように扱い、代替のバインディングを探します。
ダブルクリックまたはダブルドラッグイベントに先立ち、ユーザーがボタンを2回目に押下すると、Emacsはdouble-downイベントを生成します。このイベントタイプには、単なる‘down’ではなく‘double-down’が含まれます。double-downイベントにバインディングがない場合、Emacsはそのイベントを通常のボタンダウンイベントであるかのように扱い、代替のバインディングを探します。それでもバインディングが見つからない場合、double-downイベントは無視されます。
まとめると、ボタンをクリックしてすぐに再度押すと、Emacsは1回目のクリックに対してダウンイベントとクリックイベントを、再度ボタンを押したときにはダブルダウンイベントを、そして最終的にはダブルクリックまたはダブルドラッグイベントを生成します。
ボタンを2回クリックし、続けてもう一度押すと、Emacsはtriple-downイベントを生成し、続いてtriple-clickまたはtriple-dragのいずれかが発生します。これらのイベントのイベントタイプには、‘double’の代わりに‘triple’が含まれています。いずれかのトリプルイベントにバインディングがない場合、Emacsは対応するダブルイベントで使用するバインディングを使用します。
ボタンを3回以上クリックしてから再度押すと、3回目以降の押下イベントはすべて3回押しのイベントになります。Emacsには、4回押しや5回押しなどの個別のイベントタイプは用意されていません。ただし、イベントリストを確認すれば、ボタンが正確に何回押されたかを知ることができます。
この関数は、eventに至るまでの連続したボタン押下回数を返します。eventがダブルダウン、ダブルクリック、またはダブルドラッグイベントの場合、値は2となります。eventがトリプルイベントの場合、値は3以上となります。eventが通常のマウスイベント(リピートイベントではない)の場合、値は1となります。
リピートイベントを発生させるには、連続するマウスボタンの押下が、ほぼ同一の画面上の位置で行われる必要があります。double-click-fuzz
の値は、ダブルクリックと判定されるために連続する2回のクリック間でマウスを移動させることができる最大ピクセル数(水平方向または垂直方向)を指定します。
この変数は、マウスの動きをドラッグとして判定するための閾値でもあります。
リピートイベントを生成するには、連続するボタン押下間のミリ秒数が double-click-time
の値未満である必要があります。double-click-time を nil に設定すると、マルチクリック検出が完全に無効になります。t に設定すると時間制限が解除され、Emacs は位置のみに基づいてマルチクリックを検出するようになります。