Next: , Previous: , Up: Faces   [Contents][Index]


39.12.5 フェイスのリマップ

変数face-remapping-alistはあるフェイスの外観のバッファーローカル、またはグローバルな変更にたいして使用されます。たとえばこれはtext-scale-adjustコマンド(Text Scale in The GNU Emacs Manualを参照)の実装に使用されています。

Variable: face-remapping-alist

この変数の値は要素が(face . remapping)という形式をもつalist。これによりEmacsはフェイスfaceをもつ任意のテキストを、通常のfaceの定義ではなくremappingで表示する。

remappingにはテキストプロパティfaceにたいして適切な任意のフェイスspec、すなわちフェイス(フェイス名か属性/値ペアーのプロパティリスト)、またはフェイスのリストのいずれかを指定できる。詳細はSpecial Propertiesfaceテキストプロパティの記述を参照のこと。remappingはリマップされるフェイスにたいる完全な仕様としての役目をもつ。これは通常のfaceを変更せずに置き換える。

face-remapping-alistがバッファーローカルなら、そのローカル値はそのバッファーだけに効果をもつ。(:filtered (:window param valspec)を使用することにより特定のウィンドウだけに適用されるフェイスを含んだface-remapping-alistでは、そのフェイスはそのフィルター条件にマッチするだけに効果を及ぼす(Special Propertiesを参照)。フェイスのフィルタリングを一時的にオフにするには、face-filters-always-matchを非nil値にバインドすれば、すべてのフェイスフィルターは任意のウィンドウにマッチする。

注意: フェイスのリマッピングは再帰的ではない。remappingが同じフェイス名faceを参照する場合には、直接またはremapping内の他の何らかのフェイスの:inherit属性を通じて、その参照はfaceの通常の定義を使用する。たとえばmode-lineフェイスがface-remapping-alist内の以下のエントリーでリマップされるなら:

(mode-line italic mode-line)

mode-lineフェイスの新たな定義はitalicフェイス、および(リマップされていない)通常mode-lineフェイスの定義から継承される。

以下の関数はface-remapping-alistにたいする高レベルなインターフェースを実装します。ほとんどのLispコードはリマッピングが他の場所に適用されてしまうのを避けるために、face-remapping-alistを直接セットするのではなくこれらの関数を使用するべきです。これらの関数はバッファーローカルなリマッピングを意図しており、すべてが副作用としてface-remapping-alistをバッファーローカルにします。これらは以下の形式のface-remapping-alistエントリーを管理します

  (face relative-spec-1 relative-spec-2 ... base-spec)

上述したようにrelative-spec-Nbase-specはそれぞれフェイス名か属性/値ペアーのプロパティリストです。相対的リマッピング(relative remapping)エントリーrelative-spec-Nはそれぞれ関数face-remap-add-relativeface-remap-remove-relativeにより管理されます。これらはテキストサイズ変更のような単純な変更を意図しています。ベースリマッピング(base remapping)エントリーbase-specは最低の優先度をもち、関数face-remap-set-baseface-remap-reset-baseにより管理されます。これはメジャーモードが制御下のバッファーでフェイスをリマップするために用いることを意図しています。

Function: face-remap-add-relative face &rest specs

この関数はカレントバッファー内のフェイスfaceにたいして、相対的リマッピングとしてspecs内にフェイスspecを追加する。残りの引数specsはフェイス名のリスト、または属性/値ペアーのプロパティリストのいずれかの形式であること。

リターン値はcookieとしての役目をもつLispオブジェクト。後でそのリマッピングの削除を要する場合には、引数としてface-remap-remove-relativeにこのオブジェクトを渡すことができる。

;; 'escape-glyph'フェイスを'highlight'と'italic'
;; を組み合わせたフェイスにリマップする
(face-remap-add-relative 'escape-glyph 'highlight 'italic)

;; 'default'フェイスのサイズを50%増加:
(face-remap-add-relative 'default :height 1.5)
Function: face-remap-remove-relative cookie

この関数は以前face-remap-add-relativeで追加された相対的リマッピングを削除する。cookieはリマッピングが追加されたときにface-remap-add-relativeがリターンしたLispオブジェクトであること。

Function: face-remap-set-base face &rest specs

この関数はカレントバッファー内のfaceのベースリマッピングをspecsにセットする。specsが空ならface-remap-reset-base(以下参照)を呼び出したようにデフォルトベースリマッピングがリストアされる。これは単一の値nilを含むspecsとは異なることに注意。これは逆の結果をもたらす(faceのグローバル定義は無視される)。

これはグローバルなフェイス定義を継承したデフォルトのbase-specを上書きするので、必要ならそのような継承を追加するのは呼び出し側の責任である。

Function: face-remap-reset-base face

この関数はfaceのベースリマッピングに、faceのグローバル定義から継承したデフォルト値にセットする。