GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Coordinates-and-Windows.html ・ emacs-doc.conao3.com

29.26 座標とウィンドウ

本節では、ウィンドウ上およびウィンドウ内の位置を報告する関数について説明します。これらの関数の多くは、ウィンドウフレームのネイティブ位置にある原点を基準とした位置を報告します(フレームジオメトリを参照)。一部の関数は、ウィンドウフレームのディスプレイの原点を基準とした位置を報告します。いずれの場合も、原点の座標は (0, 0) であり、X座標およびY座標はそれぞれ右方向および下方向に進むにつれて増加します。

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

関数: window-edges &optional window body absolute pixelwise

この関数は、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-body-edges &optional window

この関数は、windowのボディのエッジを返します(ウィンドウサイズを参照)。(window-body-edges window)を呼び出すことは(window-edges window t)を呼び出すことと同等です(上記参照)。

以下の関数を使用して、フレーム相対座標の集合をウィンドウに関連付けることができます。

関数: window-at x y &optional frame

この関数は、frame の本来の位置(フレームジオメトリを参照)を基準として、デフォルトの文字サイズ(フレームフォントを参照)における座標 x および y のライブウィンドウを返します。

その位置にウィンドウがない場合は、戻り値は nil となります。frame が省略されているか、または nil の場合は、選択中のフレームがデフォルトとなります。

関数: coordinates-in-window-p coordinates window

この関数は、ウィンドウ 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-fringe
right-fringe

座標はウィンドウの左右の端にあります。

left-margin
right-margin

座標はウィンドウの左右の余白にあります。

nil

座標はwindowのどの部分にも含まれていません。

関数 coordinates-in-window-p は、常に window が配置されているフレームを使用するため、引数としてフレームを必要としません。

以下の関数は、文字単位ではなくピクセル単位でウィンドウの位置を返します。主にグラフィカルディスプレイで有用ですが、各文字の画面領域を1ピクセルとみなすテキスト端末でも呼び出すことができます。

関数: window-pixel-edges &optional window

この関数は、windowの辺のピクセル座標のリストを返します。(window-pixel-edges window)を呼び出すことは(window-edges window nil nil t)を呼び出すことと同等です(上記参照)。

関数: window-body-pixel-edges &optional window

この関数は、windowの本体のピクセルエッジを返します。(window-body-pixel-edges window)を呼び出すことは(window-edges window t nil t)を呼び出すことと同等です(上記参照)。

以下の関数は、フレームではなくディスプレイ画面の原点を基準として、ウィンドウの位置をピクセル単位で返します。

関数: window-absolute-pixel-edges &optional window

この関数は、windowのフレームのディスプレイにおける原点(0, 0)を基準としたwindowのピクセル座標を返します。(window-absolute-pixel-edges)を呼び出すことは(window-edges window nil t t)を呼び出すことと同等です(上記参照)。

関数: 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))))

グラフィカル端末では、この形式によってマウスカーソルが、選択されたウィンドウの位置にあるグリフの左上隅へと「ワープ」します。このように算出された位置は、そこにツールチップウィンドウを表示する際にも利用できます。

以下の関数は、ウィンドウ内で表示されているバッファ位置の画面座標を返します。

関数: window-absolute-pixel-position &optional position window

バッファ位置 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-largest-empty-rectangle &optional window count min-width min-height positions left

この関数は、指定された 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 を返すこともあります。