Next: Line Height, Previous: Overlays, Up: Display [Contents][Index]
すべての文字が同じ幅をもつ訳ではありませんが、以下の関数により文字の幅をチェックできます。関連する関数についてはPrimitive IndentとScreen Linesを参照してください。
この関数は文字charがカレントバッファーに表示された場合(つまりそのバッファーのディスプレイテーブルがあれば考慮に入れる。Display Tablesを参照)の幅を列数でリターンする。タブ文字の幅、通常はtab-width
(Usual Displayを参照)。
この関数は文字列stringがカレントバッファーおよび選択されたウィンドウに表示された場合の幅を列数でリターンする。
この関数はwidth列を満たすstringの一部を新たな文字列としてリターンする。
stringがwidthに満たなければ、結果の終端はstringの終端となる。string内の複数列文字が列widthを超過する場合には、その文字は結果に含まれない。つまり結果がwidthより短くなりことはあり得るが、超過することはない。
オプション引数start-columnは開始列を指定する。これが非nil
なら、その文字列の最初のstart-column列は値から省かれる。string内の1つの複数列文字が列start-columnを超えて跨がるようなら、その文字は結果に含まれない。
オプション引数paddingが非nil
なら、結果となる文字列の幅を正確にwidth列に拡張するためにパディング文字が追加される。結果がwidthより短ければ、widthに達するまで必要なだけ結果の終端にパディング文字が追加される。string内の複数列文字が列start-columnを超える場合には、結果の先頭にもパディング文字が追加される。
ellipsisが非nil
なら、それがwidthを超える場合には(パディングすべてを含む)stringの終端置き換える文字列であること(ただしstringの表示幅がellipsisの表示幅より大きい場合)。ellipsisが非nil
かつ文字列以外なら、それは変数truncate-string-ellipsis
の値を意味する。
(truncate-string-to-width "\tab\t" 12 4) ⇒ "ab" (truncate-string-to-width "\tab\t" 12 4 ?\s) ⇒ " ab "
以下の関数は与えられたウィンドウにあるテキストを表示したときのサイズをピクセル単位でリターンします。この関数はテキストを含むためにウィンドウを十分大きくするためにfit-window-to-buffer
とfit-frame-to-buffer
(Resizing Windowsを参照)により使用されます。
この関数はwindowのバッファーのテキストサイズをピクセル単位でリターンする。windowは生きたウィンドウでなければならずデフォルトは選択されたウィンドウ。リターン値は任意のテキスト行の最大ピクセル幅と、すべてのテキスト行の最大ピクセル高さのコンス。この関数はバッファーテキストの表示に要するwindowサイズを、Lispプログラムが調整できるようにするために存在する。
オプション引数fromが非nil
なら、それは考慮すべき最初のテキスト位置を指定する。デフォルトはそのバッファーのアクセス可能な最小の位置。fromがt
なら、改行文字ではないアクセス可能な最小位置を意味する。オプション引数toが非nil
なら、それは考慮すべき最後のテキスト位置を指定する。デフォルトはそのバッファーのアクセス可能な最大の位置。toがt
なら、改行文字ではないアクセス可能な最大位置を意味する。
オプション引数x-limitが非nil
なら、その位置を超えるテキストを指定するような最大X座標を指定する。したがってこれはこの関数がリターンし得る最大のピクセル幅でもある。x-limitがnil
または省略なら、windowのbody(Window Sizesを参照)のピクセル幅を使用することを意味する。このデフォルト値はウィンドウより永井切り詰められた行のテキストは無視されることを意味する。このデフォルト値はは呼び出し側がwindowの幅の変更を意図しない場合に有用。それ以外なら呼び出し側はここで想定されるwindowのbodyの最大幅を指定すること。特に行の切り詰めが予想される場合に、それらの行のテキストを勘定に入れる必要があるなら、x-limitを大きな値にセットする必要がある。長い行の幅の計算にはいくらかの時間を要するかもしれないので、必要に応じてこの変数を小さくするのはよいアイデアである。これはいずれにせよ切り詰められるような長い行をバッファーが含む場合が特に該当する。
オプション引数y-limitが非nil
なら、その値を超えるテキストは無視されるような最大Y座標を指定する。したがってこれは関数がリターンし得る最大のピクセル高さでもある。y-limitがnilか省略なら、toで指定したバッファー位置までのすべてのテキスト行を考慮することを意味する。大きなバッファーのピクセル高さの計算には多くの時間を要する可能性があるので、特に呼び出し側がバッファーのサイズを知らない場合におけるこの変数の指定は合理的である。
オプション引数mode-and-header-lineがnil
または省略された場合には、リターン値にwindowのモードラインとヘッダーラインの高さを含めないことを意味する。これがシンボルmode-line
かheader-line
のいずれかなら、それらが存在する場合にはリターン値にそのラインの高さだけを含める。これがt
なら存在する場合は両方の高さをリターン値に含める。
window-text-pixel-size
はウィンドウ内に表示されているテキスト全体を扱い、個々の行サイズには留意しません。それは以下の関数が行います。
この関数は指定したwindowに表示された各行のピクセルサイズを計算する。これはwindowのカレントグリフマトリクス( windowにカレントで表示されている各バッファー文字のグリフを格納するマトリクス。Glyphsを参照)を調べることにより機能する。成功したら各行末文字の右下隅のX座標とY座標を表すコンスペアのリストをリターンする。これらの座標はwindowの左上隅にある原点(0, 0)からピクセル単位で計測される。windowは生きたウィンドウでなければならずデフォルトは選択されたウィンドウ。
オプション引数firstが整数なら、リターンするwindowのグリフマトリクスの最初の行のインデックス(0から開始)を示す。windowにヘッダーラインがあればインデックス0の行はヘッダーラインになることに注意。firstがnil
なら考慮する最初の行はオプション引数bodyの値で判断される。bodyが非nil
なら、(もしあれば)ヘッダーラインをすべてスキップしてwindowのbodyの最初の行から開始することを意味する。それ以外ならwindowのグリフマトリクスの最初の行(ヘッダーラインかもしれない)から開始することを意味する。
オプション引数lastが整数なら、リターンするwindowのグリフマトリクスの最後の行のインデックスを示す。lastがnil
なら考慮する最初の行はオプション引数bodyの値で判断される。bodyが非nil
なら、windowのモードラインを省略してwindowのbodyの最後の行を使用することを意味する。それ以外ならwindowのグリフマトリクスの最後の行(モードラインかもしれない)を使用することを意味する。
オプション引数inverseがnil
なら、リターンされる任意の行にたいするYピクセル値がwindowの左エッジ(bodyが非nil
なら左bodyエッジ)から、その行の最後のグリフの右エッジまでのピクセル単位の距離を指定することを意味する。非nil
のinverseは、リターンされる任意の行にたいするYピクセル値がその行の最後のグリフの右エッジから右エッジ(bodyが非nil
なら右bodyエッジ)までのピクセル単位の距離を指定することを意味する。これは各行末の未使用スペースの量を判断するために有用。
オプション引数leftが非nil
なら各行左端文字の左下隅のX座標とY座標をリターンすることを意味する。これは主に右から左にテキストを表示にたいして使用されるべき値である。
leftが非nil
でinverseがnil
なら、リターンされる任意の行にたいするYピクセル値がその行の最後(左端)のグリフの左エッジから、windowの右エッジ(
bodyが非nil
なら右bodyエッジ)までのピクセル単位の距離を指定することを意味する。leftとinverseがいずれも非nil
なら、リターンされる任意の行にたいするYピクセル値がwindowの左エッジ(
bodyが非nil
なら左bodyエッジ)から、その行の最後(左端)のグリフの左エッジまでのピクセル単位の距離を指定することを意味する。
この関数はwindowのカレントグリフマトリクスが最新でなければnil
をリターンする。これはたとえばコマンドの処理中のようにEmacsがbusyな際に通常は発生する。これは遅延が0秒であるようなアイドルタイマーからこの関数が実行された際に取得され得る値である。
この関数は選択されたウィンドウのポイント位置にある行の高さをピクセル単位でリターンする。値にはその行の行スペーシングが含まれる(Line Heightを参照)。
行番号(Display Custom in The GNU Emacs Manualを参照)とともにバッファーを表示している際には、行番号の表示に必要な幅が解ると便利なときがあります。以下はレイアウト計算用にこの情報を必要とするLispプログラムのための関数です。
この関数は選択されたウィンドウで行番号の表示に使用される幅をリターンする。オプション引数pixelwiseがシンボルcolumns
なら、リターン値はフレームの正準列(清純文字幅)にたいする浮動小数点数となる。pixelwiseがt
やそれ以外の非nil
値なら、値はピクセルで計測した整数となる。pixelwiseが省略かnil
なら、値はline-number
フェイスにたいして定義されたフォントによる列数を表す整数となる。この場合には値には番号の表示の間隙を埋めるために使用する2列分は含まれない。選択されたウィンドウに行番号が表示されていなければ、pixelwiseの値にかかわらず値は0になる。別のウィンドウにたいしてこの情報が必要ならwith-selected-window
を使用すること(Selecting Windowsを参照)。