Next: , Previous: , Up: キーバインディングのカスタマイズ   [Contents][Index]


50.3.10 マウスボタンのリバインド

Emacsはマウスボタンを表すためにもLispシンボルを使用します。Emacsで通常のマウスイベントは、クリック(click)イベントです。これはボタンを押して、マウスを移動せずにボタンを離すと発生します。ドラッグ(drag)イベントも取得できます。これはボタンを押したままマウスを移動したとき発生します。ドラッグイベントは、最後にボタンを離したときにも発生します。

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

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

ドラッグイベントにたいするシンボルも同様ですが、単語‘mouse’の前にプレフィクス‘drag-’がつきます。たとえば左ボタンでのドラッグはdrag-mouse-1イベントを生成します。

マウスボタンが押されたときに発生するイベントにたいして、バインディングを定義することもできます。これらのイベントは‘drag-’ではなく‘down-’で始まります。このようなイベントは、それらにキーがバインドされているときだけ生成されます。ボタンダウンイベントを受け取った場合、その後に常にそれに対応するクリックまたはドラッグイベントが続きます。

もし望むならシングルクリック、ダブルクリック、トリプルクリックを区別することもできます。ダブルクリックとは、マウスボタンをほぼ同じ場所で2回クリックすることを意味します。最初のクリックは通常のクリックイベントを生成します。2回目のクリックが充分早ければ、かわりにダブルクリックイベントを生成します。ダブルクリックイベントにたいするイベントタイプは、たとえばdouble-mouse-3のように、‘double-’で始まります。

これは同じ場所での2回目のクリックに特別な意味を与えることができることを意味しますが、それは最初のクリックを受け取ったときに実行される、通常のシングルクリックにたいする定義も実行されることを前提にしなければなりません。

これはダブルクリックで行なえることを制限しますが、ユーザーインターフェースデザイナーはこの制限は任意のケースにおいて従うべき制限だと言います。ダブルクリックは、シングルクリックで行なう何かを、よりもっと行なうためのものであるべきです。ダブルクリックイベントにたいするコマンドは、ダブルクリックにたいして追加の作業を処理するべきです。

ダブルクリックイベントにバインディングがない場合、これは対応するシングルクリックイベントに変化します。したがって、特にダブルクリックイベントを定義していない場合、これはシングルクリックコマンドを2回実行します。

Emacsはトリプルクリックイベントもサポートし、それらの名前は‘triple-’で始まります。Emacsはクワドループルクリック(quadruple clicks: 4連クリック)をイベントタイプとして区別しません。3回目以降のクリックは、追加のトリプルクリックイベントを生成します。しかしクリックされた数はすべてイベントリストに記録されるので、Emacs Lispを知っていて、本当にそれを使いたい場合はそれらを区別できます(Click Events in The Emacs Lisp Reference Manualを参照してください)。わたしたちは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

マウスはヘッダーラインにあります。

キーシーケンスにマウスボタンを複数配することもできますが、これは通常行なわれません。