color-theme で Emacs のテーマを作成する

created:

2010-09-23

published:

2010-09-23

color-theme とは何か

ここで説明する color-theme とは Emacs の色設定をテーマとして纏めておくことができる Emacs Lisp のライブラリーのことです。公式サイトは以下になります。

http://www.nongnu.org/color-theme/

Emacs は face を設定することで、様々な場所に色を設定することができます。そうして設定した色の組合せをテーマとして保存しておけば、いつでもテーマ切り替えが簡単にできるようになります。

color-theme は最初から 90 ほどのテーマが同梱されており、そこから選択することもできますし、また自分でカスタマイズすることも比較的容易にできます。

環境構築

Emacs 用のライブラリですので、Emacs が動作している前提です。

curl -LO http://download.savannah.gnu.org/releases/color-theme/color-theme-6.6.0.tar.gz
tar xvfz color-theme-6.6.0.tar.gz
cd color-theme-6.6.0
make

Emacs にパスが通っていれば make することでバイトコンパイルされます。color-theme は比較的重いライブラリなので、バイトコンパイルはしておきます。

インストールは make install でも可能ですが、 color-theme-6.6.0 ディレクトリを load-path の通っているディレクトリに手動で移動しても良いでしょう。

設定

Emacs 22 以降は .emacs.d/init.el にて設定します。

以下を init.el に記述して Emacs を再起動すると color-theme の Arjen が設定された状態で起動します。

(require 'color-theme)
(eval-after-load "color-theme"
  '(progn
     (color-theme-initialize)
     (color-theme-arjen)))

どのようなテーマが存在するかは M-x color-theme-<TAB> すれば補完されますので、これで選択することもできます。

具体的な色の結果を見たい場合は、以下のサイトにサンプルがあります。

http://gnuemacscolorthemetest.googlecode.com/svn/html/index-el.html

上記サイトは HTML の色を利用しているので Emacs の色とは多少異なった印象の場合もありますが、参考になるでしょう。

デフォルトでは color-theme-6.6.0 ディレクトリの中の themes フォルダの中になる Emacs Lisp を自動でロードするようになっています。既存のテーマをいろいろ試してみるのも良いでしょう。

起動が遅いと感じる場合は themes フォルダの中の Emacs Lisp を必要な物だけにするなどの工夫をしてみてください。

標準テーマ以外の利用

標準テーマ以外にもテーマが配布されています。代表的なものをいくつか紹介します。

Zenburn

vim 用のテーマを移植した物です。黒系のテーマになります。見た目の雰囲気は以下のサイトをご覧ください。

http://slinky.imukuppi.org/zenburn/

Emacs 用の物は以下で配布されています。

http://www.emacswiki.org/emacs/zenburn.el

ダウンロードして themes フォルダに配置。

(color-theme-zenburn)

で設定できます。

PinkBliss

ピンク系のテーマです。以下のサイトでショットを見た方がわかりやすいでしょう。

http://www.emacswiki.org/cgi-bin/emacs/PinkBliss

その他

その他にも以下のような物があります。探すといろいろと存在しています。

独自のテーマを作成

既存のテーマで満足できない場合は自分独自のテーマを作成することになります。color-theme は自分独自のテーマを作成するのが楽しい物です。

自作する場合はまず、themes フォルダ の中の color-theme-library.el に定義されている color-theme に付属のテーマを見てみると良いでしょう。また themes フォルダ内には color-theme-example.el の名前でテンプレートが入っていますので、それを見るのが一番わかりやすいかもしれません。

筆者もいくつかテーマを作成して利用しています。以下で公開しています。現在は主に color-theme-dark.el を利用しています。

http://bitbucket.org/sakito/dot.emacs.d/src/tip/local-lisp/color-themes/themes/

色に関して

Emacsで設定できる色を知る必要があります。基本的には RGB で指定できる色は全色設定可能です。ただし環境によりますが、普段ブラウザ上で見えている色と微妙に差異がありますので確認した方が良いでしょう。

色名が付与されている色に関しては M-x list-color-display にて一覧を見ることができます。

設定したい部分の face の確認

Emacs では色が設定できる部分には face があります。ただ、いったいどの部分がなんという名前の face なのか不明な場合が多いでしょう。

まずは設定したい部分の face を知る必要があります。

