Emacsでは、ウィンドウの高さと幅を取得するための各種関数が提供されています。これらの関数の多くは、戻り値をピクセル単位、または正準行・列単位で指定できます。グラフィカルディスプレイでは、後者は実際には
frame-char-height および frame-char-width
で返されるフレームのデフォルトフォントで指定されたデフォルト文字の高さと幅に対応します(フレームフォントを参照)。したがって、ウィンドウに異なるフォントやサイズのテキストが表示されている場合、そのウィンドウで報告される行高さや列幅は、実際に表示されているテキストの行数や列数とは異なる場合があります。
ウィンドウの全高とは、その本体と上下の装飾からなる行数のことです(Emacsウィンドウの基本概念を参照)。
この関数は、ウィンドウ window の総高さを正準行単位で返します。window が省略された場合、または nil
が指定された場合は、選択中のウィンドウがデフォルトとなります。window
が内部ウィンドウである場合、戻り値はその子孫ウィンドウが占める総高さとなります。
ウィンドウのピクセル高さが、フレームのデフォルト文字高さの整数倍でない場合、ウィンドウが占有する行数は内部的に丸められます。これは、ウィンドウが親ウィンドウである場合、すべての子ウィンドウの合計高さの総和が、内部的に親ウィンドウの合計高さと等しくなるように行われます。つまり、2つのウィンドウのピクセル高さが同じであっても、内部的な合計高さは1行分異なる場合があります。また、ウィンドウが垂直方向に結合されており、次の兄弟ウィンドウが存在する場合、その兄弟ウィンドウの最上行は、このウィンドウの最上行と合計高さの和として計算できます(座標とウィンドウを参照)。
オプション引数 round が ceiling
の場合、この関数は window
のピクセル高さをそのフレームの正準文字高さで除した値より大きい最小の整数を返します。floor
の場合は、当該値より小さい最大の整数を返します。それ以外の round の値が指定された場合は、windows の総高さの内部値を返します。
ウィンドウの全幅とは、その本体と左右の装飾からなる列数のことです(Emacsウィンドウの基本概念を参照)。
この関数は、ウィンドウ window の正準列単位の合計幅を返します。window が省略された場合、または nil
が指定された場合は、選択中のウィンドウがデフォルトとなります。window
が内部ウィンドウである場合、戻り値はその子孫ウィンドウが占める合計幅となります。
ウィンドウのピクセル幅がフレームの正準文字幅の整数倍でない場合、ウィンドウが占有する列数は内部的に丸められます。これは、ウィンドウが親ウィンドウである場合に、そのすべての子ウィンドウの合計幅の総和が、親ウィンドウの合計幅と内部的に等しくなるように行われます。つまり、2つのウィンドウが同じピクセル幅であっても、内部的な合計幅は1列分異なる場合があります。また、ウィンドウが水平方向に結合されており、次の兄弟ウィンドウが存在する場合、その兄弟ウィンドウの最左列は、このウィンドウの最左列と合計幅の和として計算できます(座標とウィンドウを参照)。オプション引数
round は、window-total-height
と同様に動作します。
この関数は、ウィンドウ window の総高さ(行単位)または総幅(列単位)のいずれかを返します。horizontal が省略されているか、あるいは nil
が指定されている場合は、window に対して window-total-height を呼び出すのと同等です。それ以外の場合は、window に対して window-total-width
を呼び出すのと同等です。オプション引数 round は、window-total-height と同様に動作します。
以下の2つの関数を使うと、ウィンドウの合計サイズをピクセル単位で返すことができます。
この関数は、ウィンドウ window の合計高さをピクセル単位で返します。window は有効なウィンドウである必要があり、デフォルトでは選択中のウィンドウが指定されます。
戻り値には、windowの上部および下部の装飾の高さが含まれます。windowが内部ウィンドウである場合、そのピクセル高さは、その子要素が占める画面領域のピクセル高さとなります。
この関数は、ウィンドウ window の幅をピクセル単位で返します。window は有効なウィンドウである必要があり、デフォルトでは選択中のウィンドウが指定されます。
戻り値には、windowの左右の装飾部分の幅が含まれます。windowが内部ウィンドウの場合、そのピクセル幅は、子要素が占める画面領域の幅となります。
以下の関数を使用すると、指定したウィンドウに隣接するウィンドウがあるかどうかを判定できます。
この関数は、window のフレーム内にその上下に他のウィンドウが存在しない場合、non-nil を返します。より正確には、これは window
の全高が、そのフレーム上のルートウィンドウの全高と等しいことを意味します。この際、ミニバッファウィンドウはカウントされません。window が省略されているか、あるいは nil
である場合は、選択中のウィンドウがデフォルトとなります。
この関数は、window
のフレーム内に左右に他のウィンドウが存在しない場合(すなわち、その全幅が当該フレーム上のルートウィンドウの幅と等しい場合)、non-nil を返します。window が省略されているか、または
nil が指定されている場合は、選択中のウィンドウがデフォルトとなります。
ウィンドウの本体の高さとは、その本体の高さのことであり、上部や下部の装飾は含まれません(Emacsウィンドウの基本概念を参照)。
この関数は、ウィンドウ window の本体の高さを正準行数で返します。window が省略されているか、あるいは nil
が指定されている場合は、選択中のウィンドウがデフォルトとなります。それ以外の場合は、アクティブなウィンドウである必要があります。
オプション引数 pixelwise は、高さに使用する単位を指定します。nil が指定された場合、window
のボディ高さを正準文字で返し、必要に応じて最も近い整数に切り下げます。つまり、テキストエリアの最下部にある行が一部しか表示されていない場合、その行はカウントされません。また、ウィンドウのボディ高さが、window-total-height で返される総高さを超えることはないことを意味します。
pixelwise が remap
であり、デフォルトのフェイスが再マッピングされている場合(フェイスの再マッピング
を参照)、再マッピング後のフェイスを用いて文字の高さを決定します。nil
以外の値の場合は、高さをピクセル単位で返します。
ウィンドウのボディ幅とは、そのボディとテキスト領域の幅のことであり、左右の装飾は含まれません(Emacsウィンドウの基本概念を参照)。
なお、片方または両方のフリンジが削除(幅を0に設定)されると、ディスプレイエンジンは継続および切り捨てグリフの表示用に、ウィンドウの両側にそれぞれ1つずつ、計2つの文字セルを確保するため、テキスト表示に使用できる列が2列分少なくなります。(後述する関数
window-max-chars-per-line は、この特有の仕様を考慮しています。)
この関数は、ウィンドウ window のボディの幅を標準列単位で返します。window が省略されているか、あるいは nil
が指定されている場合は、選択中のウィンドウがデフォルトとなります。それ以外の場合は、ライブウィンドウである必要があります。
オプション引数 pixelwise は、幅に使用する単位を指定します。nil が指定された場合、window
のボディ幅を正準文字で返し、必要に応じて最も近い整数に切り下げます。つまり、テキストエリアの右側にある列が一部しか表示されていない場合、その列はカウントされません。また、ウィンドウのボディ幅が、window-total-width で返される総幅を超えることはないことを意味します。
pixelwise が remap
であり、デフォルトのフェイスが再マッピングされている場合(フェイスの再マッピング
を参照)、再マッピング後のフェイスを用いて文字幅を決定します。それ以外の nil
以外の値については、ピクセル単位で幅を返します。
この関数は、window の本体の高さまたは幅を返します。horizontal が省略されているか、あるいは nil
が指定されている場合は、window に対して window-body-height を呼び出すのと同等となり、それ以外の場合は window-body-width を呼び出すのと同等となります。いずれの場合も、オプション引数 pixelwise は呼び出された関数に渡されます。
ウィンドウのモード、タブ、およびヘッダー行のピクセル高さは、以下に示す関数で取得できます。これらの戻り値は、ウィンドウが以前に表示されていない限り、通常は正確です。その場合、戻り値はウィンドウのフレームに使用されているフォントの推定値に基づいています。
この関数は、windowのモードラインの高さをピクセル単位で返します。windowはアクティブなウィンドウである必要があり、デフォルトでは選択中のウィンドウが指定されます。windowにモードラインがない場合は、戻り値は0となります。
この関数は、windowのタブ行の高さをピクセル単位で返します。windowはアクティブなウィンドウである必要があり、デフォルトでは選択中のウィンドウが指定されます。windowにタブ行がない場合は、戻り値は0となります。
この関数は、windowのヘッダー行の高さをピクセル単位で返します。windowはアクティブなウィンドウである必要があり、デフォルトでは選択中のウィンドウが指定されます。windowにヘッダー行がない場合は、戻り値は0となります。
ウィンドウ区切り線(ウィンドウ区切り線を参照)、フリンジ(フリンジを参照)、スクロールバー(スクロールバーを参照)、および表示マージン(マージンでの表示を参照)の高さおよび/または幅を取得する関数については、それぞれの節で説明します。
Lispプログラムでレイアウトの決定を行う必要がある場合、以下の関数が役立つでしょう。
この関数は、指定されたウィンドウ window(ライブウィンドウである必要があります)の指定されたフェイス
face に表示されている文字数を返します。face
が再マッピングされていた場合(フェイスの再マッピング
を参照)、再マッピング後のフェイスに関する情報が返されます。省略された場合、または nil、face がデフォルトのフェイスに、window
が選択中のウィンドウにそれぞれデフォルト設定されます。
window-body-widthとは異なり、この関数はwindowのフレームの正準文字幅(フレームフォントを参照)単位ではなく、faceのフォントの実際のサイズを考慮します。また、windowにフリンジの一方または両方がない場合、継続グリフが使用するスペースも考慮します。
ウィンドウのサイズを変更したり(ウィンドウのサイズ変更を参照)、分割したりするコマンド(ウィンドウの分割を参照)は、許容される最小のウィンドウ高さと幅を指定する変数
window-min-height および window-min-width に従います。また、変数 window-size-fixed にも従い、これを用いてウィンドウのサイズを固定することができます(ウィンドウサイズの保持を参照)。
このオプションでは、任意のウィンドウの最小合計高さ(行単位)を指定します。その値には、少なくとも1行のテキストと、上下の装飾部分を含める必要があります。
このオプションは、任意のウィンドウの最小合計幅(列単位)を指定します。その値は、少なくとも2つのテキスト列と、左右の装飾分を収容できる必要があります。
以下の関数は、各領域のサイズおよび window-min-height、window-min-width、window-size-fixed の値を考慮して、特定のウィンドウがどの程度小さくなり得るかを示します(ウィンドウサイズの保持を参照)。
この関数は window の最小サイズを返します。window は有効なウィンドウである必要があり、デフォルトでは選択されているものが使用されます。オプション引数
horizontal が non-nil の場合は
window の最小列数を返し、それ以外の場合は window の最小行数を返します。
戻り値は、windowのサイズが実際に設定された場合に、windowのすべての構成要素が完全に表示されたままになることを保証します。horizontalおよびnilの場合は、上部または下部の装飾が含まれます。horizontal(nil以外)の場合は、windowの左側または右側の装飾が含まれます。
オプション引数 ignore が nil
以外の場合、固定サイズウィンドウ、window-min-height または window-min-width の設定による制限を無視することを意味します。ignore が safe と等しい場合、ライブウィンドウは
window-safe-min-height 行および window-safe-min-width 列まで小さくなることがあります。ignore がウィンドウである場合、そのウィンドウのみの制限を無視します。それ以外の nil 以外の値は、すべてのウィンドウに対して上記の制限をすべて無視することを意味します。
オプション引数 pixelwise non-nil
は、ピクセル単位で計測した window の最小サイズを返すことを意味します。