フォントセット(fontset)とは、それぞれが文字コードの範囲に割り当てられるフォントのリストのことです。個々のフォントではEmacsがサポートする文字の全範囲を表示できませんが、フォントセットであれば表示することができます。フォントのようにフォントセットは名前をもつことができ、フレームやフェイスにたいしてフォントを指定する際に、フォント名としてフォントセット名を使用できます。以下はLispプログラム制御下でのフォントセット定義に関する情報です。
この関数は仕様文字列fontset-specに応じて新たなフォントセットを定義する。この文字列は以下のような形式であること:
fontpattern, [charset:font]...
カンマの前後の空白文字は無視される。
この文字列の最初の部分fontpatternは、最後の2つのフィールドが‘fontset-alias’であることを除外して標準Xフォント名形式をもつこと。
新たなフォントセットはlong名とshort名という2つの名前をもつ。long名はそれ全体がfontpattern、short名は‘fontset-alias’。いずれの名前でもこのフォントセットを参照できる。同じ名前がすでに存在するフォントセットではnoerrorがnil
ならエラーがシグナルされ、noerrorが非nil
ならこの関数は何も行わない。
オプション引数style-variant-pが非nil
なら、そのフォントセットのbold、italic、およびbold-italicも同様に作成するよう指示する。これらの変種フォントセットはshort名をもたずbold、および/またはitalicを示すようにfontpatternを変更して作成したlong名だけをもつ。
仕様文字列はそのフォントセット内でどのフォントを使用するかも宣言する。詳細は以下を参照。
構文‘charset:font’はある特定の文字セットにたいして、(このフォントセット内の)どのフォントを使用するかを指定します。ここでcharsetは文字セットの名前、fontはその文字セットにたいして使用するフォントです。仕様文字列内ではこの構文を任意の回数使用できます。
明示的に指定しなかった残りの文字セットにたいして、Emacsはfontpatternにもとづいてフォントを選択します。これは‘fontset-alias’をその文字セットを命名する値に置き換えます。文字セットASCIIにたいしては、‘fontset-alias’は‘ISO8859-1’に置き換えられます。
加えて後続の複数フィールドがワイルドカードなら、Emacsはそれらを1つのワイルドカードにまとめます。これは自動スケールフォント(auto-scaled fonts)の使用を防ぐためです。フォントを大きくスケーリングすることにより作成されたフォントは編集に使用できず、小さくスケーリングされたフォントは、それ自身のサイズがより小さいフォントを使用する(Emacsが行う方法)ほうがよいので有用ではありません。
つまり以下のようなfontpatternなら
-*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24
ASCIIにたいするフォントspecは以下のようになるでしょう:
-*-fixed-medium-r-normal-*-24-*-ISO8859-1
またChinese GB2312文字にたいするフォントspecは以下のようになるでしょう:
-*-fixed-medium-r-normal-*-24-*-gb2312*-*
上記のフォントspecにマッチするChineseフォントをもっていないかもしれません。ほとんどのXディストリビューションには、familyフィールドに‘song ti’か‘fangsong ti’をもつChineseフォントだけが含まれます。そのような場合には以下のように‘Fontset-n’を指定できます:
Emacs.Fontset-0: -*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24,\ chinese-gb2312:-*-*-medium-r-normal-*-24-*-gb2312*-*
この場合にはChinese GB2312以外のすべての文にたいするフォントspecはfamilyフィールドに‘fixed’をもち、Chinese GB2312にたいするフォントspecはfamilyフィールドにワイルドカード‘*’をもちます。
この関数は指定されたcharactersにたいして、font-specのフォントマッチングを使用するように既存のフォントセットfontsetを変更する。
fontsetがnil
ならこの関数はframeのフォントセット、frameがnil
なら選択されたフレームのフォントセットを変更する。
fontsetがt
ならこの関数はshort名が‘fontset-default’であるようなデフォルトフォントセットを変更する。
characters引数はfont-specを使って表示すべき単一の文字を指定する。fromとtoが文字であるようなコンスセル(from . to)
でもよい。この場合には範囲fromからto
(両端を含む)までのすべての文字にたいしてfont-specを使用する。
charactersには文字セット(文字セットを参照)も指定できる。この場合には、その文字セット内のすべての文字にたいしてfont-specを使用する。
charactersにはスクリプト名(char-script-tableを参照)も指定できる。この場合にはスクリプトに属するすべての文字にたいしてfont-specを使用する。charactersがsymbol
スクリプト(シンボルおよび句読点文字を含む)を指定したいそれに属する場合にフォント選択に及ぼす効果については、use-default-font-for-symbols
も参照のこと。
charactersにはnil
も指定できる。この場合にはフォント仕様が指定されていないすべての文字にfont-specを使用する。
font-specは関数font-spec
が作成したfont-specオブジェクトかもしれない(低レベルのフォント表現を参照)。
font-specにはコンスセル(family
.
registry)
を指定できる。ここでfamilyはフォントのファミリー名(先頭にfoundry名が含まれるかもしれない)、registryはフォントのレジストリー名(末尾にエンコーディング名が含まれるかもしれない)。
font-specにはフォント名(文字列)も指定できる。
font-specには、指定されたcharactersにたいするフォントが存在しないことを明示的に指定するnil
を指定できる。これはたとえばUnicodeのPUA(Private
Use Area)由来のようなグリフをもたない文字のフォントにたいするシステムワイドの高価な検索を避けるために有用。
オプション引数addが非nil
なら、以前charactersにセットされたフォントspecにfont-specを追加する方法を指定する。prepend
ならfont-specは既存specの先頭、append
ならfont-specは末尾に追加される。デフォルトではfont-specは以前のセットされたfontspecをオーバーライドする。
たとえば以下は文字セットjapanese-jisx0208
に属するすえての文字にたいして、ファミリー名が‘Kochi
Gothic’であるようなフォントを使用するようにデフォルトフォントセットを変更する。
(set-fontset-font t 'japanese-jisx0208 (font-spec :family "Kochi Gothic"))
この関数は普通はユーザーのinitファイルから呼び出されるべきであり、より一般的にはEmacsのカレントセッション何らかのcharactersが表示される前に呼び出す必要がある。一部の言語スクリプトでは表示前に文字の表示方法をキャッシュすることがあり、キャッシュされる情報には文字が使用するフォントも含まれている。これらの文字が一度表示されると、そのフォントセットの変更とは関係なくキャッシュされたフォントが使用され続けるだろう。
この関数はEmacsがcharを表示できるようなら非nil
をリターンする。またはより正確には選択されたフレームのフォントセットが、charが属する文字セットを表示するためのフォントをもてばt
をリターンする。
フォントセットは文字単位でフォントを指定できる。フォントセットがこれを行う場合には、この関数の値は正確ではないかもしれない。
この関数はテキスト端末用のコーディングシステムがその文字をエンコード可能かどうかもチェックするので、利用可能なフォントがなくても非nil
をリターンするかもしれない(端末I/Oのエンコーディングを参照)。