とにかく face の一覧がほしいなら M-x describe-face したあと タブキーで補完すれば一覧が表示されます。

また、色設定したい箇所をポイントして知りたい場合は、init.el に以下のような関数を定義し、色を変更したい部分にカーソルを当て、 M-x describe-face-at-point するとその部分の face名を知ることができます。

(defun describe-face-at-point ()
 (interactive)
 (message "%s" (get-char-property (point) 'face)))

カーソルが当てられない箇所に関しては 参考資料:主な色設定可能部分の face 一覧 を参照してください。

色の設定

face には以下の項目が設定できます。

属性

説明

foreground

テキストの色

background

背景色の色

box

囲み部分の色

weight

フォントのウェイト

slant

フォントの傾き

size

フォントのサイズ

underline

アンダーラインを付けるか否か。デフォルトは nil

bold

bold体するか否か。デフォルトは nil

italic

italic体にするか否か。デフォルトは nil

わたしの例だと mode-line には以下のような設定を記述しています。

(mode-line ((t (:foreground "#bbbbbc" :background "#222222" :box (:line-width 1 :color nil :style released-button)))))

その他の設定に関してはサンプルを実際に見た方が早いでしょう。

あとは地道に色を設定していってください。

参考資料:主な色設定可能部分の face 一覧

一部の環境では設定しても意味がない物もありますが、主な物を参考資料として一覧にしておきます。

主な face 一覧

face

説明

background-color

バッファの背景の色です。一番見る色になるでしょう

foreground-color

文字の色になります

border

Emacs 外周の色

cursor

カーソルの色

mouse

マウスカーソルの色

underline

アンダーラインの色

menu

メニューバーやポップアップメニューの色

fringe

折返し記号の色

region

選択範囲の色

scroll-bar

スクロールバーの色

tool-bar

ツールバーの色

tooltip

ツールチップの色

header-line

バッファの上部で、スクロールしても動かない部分です。タブ等が表示されます

mode-line

モードラインの色

mode-line-buffer-id

モードラインに表示されているバッファ名の色

mode-line-emphasis

モードラインでの強調部の色

mode-line-highlight

モードラインでマウスカーソルなどを当てた時の色

mode-line-inactive

ウィンドウ分割等をしていて選択されていないウィンドウのモードラインの色

whitespace-space

空白の色

trailing-whitespace

行末の半角スペースの色

show-paren-match-face

対応した括弧の色

show-paren-mismatch-face

対応に失敗している括弧の色

action-lock-face

エンターなどでEmacsからなんらかの動作が発生する部位の色。モードによっては http で始まる文字列が自動でブラウザを開いたり等するがその部位の色

highlight

ハイライトのデフォルト値です。ハイライト関連の初期値になります

highlight-current-line

現在行をハイライトさせた場合の色です。設定しないと highlight が利用されるようです

isearch

isearchした時マッチした範囲の色

isearch-fail

isearchに失敗した時の色

isearch-lazy-highlight

isearch-lazyした時のマッチした範囲の色

font-lock-builtin-face

組み込み部の色。モードによって利用される箇所がことなります

font-lock-comment-face

コメントの色

font-lock-comment-delimiter-face

コメントの区切りの色

font-lock-constant-face

定数の色

font-lock-doc-face

docの色

font-lock-doc-string-face

doc-stringの色

font-lock-function-name-face

関数名の色

font-lock-keyword-face

キーワードの色

font-lock-preprocessor-face

プリプロセッサの色

font-lock-reference-face

参照している部分の色

font-lock-negation-char-face

文字(char)部分の色

font-lock-string-face

文字列(String)部の色

font-lock-type-face

型の色

font-lock-variable-name-face

変数の色

font-lock-warning-face

warning部分の色

comint-highlight-input

comint-modeはshell等のコマンドを入力するモード。その入力した値の色

comint-highlight-prompt

comint-modeのプロンプト色

highlight-changes

changes-mode を有効にした時の変更箇所の色

highlight-changes-1

1段階目の変更色

highlight-changes-2

2段階目の変更色

highlight-changes-3

3段階目の変更色

highlight-changes-4

4段階目の変更色

highlight-changes-5

5段階目の変更色

highlight-changes-6

6段階目の変更色

highlight-changes-delete

削除した場合の変更箇所の色

変更履歴

  • 2010-09-23: 公開