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

更新日: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: 公開
Author: sakito Updated: 2010年09月23日(木) category: /emacs Permalink: Permalink
このエントリーをはてなブックマークする はてなブックマーク数 このエントリーをdel.icio.usに登録する このエントリーを Tumblr する このエントリーに Twitter 経由でコメントする
以下はゲストコメント可能です。名前とメールアドレスは任意の物を入力していただいてかまいません。
blog comments powered by Disqus

このページの先頭へ

copyright (CC-by) 1999-2016 sakito
Powered by pyblosxom. Theme: TheBuckmaker.