この間リリースされた Visual Studio Code が非常におしゃれで気に入ってたんですが、やはり Emacs から離れられない体にされていた様で、エディタの移動に失敗しました。

ですが、やっぱりあのおしゃれな感じは羨ましかったので、実装する事にしました。

その為 emacs24 の theme フレームワークについて色々調べてました。
今回の記事はその関係の話です。

まず、状況の把握が必要かと思うので、その辺を書いていきます。
Emacs 24 からは theme フレームワークという物が導入されている様です。

そして、その前のバージョンでは color-theme という物が、見た目を作る時に利用されていたらしいのです。

完全に他人事な感じで書いているのは、僕自身は 22 のバージョンの時に作成した自作のインターフェースを使用していたので、全く興味が無く文字通り他人事になっていたからです。

なので、その辺りの話は割愛で。

theme フレームワークについて

theme フレームワークについては、Emacs 事情に詳しい人がまとめているのでそちらにおまかせします。

ようするに、theme フレームワークの形式で作成しとけば load-theme 関数で簡単に導入出来るって話です。

こんな感じで。

(load-theme 'theme-name)
(enable-theme 'theme-name)

theme-name の部分には適宜作成したカスタムテーマ名が入ります。気を付けないといけない部分は、テーマのファイル名には命名規則があって、ファイル名の終わりは必ず -theme.el にしないといけないという事です。そして、-theme.el までのファイル名がテーマ名になります。

例えば、vsc-theme.el という名前でファイルを作成し、そのテーマを適応するには下記の様になります。

(load-theme 'vsc)
(enable-theme 'vsc)

こんな感じですね。知ってしまえばどうという事は無い話です。

theme ファイルの書き方

基本的には難しくなく、テンプレで覚えると良いかと思います。
気を付けるべきは、setq で設定する様な場合です。

こういう設定は別ファイルに逃げるという手もありますが、全然 theme フレームワークの利点が活かせていない感じがするので、体当りで調べました。

大体下記の様な感じで設定出来ます。雰囲気を感じとって下さい。

;; 基本的な形 face の情報を ' でまとめておくと登録出来る.
 '(default ((t (:background "#171717" :foreground "#D8D8D8"))))
;; setq 等をどうしても使いたい場合
(progn
  ;; progn で一つにまとめる.
  ;; これで中には複数の式を入れられる
  (setq inhibit-startup-message t)
  (setq initial-scratch-message "")
  ;; 最後の nil は必要. 関数の戻り値が nil じゃないとエラーになる.
  nil)

調べていて (face 周りを分かっていなかったせいで) 結構辛く苦しい戦いでした。
しかもみんなカスタムする話は書いていないって言う… どうなってんだまったく。

という訳で調べた方法とかも書いときます。

Emacs でパラメータとか実装とか調べる方法

ソース読めやとか、ドキュメント読めやとか、そういう話では無く、簡単に間違いの無い情報に辿りつく為に必要な方法が知りたいですよね。

僕も調べていて、色んな求めていない情報に飛ばされていて辟易としていました。
ドキュメントもある程度それっぽい所まで行くものの、肝心の部分に触れていなかったりして苦痛極まりない体験を得ました。もうたくさんです。

ですが、Emacs にはロード済の関数やパラメータを調べる方法が存在していました。

それは describe という関数です。これを使用すると今回の悩みは一瞬で解決しました。

face の調べ方は下記の様な感じで、やりました。
設定したい項目の名前を探して発見したらその名前を使う感じです。

;; M-x describe-face [Enter] mode-line
;; だいたいこれがテンプレ. ((t 以降は param に : をつけて設定する.
;; 後は雰囲気.
'(mode-line ((t  (:foreground "#F8F8F2" :background "#000000"
                  :box (:line-width 1 :color "#000000" :style released-button)))

:foreground とか :background とかは、各パラメータに : (コロン) を付けているだけなので、describe-face を実行して発見したパラメータに : (コロン) を付けて適当な値を設定すれば利用出来ます。分かると簡単ですね。

dexcribe-face はインターフェースに使用しているパラメータの仕様を見る事が出来るので、どういった事が設定出来るのかも見れます。

更に、face 以外の物も見る事が出来ます。

describe-func とか describe-value とかもあります。正直検索するよりもこっちで調べた方が早いです、もう圧倒的に。定義元にも飛べますので、実装を見るのも楽ちんです。

使った事が無い人は是非使ってみてください。本当便利です。

まとめ

まだまだインターフェースは作成途中ですが、途中なりに良さげになってきました。

これからも改良はしていきますが、とりあえずリンクを貼っておこうかと思います。

emacs theme

現状こんな感じです。
お気にめせば使ってやって下さい。