Next: , Previous: , Up: 入力イベント   [Contents][Index]


22.7.4 クリックイベント

ユーザーが同じ場所でマウスボタンを押してからリリース(release: 離す)すると、clickイベントが生成されます。ウィンドウシステムがマウスホイールイベントを報告する方法に応じて、マウスホイールはマウスクリックかマウスホイールイベントを生成します。すべてのマウスイベントは同じフォーマットを共有します:

(event-type position click-count)
event-type

これはマウスボタンが使用されたことを示す。これはシンボルmouse-1mouse-2、…のうちのいずれかで、マウスボタンは左から右に番号が付される。マウスホイールイベントならwheel-upwheel-downかもしれない。

ファンクションキーにたいして行うのと同様にアルト、コントロール、ハイパー、メタ、シフト、スーパーの修飾にたいしてプレフィクス‘A-’、‘C-’、‘H-’、‘M-’、‘S-’、‘s-’も使用できる。

このシンボルはイベントのイベント型としての役割りももつ。イベントのキーバインディングはこれらの型により示される。したがってmouse-1にたいするキーバインディングが存在すれば、そのバインディングはevent-typemouse-1であるようなすべてのイベントに適用されるだろう。

position

これはマウスイベントがどこで発生したかを表すマウス位置リスト(mouse position list)である。詳細は以下を参照のこと。

click-count

これは同じマウスボタンを素早く繰り返し押下したときの回数、あるいはホイールを繰り返し回した回数である。リピートイベントを参照のこと。

マウスイベントのpositionスロット内にあるマウス位置リストの内容にアクセスするためには、一般的にはマウスイベントへのアクセスに記述された関数を使用するべきです。

このリストの明示的なフォーマットはどこでイベントが発生したかに依存します。テキストエリア、モードライン、ヘッダーライン、タブライン、フリンジ、マージンエリアでのクリックにたいしてマウス位置リストは以下のフォーマットをもちます

(window pos-or-area (x . y) timestamp
 object text-pos (col . row)
 image (dx . dy) (width . height))

以下はこれらのリスト要素がもつ意味です:

window

マウスイベントが発生したウィンドウ。

pos-or-area

テキストエリア内でクリックされた文字のバッファー位置。またはテキストエリア外がクリックされたなら、イベントが発生したウィンドウエリア。これはシンボルmode-lineheader-linetab-linevertical-lineleft-marginright-marginleft-fringeright-fringeのいずれか。

特別なケースの1つとしてpos-or-areaが単なるシンボルではなく、(上記シンボルのいずれか1つの)シンボルを含むリストのような場合がある。これはEmacsにより登録されたイベントにたいする、イマジナリープレフィクスキー(imaginary prefix key)の後に発生する。キーシーケンス入力を参照のこと。

x, y

イベントの相対ピクセル座標(relative pixel coordinates)。あるウィンドウのテキストエリア内でのイベントにたいする座標原点(0 . 0)は、テキストエリアの左上隅となる。ウィンドウのサイズを参照のこと。モードライン、ヘッダーラインやタブライン内でのイベントにたいする座標原点は、そのウィンドウ自身の左上隅となる。フリンジ、マージン、垂直ボーダー(vertical border)ではxは有意なデータをもたない。フリンジ、マージンではyはヘッダーラインの最下端からの相対位置である。すべてのケースにおいてxyの座標はそれぞれ右方向と下方向で増加する。

timestamp

そのイベントが発生した時刻をシステム依存の初期時刻(initial time)からの経過ミリ秒で表す整数。

object

nil (バッファーテキスト上でイベントが発生したことを意味する)、イベント箇所にテキストプロパティやオーバーレイがあれば(string . string-pos)という形式のコンスセル。

string

クリックされた文字列。すべてのテキストプロパティを含む。

string-pos

クリックが発生した文字列内の位置。

text-pos

