Next: フェイスを処理するための関数, Previous: フェイスの表示, Up: フェイス [Contents][Index]
変数face-remapping-alistはあるフェイスの外観のバッファーローカル、またはグローバルな変更にたいして使用されます。たとえばこれはtext-scale-adjustコマンド(Text
Scale in The GNU Emacs Manualを参照)の実装に使用されています。
この変数の値は要素が(face
.
remapping)という形式をもつalist。これによりEmacsはフェイスfaceをもつ任意のテキストを、通常のfaceの定義ではなくremappingで表示する。
remappingにはテキストプロパティfaceにたいして適切な任意のフェイスspec、すなわちフェイス(フェイス名か属性/値ペアーのプロパティリスト)、またはフェイスのリストのいずれかを指定できる。詳細は特殊な意味をもつプロパティのfaceテキストプロパティの記述を参照のこと。remappingはリマップされるフェイスにたいる完全な仕様としての役目をもつ。これは通常のfaceを変更せずに置き換える。
face-remapping-alistがバッファーローカルなら、そのローカル値はそのバッファーだけに効果をもつ。(:filtered (:window param val) spec)を使用することにより特定のウィンドウだけに適用されるフェイスを含んだface-remapping-alistでは、そのフェイスはそのフィルター条件にマッチするだけに効果を及ぼす(特殊な意味をもつプロパティを参照)。フェイスのフィルタリングを一時的にオフにするには、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-Nとbase-specはそれぞれフェイス名か属性/値ペアーのプロパティリストです。相対的リマッピング(relative
remapping)エントリーrelative-spec-Nはそれぞれ関数face-remap-add-relativeとface-remap-remove-relativeにより管理されます。これらはテキストサイズ変更のような単純な変更を意図しています。ベースリマッピング(base
remapping)エントリーbase-specは最低の優先度をもち、関数face-remap-set-baseとface-remap-reset-baseにより管理されます。これはメジャーモードが制御下のバッファーでフェイスをリマップするために用いることを意図しています。
この関数はカレントバッファー内のフェイスfaceにたいして、相対的リマッピングとしてspecsを追加する。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)
バッファーローカルなフェイスのリマップは、基本フェイス(基本的なフェイスを参照)の親フェイスでは動作が不確実であることに注意(これらはモードライン、ヘッダーライン、およびウィンドウやフレームのその他基本的な装飾に用いられるフェイスである)。たとえばmode-line-inactiveはmode-lineから派生したフェイスだが、mode-lineをリマップしても通常ならmode-line-inactiveには期待した効果は得られないだろう(特にリマップが一部バッファーにたいしてローカルに行われた場合)。かわりにmode-line-inactiveを直接リマップする必要がある。
この関数は以前face-remap-add-relativeで追加された相対的リマッピングを削除する。cookieはリマッピングが追加されたときにface-remap-add-relativeがリターンしたLispオブジェクトであること。
この関数はカレントバッファー内のfaceのベースリマッピングをspecsにセットする。specsが空ならface-remap-reset-base(以下参照)を呼び出したようにデフォルトベースリマッピングがリストアされる。これは単一の値nilを含むspecsとは異なることに注意。これは逆の結果をもたらす(faceのグローバル定義は無視される)。
これはグローバルなフェイス定義を継承したデフォルトのbase-specを上書きするので、必要ならそのような継承を追加するのは呼び出し側の責任である。
この関数はfaceのベースリマッピングに、faceのグローバル定義から継承したデフォルト値にセットする。