変数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のグローバル定義から継承したデフォルト値にセットする。