GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Face-Remapping.html ・ emacs-doc.conao3.com

42.12.5 フェイスリマッピング

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

変数: face-remapping-alist

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

remapping は、face テキストプロパティに適した任意のフェイス指定子(フェイス、すなわちフェイス名、または属性/値ペアのプロパティリスト、あるいはフェイスのリスト)を指定できます。詳細については、特殊な意味を持つプロパティ における face テキストプロパティの説明を参照してください。remapping は再マッピングされたフェイスの完全な仕様として機能し、face の通常の定義を変更するのではなく、それに代わるものです。

face-remapping-alist がバッファローカルな場合、そのローカル値は当該バッファ内でのみ有効となります。face-remapping-alist に特定のウィンドウにのみ適用されるフェイスが含まれている場合、(:filtered (:window param val) spec) を使用することで、そのフェイスはフィルタ条件に一致するウィンドウでのみ有効になります(特殊な意味を持つプロパティを参照)。フェイスフィルタリングを一時的に無効にするには、face-filters-always-match に nil 以外の値をバインドしてください。これにより、すべてのフェイスフィルタが任意のウィンドウに一致するようになります。

注:フェイスのリマッピングは非再帰的です。remapping が、直接的に、あるいは remapping 内の別のフェイスの :inherit 属性を介して、同一のフェイス名 face を参照している場合、その参照には 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-spec-N は、face-remap-add-relative および face-remap-remove-relative 関数によって管理されており、これらはテキストサイズの変更といった単純な修正を目的としています。ベースリマッピング エントリである base-spec は優先度が最も低く、face-remap-set-base および face-remap-reset-base 関数によって管理されており、これはメジャーモードが制御するバッファ内のフェイスをリマッピングすることを目的としています。

関数: face-remap-add-relative face &rest specs

この関数は、現在のバッファ内のフェイス face に対する相対リマッピングとして specs を追加します。specs は、各要素がフェイス名、または属性と値のペアからなるプロパティリストであるリストである必要があります。

戻り値はクッキーとして機能する Lisp オブジェクトであり、後で再マッピングを解除する必要がある場合は、このオブジェクトを face-remap-remove-relative の引数として渡すことができます。

;; Remap the 'escape-glyph' face into a combination
;; of the 'highlight' and 'italic' faces:
(face-remap-add-relative 'escape-glyph 'highlight 'italic)

;; Increase the size of the 'default' face by 50%:
(face-remap-add-relative 'default :height 1.5)

なお、バッファローカルなフェイスの再マッピングは、基本フェイスの親フェイスに対しては安定して動作しません(基本フェイスを参照)。(これらは、モードラインやヘッダーライン、その他ウィンドウやフレームの基本的な装飾に使用されるフェイスです。)例えば、mode-line-inactiveはmode-lineを継承していますが、mode-lineを再マッピングしても、通常mode-line-inactiveに意図した効果は得られず、特に一部のバッファに対してローカルに行った場合はなおさらです。代わりに、mode-line-inactiveを直接再マッピングする必要があります。

関数: face-remap-remove-relative cookie

この関数は、face-remap-add-relative で以前に追加された相対リマッピングを削除します。cookie は、リマッピングが追加された際に face-remap-add-relative が返した Lisp オブジェクトである必要があります。

関数: face-remap-set-base face &rest specs

この関数は、現在のバッファにおける face の基本リマッピングを specs に設定します。specs が空の場合、face-remap-reset-base を呼び出した場合と同様に(後述)、デフォルトの基本リマッピングが復元されます。なお、これは単一の値 nil を含む specs とは異なり、後者は逆の結果となります(face のグローバル定義は無視されます)。

これは、グローバルなフェイス定義を継承するデフォルトの base-spec を上書きするため、必要に応じてこのような継承を追加するのは呼び出し側の責任となります。

関数: face-remap-reset-base face

この関数は、face の基本リマッピングを、face のグローバル定義を継承したデフォルト値に設定します。