Emacsを使えば、着替えることなくドラッグイベントを実現できます。ドラッグイベントは、ユーザーがマウスボタンを押し、ボタンを離す前にマウスを別の文字位置へ移動させるたびに発生します。他のすべてのマウスイベントと同様に、ドラッグイベントはLispではリストとして表現されます。これらのリストには、次のようにマウスの開始位置と最終位置の両方が記録されます:
(event-type start-position end-position)
ドラッグイベントでは、シンボル event-type の名前にプレフィックス ‘drag-’ が含まれます。例えば、ボタン2を押したままマウスをドラッグすると、drag-mouse-2 イベントが発生します。前述の図におけるイベントの2番目と3番目の要素である start-position と end-position
は、マウス位置のリストとしてドラッグの開始位置と終了位置に設定されます(クリックイベント
を参照)。任意のマウスイベントの2番目の要素にも、同様の方法でアクセスできます。ただし、ドラッグイベントは、最初に選択されたフレームの境界外で終了することがあります。その場合、3番目の要素の位置リストには、ウィンドウの代わりにそのフレームが含まれます。
‘drag-’というプレフィックスは、‘C-’や‘M-’といった修飾キーのプレフィックスの後に続きます。
read-key-sequence
がキーバインドのないドラッグイベントを受信し、対応するクリックイベントにバインドがある場合、そのドラッグイベントはドラッグの開始位置におけるクリックイベントに変換されます。つまり、意図的に区別したい場合を除き、クリックイベントとドラッグイベントを区別する必要はありません。