GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/emacs/Mouse-Buttons.html ・ emacs-doc.conao3.com

51.3.10 マウスボタンの再割り当て

Emacsでは、マウスボタンの指定にもLispのシンボルを使用します。Emacsにおける通常のマウスイベントはクリックイベントであり、これはボタンを押したままマウスを動かさずに離したときに発生します。また、ボタンを押したままマウスを動かすと、ドラッグイベントも発生します。ドラッグイベントは、最終的にボタンを離したときに発生します。

基本的なクリックイベントのシンボルは、一番左のボタンが mouse-1、次が mouse-2 というように続きます。2番目のマウスボタンを現在のウィンドウを分割するように再定義する方法は以下の通りです。

(keymap-global-set "<mouse-2>" 'split-window-below)

ドラッグイベントのシンボルは似ていますが、‘mouse’ という単語の前に ‘drag-’ という接頭辞が付いています。例えば、1番目のボタンをドラッグすると drag-mouse-1 イベントが発生します。

また、マウスボタンが押下された際に発生するイベントのバインディングを定義することもできます。これらのイベントは、‘drag-’ ではなく ‘down-’ で始まります。こうしたイベントは、キーバインディングが設定されている場合にのみ発生します。ボタン押下イベントが発生すると、必ずそれに対応するクリックまたはドラッグイベントが続きます。

必要に応じて、シングルクリック、ダブルクリック、トリプルクリックを区別できます。ダブルクリックとは、ほぼ同じ位置でマウスボタンを2回クリックすることを指します。1回目のクリックでは通常のクリックイベントが発生します。2回目のクリックが十分に短い間隔で行われれば、代わりにダブルクリックイベントが発生します。ダブルクリックイベントのイベントタイプは ‘double-’ で始まり、例えば double-mouse-3 のようになります。

つまり、同じ箇所での2回目のクリックに特別な意味を持たせることは可能ですが、その際は、1回目のクリックを受信した時点で通常の単発クリックの定義が実行済みであるという前提に立つ必要があります。

これによりダブルクリックでできることが制限されますが、ユーザーインターフェースデザイナーは、いかなる場合でもこの制約に従うべきだとしています。ダブルクリックは、シングルクリックと同様の動作を、より強力に行うべきです。ダブルクリックイベントのコマンドは、ダブルクリックに伴う追加処理を実行する必要があります。

ダブルクリックイベントにバインドがない場合、対応するシングルクリックイベントに変更されます。したがって、特定のダブルクリックを個別に定義しない限り、シングルクリックコマンドが2回実行されます。

Emacsはまた、名称が ‘triple-’ で始まるトリプルクリックイベントにも対応しています。Emacsではクアドラプルクリックをイベントタイプとして区別しておらず、3回目を超えるクリックは追加のトリプルクリックイベントとして生成されます。ただし、クリックの総数はイベントリストに記録されるため、Emacs Lispの知識があれば、必要に応じてそれらを区別することが可能です(The Emacs Lisp Reference ManualのClick Eventsを参照してください)。3回を超えるクリックに個別の意味を持たせることは推奨しませんが、後続のクリックで同じ3つの意味を循環させ、4回のクリックを1回、5回を2回、6回を3回と同等に扱うことが有用な場合もあります。

Emacsはまた、ドラッグイベントやボタン押下イベントにおいて、複数回の押下を記録します。例えば、ボタンを2回押し、そのままボタンを押したままマウスを動かすと、Emacsは‘double-drag-’イベントを受信します。そして、2回目に押し下げた瞬間に、Emacsは‘double-down-’イベントを受信します(これは、他のすべてのボタン押下イベントと同様に、バインディングが設定されていない場合は無視されます)。

変数 double-click-time は、クリック間にどれだけの時間が経過しても、複数クリックとしてグループ化できるかを指定します。値はミリ秒単位です。値が nil の場合、ダブルクリックは一切検出されません。値が t の場合、時間制限はありません。デフォルト値は 500 です。

変数 double-click-fuzz は、クリック間のマウス移動量として、かつ複数クリックとしてグループ化可能な範囲を指定します。その値は、ウィンドウ表示ではピクセル単位、テキストモード端末では文字セルの 1/8 単位で指定され、デフォルト値は 3 です。

マウスイベントのシンボルには、修飾キーの状態も示されており、通常の接頭辞として ‘C-’、‘M-’、‘H-’、‘s-’、‘A-’、および ‘S-’ が用いられます。これらは常に ‘double-’ または ‘triple-’ の前に置かれ、それらはさらに ‘drag-’ または ‘down-’ の前に置かれます。

フレームには、モードラインやスクロールバーなど、バッファのテキストを表示しない領域が含まれます。ダミーのプレフィックスキーを使えば、マウスボタンが画面の特殊な領域からのものであるかどうかを判別できます。例えば、モードライン上でマウスをクリックすると、通常のマウスボタン記号の前にプレフィックスキー mode-line が表示されます。そこで、モードラインの最初のボタンをクリックして scroll-up-command を実行するコマンドを定義する方法は以下の通りです。

(keymap-global-set "<mode-line> <mouse-1>" 'scroll-up-command)

これらのダミープレフィックスキーとその意味の一覧は以下の通りです。

mode-line

マウスはウィンドウのモードライン上にあった。

vertical-line

マウスは、隣り合うウィンドウを隔てる垂直線の上にありました。(スクロールバーを使用する場合、これらの垂直線の代わりに表示されます。)

vertical-scroll-bar

マウスは垂直スクロールバーにありました。(これは現在、Emacsがサポートしている唯一の種類のスクロールバーです。)

menu-bar

マウスはメニューバーにあった。

tab-bar

マウスはタブバーにあった。

tab-line

マウスはタブ行にあった。

header-line

マウスはヘッダー行にあった。

キーシーケンスに複数のマウスボタンを組み込むこともできますが、一般的にはそうしません。