本セクションでは、マウスボタンまたはモーションイベントのデータにアクセスするための便利な関数について説明します。キーボードイベントのデータも同様の関数でアクセスできますが、キーボードイベントには適用されないデータ要素は
0 または nil となります。
以下の 2 つの関数は、マウスイベントの位置を指定するマウス位置リスト(クリックイベントを参照)を返します。
これは event の開始位置を返します。
event がクリックまたはボタンダウンイベントの場合、このイベントの位置を返します。event がドラッグイベントの場合、ドラッグの開始位置を返します。
これは event の終了位置を返します。
event がドラッグイベントの場合、これはユーザーがマウスボタンを離した位置を返します。event がクリックまたはボタンダウンイベントの場合、その値は実際には開始位置であり、こうしたイベントが持つ唯一の位置となります。
これらの関数は、マウス位置のリストを引数として受け取り、そのさまざまな部分を返します:
position が含まれるウィンドウを返します。position がイベントの発生元となったフレーム外の位置を表す場合は、代わりにそのフレームを返します。
position
に記録されているウィンドウ領域を返します。イベントがウィンドウのテキスト領域で発生した場合は nil
を返し、それ以外の場合は、イベントが発生した領域を識別するシンボルとなります。
バッファ位置を position で返します。イベントがウィンドウのテキスト領域、余白領域、または端で発生した場合、この値はバッファ位置を指定する整数となります。それ以外の場合、値は未定義となります。
ピクセル単位のxおよびy座標をpositionに、コンスセル(x . y)として返します。これらの座標は、posn-windowで指定されたウィンドウを基準としています。
この例では、ウィンドウのテキストエリアにおけるウィンドウ相対座標を、フレーム相対座標に変換する方法を示します。
(defun frame-relative-coordinates (position)
"Return frame-relative coordinates from POSITION.
POSITION is assumed to lie in a window text area."
(let* ((x-y (posn-x-y position))
(window (posn-window position))
(edges (window-inside-pixel-edges window)))
(cons (+ (car x-y) (car edges))
(+ (cdr x-y) (cadr edges)))))
この関数は、position で指定されたバッファ位置に対応する推定列および行を含むコンスセル (col . row) を返します。戻り値は、position
に対応する x および y
の値から算出された、フレームのデフォルトの文字幅およびデフォルトの行高さ(間隔を含む)の単位で与えられます。(したがって、実際の文字がデフォルト以外のサイズである場合、実際の行および列はこれらの算出値と異なる可能性があります。)オプション引数
window が nil
以外の場合、フレームではなく、position
で指定されたウィンドウのデフォルトの文字幅が使用されます。(例えば、そのウィンドウがデフォルト以外のズームレベルのバッファを表示している場合などに、この違いが生じます。)
なお、row はテキストエリアの上から数えます。position で指定されたウィンドウにヘッダー行(ウィンドウヘッダー行を参照)やタブ行がある場合、それらは row のカウントに含まれません。
実際の行と列を position に、コンスセル (col . row)
として返します。これらの値は、position
で指定されたウィンドウにおける実際の行番号と列番号です。詳細は クリックイベント を参照してください。position に実際の位置値が含まれていない場合、この関数は nil を返します。その場合、posn-col-row
を使用して近似値を取得できます。
なお、この関数は、タブ文字や画像が占有する表示列数など、画面上の文字の視覚的な幅を考慮していません。正準文字単位で座標を取得する必要がある場合は、代わりに
posn-col-row を使用してください。
position で記述された文字列オブジェクトを、nil(position
がバッファテキストであることを意味)またはコンスセル (string . string-pos) のいずれかで返します。
画像オブジェクトをpositionで返します。nil(positionに画像がない場合)、または画像仕様(image …)のいずれかとなります。
position で記述された画像または文字列オブジェクトを、nil(position
がバッファテキストであることを意味する)、画像 (image …)、またはコンスセル (string . string-pos) のいずれかとして返します。
position で指定されたオブジェクトの左上隅を基準としたピクセル単位の x および y
座標を、コンスセル (dx . dy) として返します。position
がバッファテキストを指している場合は、その位置に最も近いバッファテキスト文字の相対座標を返します。
position で指定されたオブジェクトのピクセル幅と高さを、コンスセル (width . height) として返します。position
がバッファ位置を指している場合は、その位置にある文字のサイズを返します。
タイムスタンプを position で返します。これはイベントが発生した時刻をミリ秒単位で表したものです。このようなタイムスタンプは、使用されているウィンドウシステムに応じて変動する任意の開始時刻を基準として報告されます。例えば X Window System では、X サーバーが起動してからの経過ミリ秒数となります。
これらの関数は、特定のバッファ位置または画面位置を指定して位置リストを算出します。この位置リスト内のデータには、前述の関数を用いてアクセスできます。
この関数は、window 内の位置 pos に対応する位置リストを返します。pos はデフォルトで window 内のポイントとなり、window はデフォルトで選択中のウィンドウとなります。
posn-at-point は、window に
pos が表示されない場合に nil を返します。
この関数は、指定されたフレームまたはウィンドウ(デフォルトでは選択中のウィンドウ)におけるピクセル座標 x
および y に対応する位置情報 frame-or-window を返します。座標 x および y は、選択中のウィンドウのテキスト領域を基準とします。whole が
nil 以外の場合、座標 x
はスクロールバー、マージン、およびフリンジを含むウィンドウ領域全体を基準とします。
If this variable is non-nil, the posn-point of a mouse position list will be set to the
position of the glyph whose leftmost edge is the closest to the mouse click,
as opposed to the position of the glyph underneath the mouse pointer
itself. For example, if posn-at-x-y is called
with x set to 9, which is
contained within a character of width 10 displayed at column 0, the point
saved within the mouse position list will be after
that character, not before it.