カスタムテーマとは、一括して有効化または無効化できる設定の集合のことです。The GNU Emacs ManualのCustom Themesを参照してください。各カスタムテーマはEmacs Lispのソースファイルによって定義され、このファイルは本節で説明する規約に従う必要があります。(カスタムテーマを手作業で記述する代わりに、Customizeのようなインターフェースを使用して作成することも可能です。The GNU Emacs ManualのCreating Custom Themesを参照してください。)
カスタムテーマファイルの名前は foo-theme.el とし、foo
をテーマ名とします。ファイル内の最初の Lisp フォームは deftheme
の呼び出しとし、最後のフォームは provide-theme の呼び出しとします。
このマクロは、theme(シンボル)をカスタムテーマの名称として宣言します。オプション引数のdocにはテーマを説明する文字列を指定します。これは、ユーザーがdescribe-themeコマンドを実行した際や、‘*Custom Themes*’バッファに?と入力した際に表示される説明文となります。残りの引数propertiesは、テーマ属性を含むプロパティリストを渡すために使用されます。
以下の属性がサポートされています。
:familyテーマがどの「ファミリー」に属するかを示すシンボル。テーマのファミリーとは、フレームの明るい背景用と暗い背景用といった顔の色など、細かな点で異なる類似テーマの集合のことである。
:kindシンボル。テーマが有効で、このプロパティの値が color-scheme の場合、theme-choose-variant
コマンドはテーマを切り替えるために、同じファミリーに属する他の利用可能なテーマを検索します。その他の値は現在未規定であり、使用すべきではありません。
:background-modelight または dark
のいずれかの記号。この属性は現在は使用されていませんが、引き続き指定する必要があります。
2つの特殊なテーマ名は使用禁止となっています(使用するとエラーが発生します):userはユーザーの直接的なカスタマイズ設定を保存するダミーテーマであり、changedはカスタマイズシステム外で行われた変更を保存するダミーテーマです。
このマクロは、theme という名前のテーマが完全に指定されたことを宣言します。
deftheme と provide-theme
の間には、テーマ設定を指定する Lisp フォーム(通常は custom-theme-set-variables の呼び出しおよび/または custom-theme-set-faces の呼び出し)が配置されています。
この関数は、カスタムテーマ theme の変数設定を指定します。theme はシンボルである必要があります。args の各引数は、次のような形式のリストである必要があります。
(var expression [now [request [comment]]])
ここで、リスト項目の意味は custom-set-variables と同様です。カスタマイズの適用 を参照してください。
この関数は、カスタムテーマ theme のフェイス設定を指定します。theme はシンボルである必要があります。args の各引数は、以下の形式のリストである必要があります。
(face spec [now [comment]])
ここで、リスト項目の意味は custom-set-faces と同様です。カスタマイズの適用 を参照してください。
理論上は、テーマファイルに他のLispフォームを含めることもでき、それらはテーマの読み込み時に評価されますが、これは好ましくない作法です。悪意のあるコードを含むテーマの読み込みを防ぐため、Emacsは組み込み以外のテーマを初めて読み込む前に、ソースファイルを表示してユーザーに確認を求めます。そのため、通常テーマはバイトコンパイルされず、Emacsが読み込み対象のテーマを探す際は、一般的にソースファイルが優先されます。
テーマをプログラムで有効・無効にするには、以下の関数が便利です。
この関数は、theme(シンボル)がカスタムテーマの名前である場合(すなわち、テーマが有効であるか否かにかかわらず、Emacsにロードされているカスタムテーマである場合)、nil 以外の値を返します。それ以外の場合は、nil
を返します。
この変数の値は、Emacsにロードされたテーマのリストです。各テーマはLispシンボル(テーマ名)で表されます。この変数のデフォルト値は、2つのダミーテーマ
(user changed) を含むリストです。changed
テーマには、Customテーマが適用される前に行われた設定(例:Customize以外で設定された変数)が格納されます。user テーマには、ユーザーがカスタマイズして保存した設定が格納されます。deftheme マクロで宣言された追加のテーマは、このリストの先頭に追加されます。
この関数は、theme という名前のカスタムテーマをソースファイルから読み込み、変数 custom-theme-load-path
で指定されたディレクトリの中からソースファイルを探します。The GNU Emacs Manual
の Custom
Themes を参照してください。また、(オプション引数 no-enable が
non-nil でない限り)テーマを 有効化
し、その変数およびフェイスの設定を適用します。オプション引数 no-confirm が non-nil でない限り、テーマを読み込む前にユーザーに確認を求めます。
この関数は、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 はエラーを通知します。これは抑制できません。
この関数は、theme という名前のカスタムテーマを有効にします。該当するテーマが読み込まれていない場合は、エラーを返します。
この関数は、theme
という名前のカスタムテーマを無効にします。テーマはロードされたままとなるため、その後 enable-theme を呼び出すと再び有効になります。