マージンエリアやフリンジにたいするクリックでは、そのウィンドウ内の対応する行内の最初の可視な文字のバッファー位置となる。モードライン、ヘッダーラインやタブラインにたいするクリックではnil。他のイベントにたいしてはクリックされたバッファーのクリックされた最寄りの位置となる。

col, row

これらはxyの位置にあるグリフ(gliph)の実際の行と列の座標数値である。行xがその行の実際のテキストの最後の列を超えるなら、colはデフォルトの文字幅をもつ仮想的な追加列数を加えた値が報告される。そのウィンドウがヘッダーラインをもてば行0はヘッダーライン、タブラインももてば行1はタブラインとなり、それ以外ならテキストエリアの上端ラインが行0となる。ウィンドウのテキストエリアのクリックにたいしては、テキストエリアの左端列が列0となり、モードラインまたはヘッダーラインのクリックにたいしてはそのラインの左端が列0となる。フリンジまたは垂直ボーダーのクリックにたいしては、これらは有意なデータをもたない。マージンのクリックにたいしては、colはマージンエリアの左端、rowはマージンエリアの上端から測られる。

image

クリック箇所にイメージがあればfind-imageがリターンするようなイメージオブジェクト(イメージの定義を参照)、それ以外はnil

dx, dy

クリック位置からもっとも近いobjectのグリフ左上隅からクリック位置への相対オフセット(ピクセル)。関係のあるobjectはバッファー、文字列、またはイメージ(上記参照)。objectnilか文字列なら、クリックされた文字グリフの左上隅からの相対座標。テキストモードのフレームではすべてのグリフのピクセルサイズは正確に1x1とみなされるので、objectnilならオフセットは常に0になることに注意。

width, height

クリックがバッファーテキスト、あるいはオーバーレイ文字列やディスプレイ文字列の文字上の場合には、その文字のグリフのピクセル単位での幅と高さ。それ以外の場合にはクリックされたobjectのサイズ。

スクロールバーへのクリックにたいして、positionは以下の形式をもちます:

(window area (portion . whole) timestamp part)
window

スクロールバーがクリックされたウィンドウ。

area

これはシンボルvertical-scroll-barである。

portion

スクロールバーの上端からクリック位置までのピクセル数。GTK+を含むいくつかのツールキットでは、Emacsがこれらのデータを抽出できないので値は常に0

whole

スクロールバーの全長のピクセル数。GTK+を含むいくつかのツールキットでは、Emacsがこれらのデータを抽出できないので値は常に0

timestamp

イベントが発生したミリ秒時刻。GTK+を含むいくつかのツールキットでは、Emacsがこれらのデータを抽出できないので値は常に0

part

クリックが発生したスクロールバー部分。これはシンボルhandle(スクロールバーのハンドル)、above-handle(ハンドルの上側エリア)、below-handle(ハンドルの下側エリア)、up(スクロールバー端の上矢印)、down(スクロールバー端の下矢印)のいずれか。

フレームのインターナルボーダー(フレームのレイアウトを参照)、フレームのツールバー(ツールバーを参照)やタブバーにたいするクリックではpositionは以下の形式をもちます:

 (frame part (X . Y) timestamp)
frame

インターナルボーダー、ツールバー、またはタブバーがクリックされたフレーム。

part

クリックされたフレームの部分。以下のいずれか:

tool-bar

フレームにはツールバーがあり、イベントはツールバー領域。

tab-bar

フレームにはタブバーがあり、イベントはタブバー領域。

left-edge
top-edge
right-edge
bottom-edge

対応するボーダーの直近のコーナーから少なくとも1正規文字の範囲内がクリックされた。

top-left-corner
top-right-corner
bottom-right-corner
bottom-left-corner

インターナルボーダーの対応するコーナーがクリックされた。

nil

フレームにインターナルボーダーがなく、イベントがツールバーやタブバー上ではない。これは通常はテキストモードフレームで発生する。これは非nil値にセットされたdrag-internal-borderパラメーター(マウスドラッグのパラメーターを参照)をもたないGUIフレームのインターナルボーダーでも発生し得る。