本節では、ウィンドウ上およびウィンドウ内の位置を報告する関数について説明します。これらの関数の多くは、ウィンドウフレームのネイティブ位置にある原点を基準とした位置を報告します(フレームジオメトリを参照)。一部の関数は、ウィンドウフレームのディスプレイの原点を基準とした位置を報告します。いずれの場合も、原点の座標は (0, 0) であり、X座標およびY座標はそれぞれ右方向および下方向に進むにつれて増加します。
以下の関数では、X座標およびY座標は整数文字単位(すなわち、それぞれ行数と列数)で報告されます。グラフィカルディスプレイでは、各「行」および「列」は、フレームのデフォルトフォントで指定されたデフォルト文字の高さと幅に対応します(フレームフォントを参照)。
この関数は、window の辺の座標のリストを返します。window が省略された場合、または nil
が省略された場合は、選択中のウィンドウがデフォルトとなります。
戻り値は (left top right bottom)
という形式になります。これらのリスト要素は、それぞれ、ウィンドウが占める最左列のX座標、最上行のY座標、最右列から右に1列離れた位置のX座標、および最下行から1行下のY座標です。
なお、これらは装飾部分を含む、ウィンドウの実際の外縁であることに注意してください。テキスト端末において、ウィンドウの右側に隣接ウィンドウがある場合、その右端にはウィンドウと隣接ウィンドウの間の区切り線が含まれます。
オプション引数 body が nil の場合、これは
window の総サイズに対応するエッジを返すことを意味します。body が non-nil の場合は、window のボディのエッジを返すことを意味します。body が
non-nil の場合、window
はライブウィンドウを指定する必要があります。
オプション引数 absolute が nil
の場合、これは window のフレームの本来の位置を基準としたエッジを返すことを意味します。absolute が nil 以外の場合は、window のディスプレイの原点 (0, 0)
を基準とした座標を返すことを意味します。非グラフィカルなシステムでは、この引数は効果を持ちません。
オプション引数 pixelwise が nil
の場合、これは window のフレームのデフォルトの文字幅および高さ(フレームフォント を参照)に基づいて、必要に応じて丸めた座標を返すことを意味します。pixelwise が nil
以外の場合は、座標をピクセル単位で返すことを意味します。なお、right および bottom で指定されるピクセルは、これらの辺のすぐ外側に位置します。absolute が nil 以外の場合、pixelwise も暗黙的に nil 以外となります。
この関数は、windowのボディのエッジを返します(ウィンドウサイズを参照)。(window-body-edges window)を呼び出すことは(window-edges window t)を呼び出すことと同等です(上記参照)。
以下の関数を使用して、フレーム相対座標の集合をウィンドウに関連付けることができます。
この関数は、frame の本来の位置(フレームジオメトリを参照)を基準として、デフォルトの文字サイズ(フレームフォントを参照)における座標 x および y のライブウィンドウを返します。
その位置にウィンドウがない場合は、戻り値は nil となります。frame が省略されているか、または nil
の場合は、選択中のフレームがデフォルトとなります。
この関数は、ウィンドウ window がフレームの相対座標 coordinates を占有しているか、また占有している場合はウィンドウのどの部分であるかを判定します。window はライブウィンドウである必要があります。
coordinates は (x . y) の形式のコンスセルであるべきであり、ここで
x と y は、window のフレームの本来の位置(フレームジオメトリ を参照)を基準としたデフォルトの文字サイズで指定されます(フレームフォント を参照)。
指定した位置にウィンドウが存在しない場合、戻り値は nil
となります。それ以外の場合、戻り値は以下のいずれかとなります。
(relx . rely)座標は window 内にあります。数値 relx と rely は、ウィンドウの左上隅を 0 として、指定した位置に対応するウィンドウ相対座標です。
mode-line座標はwindowのモードラインにあります。
header-line座標はwindowのヘッダー行にあります。
tab-line座標はwindowのタブ行にあります。
right-divider座標は、windowと右側のウィンドウを隔てる仕切り線にあります。
bottom-divider座標は、windowとその下のウィンドウを隔てる仕切りにあります。
vertical-line座標は、windowとその右側の隣接要素との間の垂直線上にあります。この値は、ウィンドウにスクロールバーがない場合にのみ適用されます。スクロールバー内の位置は、これらの目的においてはウィンドウ外とみなされます。
left-fringeright-fringe座標はウィンドウの左右の端にあります。
left-marginright-margin座標はウィンドウの左右の余白にあります。
nil座標はwindowのどの部分にも含まれていません。
関数 coordinates-in-window-p は、常に window が配置されているフレームを使用するため、引数としてフレームを必要としません。
以下の関数は、文字単位ではなくピクセル単位でウィンドウの位置を返します。主にグラフィカルディスプレイで有用ですが、各文字の画面領域を1ピクセルとみなすテキスト端末でも呼び出すことができます。
この関数は、windowの辺のピクセル座標のリストを返します。(window-pixel-edges window)を呼び出すことは(window-edges window nil nil t)を呼び出すことと同等です(上記参照)。
この関数は、windowの本体のピクセルエッジを返します。(window-body-pixel-edges window)を呼び出すことは(window-edges window t nil t)を呼び出すことと同等です(上記参照)。
以下の関数は、フレームではなくディスプレイ画面の原点を基準として、ウィンドウの位置をピクセル単位で返します。
この関数は、windowのフレームのディスプレイにおける原点(0, 0)を基準としたwindowのピクセル座標を返します。(window-absolute-pixel-edges)を呼び出すことは(window-edges window nil t t)を呼び出すことと同等です(上記参照)。
この関数は、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))))
グラフィカル端末では、この形式によってマウスカーソルが、選択されたウィンドウの位置にあるグリフの左上隅へと「ワープ」します。このように算出された位置は、そこにツールチップウィンドウを表示する際にも利用できます。
以下の関数は、ウィンドウ内で表示されているバッファ位置の画面座標を返します。
バッファ位置 position がウィンドウ window
内で表示されている場合、この関数は position
にあるグリフの上端/左端の表示座標を返します。戻り値は、window の表示における原点 (0, 0)
を基準とした、その角の X 座標および Y 座標からなる cons です。position が window 内で表示されていない場合は、nil を返します。
window
はアクティブなウィンドウである必要があり、デフォルトでは選択中のウィンドウが指定されます。position
のデフォルト値は、window の window-point の値となります。
つまり、選択したウィンドウ内の点の位置にマウスポインタを移動させるには、次のように記述すれば十分です:
(let ((position (window-absolute-pixel-position))) (set-mouse-absolute-pixel-position (car position) (cdr position)))
以下の関数は、ウィンドウ内に表示されているテキストに重ならないように、そのウィンドウに内接する最大の長方形を返します。
この関数は、指定された window のテキストエリアに内接する最大の空の矩形の寸法を計算します。window はライブウィンドウである必要があり、デフォルトでは選択中のウィンドウが指定されます。
戻り値は、windowのテキスト領域の空きスペース(テキストが表示されていない領域)に内接することができる最大の矩形の幅、および始点と終点のy座標からなる3つ組です。この関数ではx座標は返されません。そのような矩形は、windowのテキスト領域の右端で終わるものとみなされます。空きスペースが見つからない場合、戻り値はnilとなります。
オプション引数 count が nil
でない場合、返す矩形の最大数を指定します。つまり、戻り値は矩形を指定した3要素組のリストとなり、最大の矩形が最初に配置されます。count はコンスセルであることもでき、その car で返す矩形の数を指定し、nil でない場合の CDR
で、返されるすべての矩形が互いに素である必要があることを指定します。
オプション引数 min-width および min-height は、nil
以外の場合、返される任意の矩形の最小幅と高さを指定します。
オプション引数 positions は、nil
でない場合、CAR が最上部を、CDR
が返される任意の矩形によってカバーされなければならない最下部のピクセル位置を指定するコンスセルとなります。これらの位置は、window のテキスト領域の先頭から計測されます。
オプション引数 left が nil
以外の場合、右から左へ記述するテキストを表示するバッファに適した値を返すことを意味します。この場合、返される矩形は window のテキスト領域の左端から開始するものとみなされます。
なお、この関数は window-lines-pixel-dimensions を介して window のグリフ行列の各行の寸法を取得する必要があります(表示テキストのサイズ を参照)。したがって、window の現在のグリフ行列が最新でない場合、この関数は nil を返すこともあります。