Customテーマ(Custom themes)とはユニットとして有効や無効にできるセッティングのコレクションです。Custom Themes in The GNU Emacs Manualを参照してください。CustomテーマはそれぞれEmacs Lispソースファイルにより定義され、それらはこのセクションで説明する慣習にしたがう必要があります(Customテーマを手作業で記述するかわりに、Customize風のインターフェイスを使用して作成することもできる。Creating Custom Themes in The GNU Emacs Manualを参照)。
Customテーマファイルはfoo-theme.elのように命名すること。ここでfooはテーマの名前。このファイルでの最初のLispフォームはdeftheme
の呼び出しで、最後のフォームはprovide-theme
にすること。
このマクロはCustomテーマの名前としてtheme(シンボル)を宣言する。オプション引数docは、そのテーマを説明する文字列であること。この文字列はユーザーがdescribe-theme
コマンドを呼び出したり、‘*Custom
Themes*’バッファーで?をタイプしたときに表示される。残りの引数propertiesテーマの属性を含んだプロパティリストを渡すために使用される。
サポートされている属性は以下のとおり:
:family
テーマがどの“ファミリー(family)”に属すかを示すシンボル。テーマのファミリーとは、フレームのバックグラウンドのライト(light: 明るい)とダーク(dark: 暗い)を意図したフェイスカラーのように、似ているがマイナーな側面は異なるテーマセットのこと。
:kind
シンボル。テーマが有効かつこのプロパティの値がcolor-scheme
なら、テーマを切り替えるためにコマンドtheme-choose-variant
は同じファミリーに属する他のの利用可能なテーマを探す。現在のところ他の値は指定されておらず、使用するべきではない。
:background-mode
light
かdark
いずれかのシンボル。この属性は現在のところ使用されていないが依然として指定はする必要がある。
2つの特別なテーマ名は禁止されている(使用するとエラーになる)。user
はそのユーザーの直接的なカスタマイズ設定を格納するためのダミーのテーマである。そしchanged
はCustomizeシステムの外部で行われた変更を格納するためのダミーのテーマである。
このマクロは完全に仕様が定められたテーマ名themeを宣言する。
deftheme
とprovide-theme
の違いは、そのテーマセッティングを規定するLispフォームです(通常はcustom-theme-set-variables
の呼び出し、および/またはcustom-theme-set-faces
の呼び出し)。
この関数はCustomテーマthemeの変数のセッティングを規定する。themeはシンボル。args内の各引数はフォームのリスト。
(var expression [now [request [comment]]])
ここでリストエントリーはcustom-set-variables
のときと同じ意味をもつ。カスタマイゼーションの適用を参照のこと。
この関数はCustomテーマthemeのフェイスのセッティングを規定する。themeはシンボル。args内の各引数はフォームのリスト。
(face spec [now [comment]])
ここでリストエントリーはcustom-set-faces
のときと同じ意味をもつ。カスタマイゼーションの適用を参照のこと。
原則的にテーマファイルは他のLispフォームを含むこともでき、それらはそのテーマがロードされるときに評価されるでしょうが、これは悪いフォームです。悪意のあるコードを含むテーマのロードを防ぐために最初に非ビルトインテーマをロードする前に、Emacsはソースファイルを表示してユーザーに確認を求めます。このようにテーマは通常のバイトコンパイルは行わずに、Emacsがテーマをロードする際には通常はソースファイルが優先されます。
以下の関数は、テーマをプログラム的に有効または無効にするのに有用です:
この関数はtheme(シンボル)がCustomテーマの名前(たとえばそのテーマが有効かどうかにかかわらず、CustomテーマがEmacsにロードされている)なら非nil
をリターンする。それ以外はnil
をリターンする。
この変数の値はEmacsにロードされたテーマのリストである。テーマはそれぞれLispシンボル(テーマ名)により表される。この変数のデフォルト値は2つのダミーテーマ(user
changed)
を含む。changed
テーマにはCustomテーマが適用される前に行われたセッティング(たとえばCustomの外部での変数のセット)が格納されている。user
テーマにはそのユーザーがカスタマイズして保存したセッティングが格納されている。deftheme
マクロで宣言されたすべての追加テーマは、このリストの先頭に追加される。
この関数はthemeという名前のCustomテーマを、変数custom-theme-load-path
で指定されたディレクトリーから探して、ソースファイルからロードする。Custom
Themes in The GNU Emacs
Manualを参照のこと。またそのテーマの変数とフェイスのセッティングが効果を及ぼすようにテーマをenablesにする(オプション引数no-enableがnil
の場合)。さらにオプション引数no-confirmがnil
なら、そのテーマをロードする前にユーザーに確認を求める。
この関数はfeatureをprovideするファイルをcustom-theme-load-path
から検索してロードする。これは関数require
(名前つき機能を参照)と似ているが、load-path
(ライブラリー検索を参照)ではなくcustom-theme-load-path
を検索する点が異なるこれはLispサポートファイルおロードを要するCustomテーマにおいて、require
が不適切な際に有用かもしれない。
カレントのEmacsセッションにおいてfeaturep
に照らしてfeature
(シンボル)がまだ与えられていなければ、require-theme
はcustom-theme-load-path
で指定されたディレクトリー内から、featureに‘.elc’、次に‘.el’のサフィックスを追加した名前をもつファイルを検索する。
featureをprovideするファイルが見つかりロードに成功すると、require-theme
はfeatureをリターンする。オプション引数noerrorは検索やロードの失敗時に何が発生するかを決定する。nil
ならこの関数はエラーをシグナルして、それ以外ならnil
をリターンする。ファイルのロードには成功してもfeatureをlprovideしない場合には、require-theme
はエラーをシグナルする(これは抑止不可)。
この関数はthemeという名前のCustomテーマを有効にする。そのようなテーマがロードされていなければ、エラーをシグナルする。
この関数はthemeという名前のCustomテーマを無効にする。テーマはロードされたまま残るので、続けてenable-theme
を呼び出せばテーマは再び有効になる。