フォントセットとは、各フォントが文字コードの範囲に割り当てられたフォントの一覧のことです。個々のフォントではEmacsがサポートするすべての文字範囲を表示できませんが、フォントセットであれば可能です。フォントセットにもフォントと同様に名前があり、フレームやフェイスのフォントを指定する際に、フォント名の代わりにフォントセット名を使用できます。以下に、Lispプログラムによる制御でフォントセットを定義する方法について説明します。
この関数は、仕様文字列 fontset-spec に従って新しいフォントセットを定義します。文字列は以下の形式である必要があります:
fontpattern, [charset:font]...
カンマの前後の空白文字は無視されます。
文字列の前半部分 fontpattern は、末尾の2つのフィールドが ‘fontset-alias’ である点を除き、標準的なXフォント名の形式である必要があります。
新しいフォントセットには、長い名前と短い名前の2つがあります。長い名前は全体として fontpattern
です。短い名前は ‘fontset-alias’
です。どちらの名前でもフォントセットを参照できます。同じ名前のフォントセットが既に存在する場合、エラーが通知されます。ただし、noerror が nil
でない場合は、この関数は何も行いません。
オプション引数 style-variant-p が nil
以外の場合、フォントセットの太字、斜体、および太字斜体のバリアントも作成することを指定します。これらのバリアントフォントセットには短い名称はなく、長い名称のみが付与されます。この長い名称は、fontpattern を変更して太字および/または斜体の状態を示すことで生成されます。
仕様文字列には、フォントセットで使用するフォントについても記載されています。詳細は以下をご覧ください。
「charset:font」という構文は、特定の文字セットに対して(このフォントセット内で)どのフォントを使用するかを指定します。ここでは、charsetが文字セットの名前であり、fontがその文字セットに使用するフォントとなります。この構文は、仕様文字列内で何度でも使用できます。
残りの文字セットのうち、明示的に指定しなかったものについては、Emacsはfontpatternに基づいてフォントを選択します。具体的には、‘fontset-alias’をある文字セットを指定する値に置き換えます。ASCII文字セットの場合、‘fontset-alias’は‘ISO8859-1’に置き換えられます。
さらに、連続する複数のフィールドがワイルドカードである場合、Emacsはそれらを単一のワイルドカードにまとめます。これは、自動スケーリングフォントの使用を防ぐためです。大きなフォントをスケーリングして作成されたフォントは編集に使用できず、小さなフォントをスケーリングしても、その小さなフォントを本来のサイズで使用する方が適切であり、Emacsもそのように処理するため、有用ではありません。
したがって、fontpatternがこれであるならば、
-*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24
ASCII文字のフォント指定は次のようになります。
-*-fixed-medium-r-normal-*-24-*-ISO8859-1
そして、中国語GB2312文字のフォント指定は次のようになります。
-*-fixed-medium-r-normal-*-24-*-gb2312*-*
上記のフォント仕様に合致する中国語フォントが用意されていない場合があります。ほとんどのXディストリビューションには、familyフィールドに‘song ti’または‘fangsong ti’を持つ中国語フォントしか含まれていません。このような場合は、‘Fontset-n’を以下のように指定できます。
Emacs.Fontset-0: -*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24,\
chinese-gb2312:-*-*-medium-r-normal-*-24-*-gb2312*-*
また、中国語GB2312文字を除くすべての文字のフォント仕様では、familyフィールドに‘fixed’が指定されており、中国語GB2312文字のフォント仕様では、familyフィールドにワイルドカードの‘*’が指定されています。
この関数は、既存の fontset を修正し、指定された characters の表示に font-spec で指定されたフォントを使用するようにします。
fontset が nil
の場合、この関数は選択されたフレームのフォントセットを変更し、frame が nil でない場合は frame のフォントセットを変更します。
fontset が t
である場合、この関数はデフォルトのフォントセットを変更します。その文字列としての短縮名は ‘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
となる場合があり、これは fontset 内のフォント指定がなされていない文字に対して font-spec を使用することを意味します。
font-spec は、関数 font-spec
によって作成されたフォント仕様オブジェクトである場合があります(低レベルフォント表現 を参照)。
font-spec は cons セル (family . registry)
である場合があり、ここで family
はフォントのファミリー名(先頭にファウンドリ名が含まれる場合がある)、registry
はフォントのレジストリ名(末尾にエンコーディング名が含まれる場合がある)である。
font-spec はフォント名または文字列である場合があります。
font-spec は nil
となる場合があり、これは指定された characters
に対応するフォントが存在しないことを明示的に指定します。これは、例えば Unicode 私用領域 (PUA)
の文字のように、グリフを持たない文字に対してシステム全体でコストの高いフォント検索が行われるのを避ける際に有用です。
オプション引数 add が nil
以外の場合、characters にあらかじめ設定されていたフォント指定に font-spec をどのように追加するかを指定します。prepend の場合は、既存の指定の先頭に font-spec
が追加されます。append の場合は、末尾に font-spec が追加されます。デフォルトでは、font-spec
があらかじめ設定されていたフォント指定を上書きします。
例えば、これによりデフォルトのフォントセットが変更され、文字セット japanese-jisx0208 に属するすべての文字に対して、ファミリー名が ‘Kochi Gothic’ であるフォントが使用されるようになります。
(set-fontset-font t 'japanese-jisx0208
(font-spec :family "Kochi Gothic"))
なお、この関数は原則としてユーザーの初期化ファイルから呼び出すべきであり、より一般的には、現在のEmacsセッションでcharactersのいずれかが表示される前に呼び出すべきです。これは、一部のスクリプトにおいて、Emacsが表示形式をキャッシュしており、そのキャッシュ情報に使用されたフォントが含まれているためです。一度これらの文字が表示されると、フォントセットに変更があっても、キャッシュされたフォントが引き続き使用されます。
この関数は、Emacsがcharを表示できるはずであればnon-nilを返します。より正確には、選択中のフレームのフォントセットに、charが属する文字セットを表示するためのフォントがある場合です。
フォントセットでは文字単位でフォントを指定できます。フォントセットでそのように指定した場合、この関数の値が正確でない可能性があります。
この関数は、テキスト端末の符号化方式がその文字を符号化できるかどうかも確認するため(端末入出力の符号化を参照)、利用可能なフォントがない場合でも
non-nil を返すことがあります。
この関数は(frameに対して)char-displayable-pと同様に動作しますが、グラフィカルな場合には、基盤となるテキスト端末がその文字をエンコードできるかという最終的なチェックは行いません。したがって、frameにより特化したcharの表示可否チェックを提供します。