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

15.6 カスタムテーマ

カスタムテーマとは、一括して有効化または無効化できる設定の集合のことです。The GNU Emacs ManualのCustom Themesを参照してください。各カスタムテーマはEmacs Lispのソースファイルによって定義され、このファイルは本節で説明する規約に従う必要があります。(カスタムテーマを手作業で記述する代わりに、Customizeのようなインターフェースを使用して作成することも可能です。The GNU Emacs ManualのCreating Custom Themesを参照してください。)

カスタムテーマファイルの名前は foo-theme.el とし、foo をテーマ名とします。ファイル内の最初の Lisp フォームは deftheme の呼び出しとし、最後のフォームは provide-theme の呼び出しとします。

マクロ: deftheme theme &optional doc &rest properties

このマクロは、theme(シンボル)をカスタムテーマの名称として宣言します。オプション引数のdocにはテーマを説明する文字列を指定します。これは、ユーザーがdescribe-themeコマンドを実行した際や、‘*Custom Themes*’バッファに?と入力した際に表示される説明文となります。残りの引数propertiesは、テーマ属性を含むプロパティリストを渡すために使用されます。

以下の属性がサポートされています。

:family

テーマがどの「ファミリー」に属するかを示すシンボル。テーマのファミリーとは、フレームの明るい背景用と暗い背景用といった顔の色など、細かな点で異なる類似テーマの集合のことである。

:kind

シンボル。テーマが有効で、このプロパティの値が color-scheme の場合、theme-choose-variant コマンドはテーマを切り替えるために、同じファミリーに属する他の利用可能なテーマを検索します。その他の値は現在未規定であり、使用すべきではありません。

:background-mode

light または dark のいずれかの記号。この属性は現在は使用されていませんが、引き続き指定する必要があります。

2つの特殊なテーマ名は使用禁止となっています(使用するとエラーが発生します):userはユーザーの直接的なカスタマイズ設定を保存するダミーテーマであり、changedはカスタマイズシステム外で行われた変更を保存するダミーテーマです。

マクロ: provide-theme theme

このマクロは、theme という名前のテーマが完全に指定されたことを宣言します。

deftheme と provide-theme の間には、テーマ設定を指定する Lisp フォーム(通常は custom-theme-set-variables の呼び出しおよび/または custom-theme-set-faces の呼び出し)が配置されています。

関数: custom-theme-set-variables theme &rest args

この関数は、カスタムテーマ theme の変数設定を指定します。theme はシンボルである必要があります。args の各引数は、次のような形式のリストである必要があります。

(var expression [now [request [comment]]])

ここで、リスト項目の意味は custom-set-variables と同様です。カスタマイズの適用 を参照してください。

関数: custom-theme-set-faces theme &rest args

この関数は、カスタムテーマ theme のフェイス設定を指定します。theme はシンボルである必要があります。args の各引数は、以下の形式のリストである必要があります。

(face spec [now [comment]])

ここで、リスト項目の意味は custom-set-faces と同様です。カスタマイズの適用 を参照してください。

理論上は、テーマファイルに他のLispフォームを含めることもでき、それらはテーマの読み込み時に評価されますが、これは好ましくない作法です。悪意のあるコードを含むテーマの読み込みを防ぐため、Emacsは組み込み以外のテーマを初めて読み込む前に、ソースファイルを表示してユーザーに確認を求めます。そのため、通常テーマはバイトコンパイルされず、Emacsが読み込み対象のテーマを探す際は、一般的にソースファイルが優先されます。

テーマをプログラムで有効・無効にするには、以下の関数が便利です。

関数: custom-theme-p theme

この関数は、theme(シンボル)がカスタムテーマの名前である場合(すなわち、テーマが有効であるか否かにかかわらず、Emacsにロードされているカスタムテーマである場合)、nil 以外の値を返します。それ以外の場合は、nil を返します。

変数: custom-known-themes

この変数の値は、Emacsにロードされたテーマのリストです。各テーマはLispシンボル(テーマ名)で表されます。この変数のデフォルト値は、2つのダミーテーマ (user changed) を含むリストです。changed テーマには、Customテーマが適用される前に行われた設定(例:Customize以外で設定された変数)が格納されます。user テーマには、ユーザーがカスタマイズして保存した設定が格納されます。deftheme マクロで宣言された追加のテーマは、このリストの先頭に追加されます。

コマンド: load-theme theme &optional no-confirm no-enable

この関数は、theme という名前のカスタムテーマをソースファイルから読み込み、変数 custom-theme-load-path で指定されたディレクトリの中からソースファイルを探します。The GNU Emacs Manual の Custom Themes を参照してください。また、(オプション引数 no-enable が non-nil でない限り)テーマを 有効化 し、その変数およびフェイスの設定を適用します。オプション引数 no-confirm が non-nil でない限り、テーマを読み込む前にユーザーに確認を求めます。

関数: require-theme feature &optional noerror

この関数は、custom-theme-load-path 内で feature を提供するファイルを検索し、それを読み込みます。これは関数 require(Features を参照)と同様ですが、load-path ではなく custom-theme-load-path を検索する点が異なります(Library Search を参照)。これは、require が適さない場合に補助的な Lisp ファイルを読み込む必要があるカスタムテーマにおいて有用です。

featurep によれば、シンボルであるべき feature が現在の Emacs セッションにまだ存在しない場合、require-theme は custom-theme-load-path で指定されたディレクトリ内で、feature という名前のファイルに、順に ‘.elc’ または ‘.el’ という接尾辞を付加したものを探します。

feature を提供するファイルが正常に見つかり、読み込まれた場合、require-theme は feature を返します。オプション引数 noerror は、検索または読み込みに失敗した場合にどうなるかを決定します。これが nil の場合は関数がエラーを通知し、それ以外の場合は nil を返します。ファイルが正常に読み込まれたものの、feature を提供していない場合、require-theme はエラーを通知します。これは抑制できません。

コマンド: enable-theme theme

この関数は、theme という名前のカスタムテーマを有効にします。該当するテーマが読み込まれていない場合は、エラーを返します。

コマンド: disable-theme theme

この関数は、theme という名前のカスタムテーマを無効にします。テーマはロードされたままとなるため、その後 enable-theme を呼び出すと再び有効になります。