次: , 前: Standard Faces, 上: Faces


38.10.2 フェイスを定義する

新たなフェイスを定義する方法は、deffaceを使うことです。 これは、カスタマイズバッファ (see 簡便なカスタマイズ方法) を用いてユーザーがカスタマイズできる カスタマイズ項目(see Customization)の一種を作成します。

— マクロ: defface face spec doc [keyword value]...

specに従ったデフォルトを持つカスタマイズ可能なフェイスとして faceを宣言する。 シンボルfaceをクォートしないこと。 引数docは、フェイスの説明文字列を指定する。

deffaceを実行すると、specに従ったフェイスを定義し、 ファイル.emacsから読み取った任意のカスタマイズを specの指定に優先させる。

specの目的は、異なる種類の端末でフェイスがどのような 見た目になるかを指定することである。 (display atts)の形の要素から成る 連想リストであること。 要素のcardisplayは端末の種類を指定する。 cdrattsはフェイスの属性とその値のリストであり、 その種類の端末上でそのフェイスがどのように見えるかを指定する。 可能な属性は、custom-face-attributesの値で定義される。

specの要素のdisplay部分は、要素を適用するフレームを決定する。 specの1つより多くの要素が指定されたフレームに一致する場合、 そのフレームに一致した最初の要素だけを用いる。 displayには2つの可能性がある。

t
specの要素はすべてのフレームで一致する。 したがって、specの以降の要素をけっして使わない。 通常、tspecの最後の(あるいは唯一)の要素に使う。
リスト
displayがリストであると、 各要素は(characteristic value...)の形であること。 ここで、characteristicはフレームの分類方法であり、 valuedisplayを適用すべき分類とみなす値である。 特性characteristicの可能な値はつぎのとおりである。
type
フレームが使用するウィンドウシステムの種類であり、 xpc(MS-DOSのコンソール)、 w32(MS Windows 9X/NT)、ttyのいずれかである。
class
フレームで扱える表示色の種類であり、 colorgrayscalemonoのいずれかである。
background
背景の種類であり、lightdarkのいずれかである。

displayの1つの要素において、 指定されたcharacteristicに 1つより多くのvalueを指定すると、 それらのいずれの値でも受け入れる。 displayに1つより多くの要素がある場合、 各要素は異なるcharacteristicを指定すること。 そうすれば、フレームの特性は displayに指定されたそのフレーム向けの valueの1つに一致するはずである。

標準フェイスregiondeffaceで 定義するとつぎのようになります。

     (defface region
              ((((class color) (background dark))
                (:background "blue"))
               (t (:background "gray")))
       "Used for displaying the region.")

内部的にはdeffaceは、 deffaceに指定されたフェイス属性の記録には シンボルの属性face-defface-spec、 カスタマイズバッファでユーザーが保存した属性の記録には saved-face、 説明文字列の記録にはface-documentationを使います。

— ユーザオプション: frame-background-mode

このオプションがnil以外であると、 フェイスの定義を解釈する際に用いる背景の型を指定する。 これがdarkであると、 実際の背景色に関わらずEmacsはすべてのフレームの背景は暗いとみなす。 これがlightであると、 Emacsはすべてのフレームの背景は明るいとみなす。