Emacs内からフレームサイズ(size of a frame)を指定する正規の方法はテキストサイズ(text size)の指定による方法です(フレームのテキストエリアの幅と高さの組み合わせ。フレームのレイアウトを参照)。これはピクセルやフレームの標準の文字サイズ(フレームのフォントを参照)で計ることができます。
インターナルメニューやインターナルツールバーのあるフレームでは実際にフレームが描画されるまでフレームのネイティブ高さを告げることはできません。一般的にこれはフレームの初期サイズの指定にネイティブサイズを使用できないことを意味しています。可視フレームのネイティブフレームが解り次第、frame-geometry
のリターン値から残りのコンポーネントを追加してアウターサイズ(フレームのレイアウトを参照)を計算できます。しかし不可視のフレームやまだ作成されていないフレームにたいするアウターサイズは推定しかできません。これはスクリーンの右エッジや下エッジからのオフセットの指定ではフレームの正確な初期位置を計算することが不可能であることも意味しています(フレームの位置を参照)。
フレームのテキストサイズはフレームパラメーターheight
とwidth
を使用してセットや取得が可能です(サイズのパラメーターを参照)。初期フレームのテキストサイズはX様式のジオメトリー仕様でもセットや取得が可能です。Command Line Arguments for Emacs Invocation in The GNU
Emacs
Manualを参照してください。以下に既存で可視なフレーム(デフォルトは選択されたフレーム)のサイズにたいしてセットやアクセスを行う関数をいくつかリストします。
これらの関数はframeのテキストエリアの高さと幅を、frameのデフォルトフォントの高さと幅を単位に計測してリターンする。これらの関数は単に(frame-parameter
frame 'height)
と(frame-parameter frame 'width)
を略記したもの。
ピクセルで計測したframeのテキストエリアがデフォルトフォントサイズの倍数でなければ、これらの関数がリターンする値はテキストエリアに完全に収まるデフォルトフォントの文字数に切り捨てられる。
以下の関数は与えられたフレームのネイティブフレーム、アウターフレーム、インナーフレーム、テキストエリアのピクセル幅とピクセル高さをリターンします(フレームのレイアウトを参照)。テキスト端末では結果はピクセルではなく文字単位になります。
これらの関数はframeのアウター幅やアウター高さをピクセル単位でリターンする。
これらの関数はframeのネイティブ幅やネイティブ高さをピクセル単位でリターンする。
これらの関数はframeのインナー幅やインナー高さをピクセル単位でリターンする。
これらの関数はframeのテキストエリアの幅や高さをピクセル単位でリターンする。
ウィンドウシステムがサポートしていれば、Emacsはデフォルトでフレームのピクセル単位でのテキストサイズをフレームの文字サイズの倍数にしようと試みます。しかし通常これはエクスターナルボーダーのドラッグ時にフレームが文字サイズの増減だけでリサイズできることを意味しています。さらにこれはフレームの下および/または右に空のスペースが残ることにより、フレームを最大化したり“fullheight”や“fullwidth”にする試みを阻害するかもしれません。このような場合には以下のオプションが助けになるでしょう。
このオプションがnil
(デフォルト)ならフレームのテキストのピクセルサイズは、フレームのリサイズの際に通常はframe-char-height
とframe-char-width
のカレント値の倍数に丸められる。非nil
なら丸めは行われず、フレームのサイズはピクセル単位で増加/減少が可能になる。
この変数をセットすることにより次回のリサイズ処理では、通常はウィンドウマネージャーにこれに相当するサイズのヒントを渡す。これはユーザーの初期ファイル内でのみこの変数をセットすべきで、アプリケーションが一時的にこれをバインドすべきではないことを意味する。
このオプションにたいしてnil
値がもつ正確な意味は使用されるツールキットに依存する。マウスによるエクスターナルボーダーのドラッグは、ウィンドウマネージャーが対応するサイズヒントを処理する意思があれば文字単位で行われる。文字サイズの整数倍ではないフレームサイズを引数としてset-frame-size
(以下参照)を呼び出すと、もしかしたら丸められたり(GTK+)、あるいは受容される(Lucid、Motif、MS-Windows)かもしれない。
いくつかのウィンドウマネージャーでは、フレームを本当に最大化や全画面で表示させるために、これを非nil
にセットする必要があるかもしれない。
この関数はframeのテキストエリアのサイズを、frameの文字の正準高さと正準幅で計測した単位でセトする(フレームのフォントを参照)。
オプション引数pixelwiseが非nil
なら、かわりにピクセル単位で新たな幅と高さを測ることを意味する。frame-resize-pixelwise
がnil
の場合には、それが文字の整数倍でフレームサイズを増加あるいは減少させないなら、この要求を完全にはしたがわずに拒絶するツールキットがいくつかあることに注意。
この関数はframeのテキストエリアをheight行の高さにリサイズする。frame内の既存ウィンドウのサイズはフレームにフィットするよう比例して変更される。
pretendが非nil
なら、Emacsはframe内でheight行の出力を表示するが、そのフレームの実際の高さにたいする値は変更しない。これはテキスト端末上でのみ有用。端末が実際に実装するより小さい高さの使用は、より小さいスクリーン上での振る舞いの再現したり、スクリーン全体を使用時の端末の誤動作を観察するとき有用かもしれない。フレームの高さの直接セットは常に機能するとは限らない。なぜならテキスト端末上でのカーソルを正しく配置するために、正確な実サイズを知る必要があるかもしれないからである。
オプションの第4引数pixelwiseが非nil
なら、それはframeの高さがheightピクセル高くなることを意味する。frame-resize-pixelwise
がnil
の場合、それが文字の整数倍でフレームサイズを増加あるいは減少させないなら、この要求に完全にはしたがわずに拒絶するウィンドウマネージャーがいくつかあることに注意。
インタラクティブにこのコマンドを使用時には、このコマンドはカレントで選択されたフレーム高さをセットするための行数をユーザーに尋ねる。
この関数は文字単位でframeのテキストエリアの幅をセットする。引数pretendはset-frame-height
のときと同じ意味をもつ。
オプションの第4引数pixelwiseが非nil
なら、それはframeの幅がheightピクセル広くなることを意味する。frame-resize-pixelwise
がnil
の場合には、それが文字の整数倍でフレームサイズを増加あるいは減少させないなら、この要求に完全にはしたがわずに拒絶するウィンドウマネージャーがいくつかあることに注意。
インタラクティブにこのコマンドを使用時には、このコマンドはカレントで選択されたフレーム幅をセットするための列数をユーザーに尋ねる。
これらの3つの関数はスクロールバー、フリンジ、マージン、ディバイダー、モードラインやヘッダーラインと一緒にすべてのウィンドウを表示するために必要な最小よりフレームを小さくしません。これはたとえばマウスによるフレームのエクスターナルボーダーのドラッグなどによるウィンドウマネージャーがトリガーとなる要求と対照的です。このような要求は、もし必要なら表示できないフレームの右下隅の部分をクリッピングすることにより常に尊重されます。Emacs内からのフレームサイズの変更時に同様の振る舞いを得るには、パラメーターmin-width
とmin-height
を使用できます(サイズのパラメーターを参照)。
アブノーマルフックwindow-size-change-functions
(ウィンドウのスクロールと変更のためのフックを参照)はウィンドウシステムやウィンドウマネージャーに起因するのもを含む、フレームのインナーサイズの変更のすべてを追跡します。実際にインナーフレームのサイズを変更せずにフレームのウィンドウのサイズだけを変更した際に発生するかもしれない誤検出を除外するために以下の関数を使用できます。
この関数はframeにたいして最後にwindow-size-change-functions
が実行されて以降にframeのインナー幅かインナー高さが変更されていれば非nil
をリターンする。これはframeにたいするwindow-size-change-functions
の実行直後は常にnil
をリターンする。