M-x customize-create-theme と入力することで、カスタマイズバッファと同様のインターフェースを用いてカスタムテーマを定義できます。これにより、*Custom Theme* という名前のバッファに切り替わります。また、テーマにいくつかの一般的な Emacs フェイスを挿入するオプションも提供されます(カスタムテーマはフェイスのカスタマイズによく利用されるため、便利な機能です)。「no」と回答した場合、テーマには初期状態で設定が含まれません。
*Custom Theme* バッファの上部付近には、テーマの名称と説明を入力できる編集フィールドがあります。名称は ‘user’ 以外であれば任意に設定可能です。説明は、テーマに対して M-x describe-theme を呼び出した際に表示されるものです。その1行目は簡潔な1文の要約とし、M-x customize-themes によって作成されたバッファでは、この文がテーマ名の横に表示されます。
テーマに新しい設定を追加するには、‘[Insert Additional Face]’ または ‘[Insert Additional Variable]’ ボタンを使用します。各ボタンは、ミニバッファを用いて補完機能によりフェイス名または変数名を読み込み、そのフェイスまたは変数のカスタマイズ項目を挿入します。変数の値やフェイスの属性は、通常のカスタマイズバッファと同様に編集できます。テーマからフェイスまたは変数を削除するには、その名前の横にあるチェックボックスのチェックを外してください。
Customテーマのフェイスと変数を指定した後、C-x C-s (custom-theme-write) と入力するか、バッファの「[Save Theme]」ボタンを使用してください。これにより、name をテーマ名とする name-theme.el という名前のテーマファイルが、custom-theme-directory で指定されたディレクトリに保存されます。
*Custom Theme*バッファでは、「[Visit Theme]」ボタンを有効にしてテーマ名を指定することで、既存のカスタムテーマの表示や編集が可能です。また、「[Merge Theme]」ボタンを使用して、別のテーマの設定をバッファに追加することもできます。さらに、「[Merge Theme]」ボタンを使用し、「user」という名称の専用テーマを指定することで、テーマ以外の設定をカスタムテーマにインポートできます。
テーマファイルは単なる Emacs Lisp ソースファイルであり、Custom テーマの読み込みはこの Lisp ファイルを読み込むことで行われます。したがって、*Custom Theme* バッファを使用する代わりに、テーマファイルを直接編集することも可能です。詳細については、The Emacs Lisp Reference Manual の Custom Themes を参照してください。