Next: , Previous: , Up: Windows   [Contents][Index]


27.24 座標とウィンドウ

このセクションではウィンドウ位置をレポートする関数について説明します。これらの関数はそのウィンドウのフレームのネイティブ位置(Frame Geometryを参照)を原点とする相対的な位置をレポートすることに注意してください。そのウィンドウのフレームのディスプレーを原点とする相対位置をレポートする関数もいくつかあります。どのような場合でも原点は座標(0, 0)、右方向でX座標、下方向でY座標が増加します。

以下の関数ではX座標とY座標は整数の文字単位(行数と列数)で報告されます。グラフィカルなディスプレイ上での“行”と“列”はそれぞれ、そのフレームのデフォルトフォントにより指定されるデフォルト文字の高さと幅に対応します(Frame Fontを参照)。

Function: window-edges &optional window body absolute pixelwise

この関数はwindow端の座標のリストをリターンする。windowが省略またはnilの場合のデフォルトは選択されたウィンドウ。

リターン値は(left top right bottom)という形式をもつ。リストの要素は順にそのウィンドウにより占有される最左列のX座標、最上行のY座標、最右列より1列右のX座標、最下行より1行下のY座標。

これらはヘッダーライン、モードライン、スクロールバー、ウィンドウディバイダー、ディスプレイマージンを含むウィンドウの実際の端であることに注意。テキスト端末ではそのウィンドウの右に隣接するウィンドウがあれば、ウィンドウの右端にはそのウィンドウと隣接するウィンドウの間のセパレーターラインが含まれる。

オプション引数bodynilなら、それはwindowの総サイズに対応する端をリターンすることを意味する。bodyが非nilならwindowのボディー(テキスト領域)の端をリターンすることを意味する。bodyが非nilならwindowには生きたウィンドウを指定しなければならない。

オプション引数absolutenilなら、それはwindowのフレームのネイティブ位置に相対的な端のリターンを意味する。absoluteが非nilならwindowのディスプレーの原点(0, 0)からの相対座標のリターンを意味する。非グラフィカルなシステムではこの引数に効果はない。

オプション引数pixelwisenilなら、それはwindowのフレームのデフォルト文字の幅と高さの単位で座標をリターンすることを意味する。pixelwiseが非nilならピクセル単位で座標をリターンすることを意味する。rightbottomで指定されるピクセルはこれらの端の外側であることに注意。absoluteが非nilなら、pixelwiseも暗黙に非nilとなる。

Function: window-body-edges &optional window

この関数はwindowのボディーの端をリターンする(Window Sizesを参照)。(window-body-edges window)の呼び出しは(window-edges window t) (上記参照)の呼び出しと等価。

以下の関数は一連のフレーム相対座標(frame-relative coordinates)からウィンドウへの関連付けに使用できます:

Function: window-at x y &optional frame

この関数はframeのネイティブ位置(Frame Geometryを参照)から相対的に、デフォルト文字単位(Frame Fontを参照)で与えられる座標xyにある生きたウィンドウをリターンする。

その位置にウィンドウがなければリターン値はnilframeが省略またはnilの場合のデフォルトは選択されたフレーム。

Function: coordinates-in-window-p coordinates window

この関数はウィンドウwindowがフレーム相対座標coordinatesを占有するかどうかをチェックして、もしそうならウィンドウのどの部分かをチェックする。windowは生きたウィンドウであること。

coordinates(x . y)という形式のコンスセルであること。ここでxywindowのフレームのネイティブ位置(Frame Geometryを参照)から相対的に、デフォルト文字サイズ(Frame Fontを参照)の単位で与えられる。

指定された位置にウィンドウが存在しなければリターン値はnil。それ以外ではリターン値は以下のいずれか:

(relx . rely)

その座標はwindow内にある。数値relxrelyは指定された位置にたいする、ウィンドウ左上隅を原点に0から数えたウィンドウ相対座標と等価。

