Emacs内でフレームのサイズを指定する標準的な方法は、そのテキストサイズ――フレームのテキスト領域の幅と高さのタプル――を指定することです(フレームレイアウトを参照)。これは、ピクセル単位、またはフレームの標準文字サイズで指定できます(フレームフォントを参照)。
内部メニューやツールバーを持つフレームの場合、実際に描画されるまでそのフレームの本来の高さを正確に把握することはできません。つまり、一般的に本来のサイズを用いてフレームの初期サイズを指定することはできません。可視フレームの本来のサイズが判明した時点で、frame-geometry の戻り値に残りのコンポーネントを加算することで、その外形サイズを算出できます(フレームレイアウトを参照)。ただし、不可視フレームやまだ作成されていないフレームの場合、外形サイズは推定することしかできません。これはまた、画面の右端または下端からのオフセットで指定されたフレームの正確な初期位置を算出すること(フレーム位置を参照)が不可能であることも意味します。
任意のフレームのテキストサイズは、height および width フレームパラメータを用いて設定・取得できます(サイズパラメータを参照)。また、初期フレームのテキストサイズは、X-style
ジオメトリ指定を用いて設定することも可能です。The GNU Emacs Manual の Emacs
起動時のコマンドライン引数
を参照してください。以下に、既存の可視フレーム(デフォルトでは選択中のフレーム)のサイズにアクセスし、設定するための関数をいくつか挙げます。
これらの関数は、frame(フレームレイアウトを参照)のテキスト領域の高さと幅を、frame(フレームフォントを参照)のデフォルトフォントの高さと幅を単位として返します。これらの関数は、(frame-parameter frame 'height)および(frame-parameter frame 'width)を記述するための単純な短縮表記です。frame-heightおよびframe-width関数は、それらのエイリアスです。
ピクセル単位で測定した frame のテキスト領域が既定のフォントサイズの倍数でない場合、これらの関数が返す値は、テキスト領域に完全に収まる既定フォントの文字数に切り下げられます。
以下に示す関数は、指定されたフレームのネイティブフレーム、外側フレーム、内側フレーム、およびテキスト領域(フレームレイアウトを参照)のピクセル単位の幅と高さを返します。テキスト端末の場合、結果はピクセルではなく文字数で表されます。
これらの関数は、frame の外側の幅と高さをピクセル単位で返します。
これらの関数は、frame のネイティブの幅と高さをピクセル単位で返します。
これらの関数は、frame の内側の幅と高さをピクセル単位で返します。
これらの関数は、frame のテキストエリアの幅と高さをピクセル単位で返します。
対応しているウィンドウシステムでは、Emacsはデフォルトで、ピクセル単位で指定されるフレームのテキストサイズを、フレームの文字サイズの倍数にするよう試みます。しかし、これは通常、フレームの外枠をドラッグしてサイズを変更する際、文字サイズ単位でしか変更できないことを意味します。また、フレームを真に最大化しようとしたり、「fullheight」や「fullwidth」に設定したりしようとした場合に不具合が生じ(サイズパラメータを参照)、フレームの下側や右側に空白が残ることがあります。そのような場合には、以下のオプションが役立つ可能性があります。
このオプションが nil(デフォルト)の場合、フレームのサイズ変更が行われるたびに、通常はそのフレームのテキストピクセルサイズが、当該フレームの
frame-char-height および frame-char-width の現在の値の倍数に丸められます。これが nil 以外の場合は丸め処理が行われないため、フレームサイズが1ピクセル単位で増減することがあります。
この変数を設定すると、通常、次回のリサイズ操作時に対応するサイズヒントがウィンドウマネージャに渡されます。つまり、この変数はユーザーの初期ファイル内でのみ設定すべきであり、アプリケーションが一時的にバインドしてはなりません。
このオプションにおける nil
の値の正確な意味は、使用されるツールキットによって異なります。ウィンドウマネージャが対応するサイズヒントを処理できる場合、マウスによる外側境界のドラッグは文字単位で行われます。ただし、フレームサイズを文字サイズの整数倍として指定しない引数で
set-frame-size(後述)を呼び出した場合、無視されたり、丸め処理が行われたり(GTK+)、あるいは受理されたり(Lucid,
Motif, MS-Windows)することがあります。
ウィンドウマネージャによっては、フレームを真に最大化またはフルスクリーンで表示させるために、これを non-nil に設定する必要がある場合があります。
この関数は、frame における文字の正準高さおよび幅を基準として、frame のテキスト領域のサイズを設定します(フレームフォントを参照)。
オプション引数 pixelwise non-nil
を指定すると、代わりに新しい幅と高さをピクセル単位で計測します。なお、frame-resize-pixelwise が nil
である場合、フレームサイズを文字サイズの倍数に増減させない限り、一部のツールキットではリクエストに正しく応じない可能性がある点にご注意ください。
この関数は、frameのテキスト領域の高さをheight行にリサイズします。frameにある既存ウィンドウのサイズは、収まるように比例的に調整されます。
pretend が nil でない場合、Emacs は
frame に height
行の出力を表示しますが、フレームの実際の高さの値は変更しません。これはテキスト端末においてのみ有用です。端末が実際に実装している高さよりも小さい値を指定することは、小型画面で観察された動作を再現する場合や、端末が全画面表示時に正常に動作しない場合に有用です。フレームの高さを直接設定しても必ずしもうまくいくとは限りません。テキスト端末でカーソルを正しく配置するには、正確な実際のサイズを把握する必要がある場合があるためです。
オプションの第4引数 pixelwise が non-nil である場合、frame の高さは height ピクセルである必要があります。なお、frame-resize-pixelwise が nil
である場合、フレームの高さを文字高さの倍数に増減させない限り、一部のウィンドウマネージャはこの要求に正しく応じない可能性があることに注意してください。
対話的に使用した場合、このコマンドは現在選択されているフレームの高さを設定するための行数をユーザーに求めます。また、この値を数値プレフィックス付きで指定することも可能です。
この関数は、frame のテキストエリアの幅を文字数単位で設定します。引数 pretend は set-frame-height
と同様の意味を持ちます。
オプションの第4引数 pixelwise が non-nil である場合、frame の幅は width ピクセルである必要があります。なお、frame-resize-pixelwise が nil
である場合、フレーム幅を文字幅の倍数に増減させない限り、一部のウィンドウマネージャではこの要求を完全には反映しない可能性があることに注意してください。
対話的に使用した場合、このコマンドは現在選択されているフレームの幅を設定する列数をユーザーに求めます。また、この値を数値プレフィックス付きで指定することも可能です。
これら3つの関数のいずれも、フレームのすべてのウィンドウを、スクロールバー、フリンジ、マージン、区切り線、モード行およびヘッダー行とともに表示するために必要なサイズより小さくすることはありません。これは、例えばマウスでフレームの外枠をドラッグした際にトリガーされるウィンドウマネージャからの要求とは対照的です。こうした要求に対しては、必要に応じてフレームの右下隅に表示できない部分をクリップすることで、常に対応されます。Emacs内部からフレームサイズを変更する際に同様の動作を実現するには、パラメータ
min-width および min-height(サイズパラメータを参照)を使用できます。
フレームが全画面状態(サイズパラメータを参照)にあるとき、これらの関数のいずれかを用いてフレームサイズの変更を要求した場合、その処理はEmacs自身またはウィンドウマネージャによって許可されるか、あるいは拒否されることがあります。以下の変数を使用することで、結果として生じる動作をより詳細に制御できます。
このオプションは、フルスクリーンフレームの変更リクエストの処理方法を制御します。Emacsは、set-frame-size などの関数を介してフルスクリーンフレームのサイズ変更を求められた際や、フレームの
width または height
パラメータを設定する際に、このオプションを参照します。以下の値が指定可能です:
nilこれにより、リサイズリクエストがウィンドウマネージャに転送され、その後の処理はウィンドウマネージャに委ねられます。
tまずフルスクリーン状態をリセットし、その後、リサイズリクエストをウィンドウマネージャに転送します。
inhibitこれによりリサイズリクエストが拒否され、フルスクリーン状態は変更されません。
デフォルトは、NSビルドではinhibit、それ以外ではnilです。
この関数は、frame の新しいサイズと位置を一度の操作で設定します。frame にはデフォルトで選択中のフレームが指定されます。サイズと位置は、対応するフレームパラメータ width、height、left、および top と同様に指定します(サイズパラメータ および 位置パラメータ を参照)。これら4つの引数のいずれか、または nil が省略された場合は、frame
の対応するパラメータを変更しないことを意味します。
この関数は、set-frame-size-and-positionと同様にフレームの新しいサイズと位置を設定しますが、単位はピクセルです。オプション引数
gravity は frame の新しいグラビティを指定するもので、0から10までの値である必要があります。デフォルト値は1です。グラビティはウィンドウシステムに依存し、概念的には、フレームまたはその親フレームのサイズが変更された際に、フレームのどの角が親フレームに対する相対位置を維持するかを決定します。(トップレベルフレームには親フレームが存在せず、この点に関してはウィンドウシステムのルートウィンドウが親とみなされます。)値1はNorthWestグラビティを指定し、フレームの左上隅が相対位置を維持することを意味します。多くのウィンドウマネージャはグラビティを無視するようです。
異常フック window-size-change-functions(ウィンドウのスクロールおよび変更用フックを参照)は、ウィンドウシステムやウィンドウマネージャの要求によって生じるものを含め、フレームの内部サイズのあらゆる変更を追跡します。内部フレームのサイズを実際に変更することなく、フレームのウィンドウサイズのみを変更した際に発生しうる誤検知を排除するには、以下の関数を使用してください。
この関数は、frameに対して前回window-size-change-functionsが実行されて以来、frameの内側の幅または高さが変化した場合に、nil以外の値を返します。frameに対してwindow-size-change-functionsを実行した直後には、常にnilを返します。