Next: , Previous: Button-Down Events, Up: Input Events


20.5.7 繰り返しイベント

マウスを動かさずに同一のマウスボタンを素早く連続して押し下げると、 Emacsは2回目以降の押し下げに対して 特別な繰り返し(repeat)マウスイベントを生成します。

もっとも一般的な繰り返しイベントはダブルクリック(double-click) イベントです。 ボタンを2回クリックすると、Emcasはダブルクリックイベントを生成します。 (他のすべてのクリックイベントのように)読者がボタンを離したときに イベントが生成されます。

ダブルクリックイベントのイベント型には、接頭辞‘double-’が含まれます。 したがって、<meta>を押し下げて2番目のボタンをダブルクリックすると、 LispプログラムにはM-double-mouse-2が送られます。 ダブルクリックイベントにバインディングがなければ、 対応する普通のクリックイベントを用いて実行します。 したがって、実際に利用したくない限りは、 読者はダブルクリック機能に注意する必要はありません。

ユーザーがダブルクリックすると、Emacsはまず普通のクリックイベントを生成し、 つぎにダブルクリックイベントを生成します。 したがって、ダブルクリックイベントのコマンドバインディングでは、 すでに普通のクリックコマンドが動作済みであると仮定して設計する必要があります。 普通のクリックの結果をもとに望みのダブルクリックの結果を得るようにします。

普通のクリックの意味にダブルクリックの意味を 『追加』するようにすると便利です。 ダブルクリックのユーザーインターフェイスはこのようにすることを勧めます。

ボタンをクリックして、ふたたびボタンを押し下げてそのままマウスを動かすと、 最終的にボタンを離した時点で、ダブルドラッグ(double-drag)イベントが 生成されます。 そのイベント型には‘drag’のかわりに‘double-drag’が含まれます。 ダブルドラッグイベントにバインディングがなければ、 Emacsは普通のドラッグイベントとしてバインディングを探します。

ダブルクリックイベントやダブルドラッグイベントを生成するまえに、 ユーザーがボタンを2回目に押し下げたとき、 Emacsはダブルダウン(double-down)イベントを生成します。 このイベント型には‘down’のかわりに‘double-down’が含まれます。 ダブルダウンイベントにバインディングがなければ、 Emacsは普通のボタン押し下げイベントとしてバインディングを探します。 どちらでもバインディングがみつからなければ、ダブルダウンイベントは無視します。

まとめると、ボタンをクリックしてただちに再度ボタンを押し下げると、 Emacsは、はじめのクリックに対してボタン押し下げイベントと クリックイベントを生成し、 再度ボタンを押し下げるとダブルダウンイベントを生成し、 最後にダブルクリックイベントかダブルドラッグイベントを生成します。

ボタンを2回クリックしてから再度押し下げる操作を素早く行うと、 Emacsは、トリプルダウン(triple-down)イベントに続けて トリプルクリック(triple-click)イベントか トリプルドラッグ(triple-drag)イベントを生成します。 これらのイベント型には‘double’のかわりに‘triple’が含まれます。 トリプルのイベントにバインディングがなければ、 Emacsは対応するダブルのイベントを使います。

ボタンを3回以上クリックしてから再度押し下げると、 3回目以降の押し下げに対するイベントはすべてトリプルのイベントです。 Emacsは、クアドラプル(4回)、クインタプル(5回)、…などの イベントは生成しません。 しかし、イベントリストを調べれば、ボタンを何回押したか正確にわかります。

— Function: event-click-count event

この関数は、イベントeventにおいてボタンが連続して押された回数を返す。 eventが、ダブルダウンイベント、ダブルクリックイベント、 ダブルドラッグイベントであると、値は2である。 eventがトリプルのイベントであると、値は3かそれ以上である。 eventが(繰り返しイベントではない)普通のマウスイベントであると、 値は1である。

— Variable: double-click-time

繰り返しイベントが生成されるためには、 同じスクリーン位置において連続してマウスボタンを押し下げ、しかも、 各押し下げの間隔はdouble-click-timeの値未満(ミリ秒)である必要がある。 double-click-timenilを設定すると、 連続したクリックの検出を禁止する。 tを設定すると時間制限をなくし、 Emacsは連続したクリックの検出を位置だけで行う。