通常、フォントを直接操作する必要はありません。万が一操作が必要な場合に備え、本セクションではその方法を解説します。
Emacs Lispでは、フォントはフォントオブジェクト、フォントスペック、フォントエンティティという3種類の異なるLispオブジェクト型を用いて表現されます。
object がフォントオブジェクト、フォント仕様、またはフォントエンティティである場合は t を返す。それ以外の場合は nil を返す。
オプション引数 type が nil
以外の場合、チェック対象とする Lisp オブジェクトの正確な型が決定されます。その場合、type は
font-object、font-spec、または font-entity
のいずれかである必要があります。
フォントオブジェクトとは、Emacsが開いたフォントを表すLispオブジェクトです。フォントオブジェクトはLisp上で変更することはできませんが、検査することは可能です。
ウィンドウ window の位置 position
にある文字の表示に使用されているフォントオブジェクトを返します。window が nil の場合、デフォルトで選択中のウィンドウが使用されます。string が nil の場合、position は現在のバッファ内の位置を指定します。それ以外の場合、string は文字列である必要があり、position
はその文字列内の位置を指定します。
フォント仕様とは、フォントの検索に使用できる一連の仕様を含むLispオブジェクトです。1つのフォント仕様に対して、複数のフォントが該当する場合があります。
arguments の仕様に基づき、property-value
のペアで構成される新しいフォント仕様を返してください。指定可能な仕様は以下の通りです。
:nameフォント名(文字列)。XLFD、Fontconfig、またはGTK+のいずれかの形式。The GNU Emacs ManualのFontsを参照してください。
:family:foundry:weight:slant:widthこれらは、同名のフェイス属性と同じ意味を持ちます。フェイス属性を参照してください。:family と :foundry
は文字列またはシンボルであり、他の3つはシンボルまたは数値(有効なスタイルシンボルの数値)です。値の例として、:slant は italic、:weight は bold、:width は normal となる場合があります。
:sizeフォントサイズ—ピクセルサイズを指定する非負整数、またはポイントサイズを指定する浮動小数点数。
:adstyle‘sans’ など、フォントに関する追加のタイポグラフィスタイル情報。値は文字列またはシンボルである必要があります。
:registry ¶文字セットレジストリおよびフォントのエンコーディング(例:‘iso8859-1’)。値は文字列またはシンボルである必要があります。
:dpiフォントの設計解像度(dpi)。値は0以上の数値である必要があります。
:spacingフォントの間隔:proportional、dual、mono、またはcharcell。値は、整数(proportionalの場合は0、dualの場合は90、monoの場合は100、charcellの場合は110)、または1文字の記号(P、D、M、Cのいずれか)とします。
:avgwidthフォントの平均幅(1/10ピクセル単位)。値は0以上の数値である必要があります。
:scriptフォントが対応すべきスクリプト(記号)。
:langフォントがサポートすべき言語。値は、2文字のISO-639言語名を持つシンボルである必要があります。Xでは、値が空でない場合、フォントのXLFD名の「Additional Style」フィールドと照合されます。MS-Windowsでは、仕様に一致するフォントは、その言語に必要なコードページをサポートする必要があります。現在、このプロパティでサポートされているCJK言語は、‘ja’、‘ko’、および‘zh’のごく一部のみです。
:otf ¶フォントは、これらのOpenType機能をサポートするOpenTypeフォントである必要があります。ただし、GNU/Linux上の‘libotf’のように、それを必要とするスクリプト向けの複雑なテキストレイアウトをサポートするライブラリを用いてEmacsがコンパイルされていることが条件となります。値は、以下の形式のリストである必要があります。
(script-tag langsys-tag gsub gpos)
ここで、script-tag は OpenType スクリプトタグ記号、langsys-tag は OpenType 言語システムタグ記号(またはデフォルトの言語システムを使用する場合は
nil)、gsub は OpenType
GSUB フィーチャータグ記号のリスト(いずれも不要な場合は nil)、gpos は OpenType GPOS フィーチャータグ記号のリスト(いずれも不要な場合は nil)です。gsub または gpos がリストである場合、そのリスト内の nil
要素は、そのフォントが残りのタグ記号のいずれにも一致してはならないことを意味します。gpos
要素は省略可能です。OpenType スクリプト、言語、およびフィーチャータグの一覧については、登録済み
OTF タグの一覧を参照してください。
:type ¶文字の描画に使用するフォントバックエンドを指定するシンボルです。取り得る値は、プラットフォームやビルド時のEmacsの設定によって異なります。代表的な値としては、Xではftcrhbやxfthb、MS-Windowsではharfbuzz、GNUstepではnsなどが挙げられます。また、通常はfont-specにおいて指定しない場合、nilとなることもあります。
font-spec font-spec のフォントプロパティ property を value に設定します。property には、上述のいずれかを指定できます。
フォントエンティティとは、必ずしもオープンされている必要のないフォントへの参照のことです。そのプロパティは、フォントオブジェクトとフォントスペックの中間的な性質を持ちます。フォントオブジェクトと同様に、フォントスペックとは異なり、単一の特定のフォントを参照します。フォントオブジェクトとは異なり、フォントエンティティを作成しても、そのフォントの内容がコンピュータのメモリにロードされることはありません。Emacsは、スケーラブルフォントを参照する単一のフォントエンティティから、異なるサイズの複数のフォントオブジェクトをオープンすることがあります。
この関数は、フレーム frame 上のフォント仕様 font-spec に最も合致するフォントエンティティを返します。frame が nil
の場合は、選択されたフレームがデフォルトとなります。
この関数は、フォント仕様 font-spec に一致するすべてのフォントエンティティのリストを返します。
オプション引数 frame は、nil
以外の場合、フォントを表示するフレームを指定します。オプション引数 num は、nil 以外の場合、返されるリストの最大長を指定する整数である必要があります。オプション引数 prefer は、nil
以外の場合、返されるリストの順序を制御するための別のフォント指定である必要があります。返されるフォントエンティティは、そのフォント指定への近さが大きい順にソートされます。
set-face-attribute を呼び出し、:font 属性の値としてフォント仕様、フォントエンティティ、またはフォント名文字列を渡すと、Emacs
は表示可能なフォントの中から最も適合するものを開きます。その後、対応するフォントオブジェクトを、そのフェイスにおける :font 属性の実際の値として格納します。
以下の関数を使用して、フォントに関する情報を取得できます。これらの関数では、font 引数にフォントオブジェクト、フォントエンティティ、またはフォントスペックを指定できます。
この関数は、font に対するフォントプロパティ property の値を返します。property には、font-spec がサポートするいずれかの値を指定できます。
font がフォント仕様であり、かつそのフォント仕様で property が指定されていない場合、戻り値は nil
となります。 font がフォントオブジェクトまたはフォントエンティティである場合、:script プロパティの値はそのフォントがサポートするスクリプトのリストとなる可能性があり、:otf プロパティの値は (gsub . gpos)
という形式のコンスとなります。ここで gsub と gpos
は、そのフォントがサポートする OpenType フィーチャーを表すリストであり、次のような形式となります。
((script-tag (langsys-tag feature...) ...) ...)
ここで、script-tag、langsys-tag、featureはOpenTypeレイアウトタグを表す記号です。
font がフォントオブジェクトである場合、font
のフォントバックエンドが非 OpenType フォントの結合文字のレンダリングをサポートしていれば、特殊プロパティ :combining-capability は non-nil となります。
この関数は、font に対応する面属性のリストを返します。オプション引数 frame は、フォントを表示するフレームを指定します。nil
の場合は、選択されたフレームが使用されます。戻り値は以下の形式となります。
(:family family :height height :weight weight :slant slant :width width)
ここで、family、height、weight、slant、およびwidthの値は面属性値です。これらのキー・属性ペアの中には、fontで指定されていない場合、リストから省略されるものがあります。
この関数は、font に対応する文字列である XLFD (X Logical Font Descriptor) を返します。XLFD に関する情報については、The GNU Emacs Manual の Fonts を参照してください。
オプション引数 fold-wildcards が nil 以外の場合、XLFD 内の連続するワイルドカードは1つにまとめられます。
オプション引数 long-xlfds が省略されているか、あるいは nil である場合、XLFD の長さが 255 文字を超えるときは関数は nil を返します。これは、XLFD の長さをその制限内に収めることを規定している X
プロトコルとの互換性を確保するためです。long-xlfds が nil 以外である場合、この制限は解除され、関数は任意の長さの XLFD を返すことができます。
以下の2つの関数は、フォントに関する重要な情報を返します。
この関数は、frame で使用される文字列 name
で指定されたフォントに関する情報を返します。frame が省略されているか、または nil が指定されている場合は、選択されたフレームがデフォルトとなります。
関数が返す値は、[opened-name full-name size height baseline-offset relative-compose default-ascent
max-width ascent descent space-width average-width filename capability] という形式のベクトルです。このベクトルの各成分の説明は以下の通りです。
フォントを開く際に使用した名前(文字列)。
フォントの正式名称(文字列)。
フォントのピクセルサイズ。
フォントの高さ(ピクセル)。
ASCIIベースラインからのピクセル単位のオフセット(上方向が正)。
文字の構成を制御する数値。
フォントの最大前進幅。
このフォントのアセントとディセント。これら2つの数値の和は、上記のheightの値と等しくなるはずです。
フォントのスペース文字の幅(ピクセル単位)。
フォント文字の平均幅。Emacsはこれを用いてディスプレイ上のテキストレイアウトを計算します。average-width の値が 0 の場合、Emacs は代わりに space-width の値をこれらの目的で使用します。
フォントのファイル名を文字列で指定します。フォントバックエンドがファイル名を取得する手段を提供していない場合は、nil とすることができます。
最初の要素が、x、opentype、truetype、type1、pcf、またはbdfのいずれかのフォントタイプを表すシンボルであるリスト。OpenTypeフォントの場合、このリストには、そのフォントがサポートするGSUBおよびGPOSフィーチャーを記述する2つの追加要素が含まれます。これらの要素はそれぞれ((script (langsys
feature …) …)
…)形式のリストであり、ここでscriptはOpenTypeスクリプトタグを表すシンボル、langsysはOpenType langsysタグ(またはデフォルトのlangsysを表すnil)を表すシンボル、そして各featureはOpenTypeフィーチャータグを表すシンボルです。
この関数はfont-objectに関する情報を返します。(これは、フォント名である文字列を引数として受け取るfont-infoとは対照的です。)
関数が返す値は、[name filename pixel-size max-width ascent descent space-width average-width capability]
という形式のベクトルです。このベクトルの各成分の説明は以下の通りです。
フォント名(文字列)。
フォントのファイル名を文字列で指定します。フォントバックエンドがファイル名を取得する手段を提供していない場合は、nil とすることができます。
フォントを開く際に使用されるフォントのピクセルサイズ。
フォントの最大前進幅。
このフォントのアセントとディセント。これら2つの数値の合計がフォントの高さとなります。
フォントのスペース文字の幅(ピクセル単位)。
フォント文字の平均幅。これが0の場合、Emacsはディスプレイ上のテキストレイアウトを計算する際に、代わりにspace-widthの値を使用します。
最初の要素が、x、opentype、truetype、type1、pcf、またはbdfのいずれかのフォントタイプを表すシンボルであるリスト。OpenTypeフォントの場合、このリストには、そのフォントがサポートするGSUBおよびGPOSフィーチャーを記述する2つの追加要素が含まれます。これらの要素はそれぞれ((script (langsys
feature …) …)
…)形式のリストであり、ここでscriptはOpenTypeスクリプトタグを表すシンボル、langsysはOpenType langsysタグ(またはデフォルトのlangsysを表すnil)を表すシンボル、そして各featureはOpenTypeフィーチャータグを表すシンボルです。
以下の4つの関数は、さまざまなフェイスで使用されるフォントのサイズ情報を返し、Lispプログラムにおけるさまざまなレイアウト上の考慮を可能にします。これらの関数はフェイスのリマッピングを考慮しており、対象のフェイスがリマッピングされている場合には、リマッピング後のフェイスに関する情報を返します。フェイスのリマッピングを参照してください。
この関数は、選択中のフレームで定義されている現在のバッファのデフォルトフェイスで使用されているフォントの平均幅をピクセル単位で返します。
この関数は、選択中のフレームで定義されている現在のバッファのデフォルトフェイスで使用されるフォントの高さをピクセル単位で返します。
この関数は、window で使用されている face
のフォントの平均幅をピクセル単位で返します。指定された window
はライブウィンドウである必要があります。nil が指定されているか、あるいは省略された場合、window には選択中のウィンドウが、face には window のデフォルトフェイスがそれぞれ設定されます。
この関数は、window で使用されている face
のフォントの高さをピクセル単位で返します。指定された window
はライブウィンドウである必要があります。nil が指定されているか、あるいは省略された場合、window には選択中のウィンドウが、face には window のデフォルトのフェイスがそれぞれ設定されます。