mode-line

その座標はwindowのモードライン内にある。

header-line

その座標はwindowのヘッダーライン内にある。

right-divider

その座標はwindowと右に隣接するウィンドウを分けるディバイダー内にある。

bottom-divider

その座標はwindowと下にあるウィンドウを分けるディバイダー内にある。

vertical-line

その座標はwindowと右に隣接するウィンドウを分ける垂直ライン内にある。この値はウィンドウにスクロールバーがないときのみ発生し得る。スクロールバー内の位置はこれらの目的にたいしてはウィンドウ外側と判断される。

left-fringe
right-fringe

その座標はウィンドウの左か右のフリンジ内にある。

left-margin
right-margin

その座標はウィンドウの左か右のマージン内にある。

nil

その座標はwindowのいずれの部分でもない。

関数coordinates-in-window-pwindowのあるフレームを使用するので引数としてフレームを要求しない。

以下の関数は文字単位ではなくピクセル単位でウィンドウ位置をリターンします。主にグラフィカルなディスプレイで有用ですがテキスト端末上でも呼び出すことができ、その場合は各文字の占めるスクリーン領域が1ピクセルとなります。

Function: window-pixel-edges &optional window

この関数はwindow端にたいするピクセル座標のリストをリターンする。(window-pixel-edges window)の呼び出しは、(window-edges window nil nil t) (上記参照)の呼び出しと等価。

Function: window-body-pixel-edges &optional window

この関数はwindowのボディー端をピクセルでリターンする。(window-body-pixel-edges window)の呼び出しは、(window-edges window t nil t) (上記参照)の呼び出しと等価。

以下の関数はフレーム原点ではなく、ディスプレイ画面(display screen)の原点に相対的なウィンドウ位置をピクセルでリターンします。

Function: window-absolute-pixel-edges &optional window

この関数はwindowのフレームのディスプレーの原点(0, 0)から相対的なwindowのピクセル座標をリターンする。(window-absolute-pixel-edges)の呼び出しは、(window-edges window nil t t) (上記参照)の呼び出しと等価。

Function: window-absolute-body-pixel-edges &optional window

この関数はwindowのフレームのディスプレーの原点(0, 0)から相対的なwindowのボディーのピクセル座標をリターンする。(window-absolute-body-pixel-edges window)の呼び出しは、(window-edges window t t t) (上記参照)の呼び出しと等価。

set-mouse-absolute-pixel-positionと組み合わせることにより、あるウィンドウ内で可視な任意のバッファー位置にマウスポインターを移動するためにこの関数を使用できる。

(let ((edges (window-absolute-body-pixel-edges))
      (position (pos-visible-in-window-p nil nil t)))
  (set-mouse-absolute-pixel-position
   (+ (nth 0 edges) (nth 0 position))
   (+ (nth 1 edges) (nth 1 position))))

グラフィカルな端末では上記フォームは選択されたウィンドウのポイントにあるグリフ左上隅にマウスカーソルを“ワープ”させる。この方法で計算される位置は、そこにツールチップウィンドウを表示するためにも使用できる。

以下の関数はウィンドウ内で可視なバッファー位置のスクリーン座標をリターンします。

Function: window-absolute-pixel-position &optional position window

バッファー位置positionがウィンドウwindow内で可視なら、この関数はpositionにあるグリフの左上隅のディスプレー座標をリターンする。リターン値はwindowのディスプレー原点(0, 0)から相対的な、X座標とY座標からなるコンスセル。window内でpositionが不可視ならnilをリターンする。

windowは生きたウィンドウでなければならずデフォルトは選択されたウィンドウ。positionのデフォルトはwindowwindow-pointの値。

これは選択されたウィンドウ内のポイント位置へのマウスポインターの移動は、以下のような記述で足りることを意味する:

(let ((position (window-absolute-pixel-position)))
  (set-mouse-absolute-pixel-position
   (car position) (cdr position)))