Help us understand the problem. What is going on with this article?

Emacsのテーマを改造する

More than 3 years have passed since last update.

この記事でやること

既存のテーマをベースにして、改造したオリジナルのテーマを作る。themeフレームワークはEmacs24以降なので、それより前のバージョンは想定しない。

きっかけ

長らく darcula-theme を使っていたのだが、型名の色が暗すぎて見づらい(下画像のMainWindowViewModel : ViewModelの部分)ので、明るくしたいと思った。
orig.png

カスタムテーマのパスの設定

仮にここでは~/.emacs/themeディレクトリとする。読者の環境に合わせて自由に置き換えること。

以下の記述をinit.elなどに記述する。

(add-to-list 'custom-theme-load-path "~/.emacs.d/themes")
(setq custom-theme-directory "~/.emacs.d/themes")

後でテストしやすいように、一度Emacsを再起動して上記の定義を読みこませるか、scratchバッファで評価しておくと良い。

カスタムテーマの設定

まず、ベースにしたいテーマを現在のEmacsに適用し、M-x customize-create-themeを実行する。現在のテーマをベースにするかどうかをミニバッファで聞かれるので、y を入力する。

すると、以下のようなCustom Themeバッファが表示される。

まずはTheme nameを設定する。今回はdarculaがベースなので、とりあえずdarcula-modifiedとしておく(末尾に-themeが付与されるので、入力するのはテーマ名本体のみで良い)。

customize.png

今回は Font Lock Type Face を編集したいので、当該項目の左側にある▷をクリックすると、実際の定義が表示されるようになる(各項目のサンプルが右側に表示されているので、変えたい部分の色を目印にすると見つけやすい)。

def-type.png

ここの :foreground "#4e807d" の部分を書き換えることで、型名の色が変化する。今回は明るい緑色mediumseagreen #3cb371に設定する。

すべての設定が終了したら、「Save Theme」のボタンをクリックすることで、~/.emacs.d/themes/darcula-modified-theme.elに保存される(保存先のパスは、先ほどcustom-theme-directoryで設定した)。ためしにscratchバッファで(load-theme 'darcula-modified)を実行すると、先ほど作成したテーマの内容が表示され、本当に読み込んでよいかを確認される。yを入力すると、実際にテーマが適用されるので、適当なファイルを開いて色が変化していることを確認する。今回の例だと、以下のように色が変化している(最初のスクリーンショットと比較してほしい)。

after.png

気に入らなければ、Custom Themeバッファに戻って変更をやりなおすことができる。

テーマの読み込み設定

いままで(require 'darcula-theme)としていた部分を(load-theme 'darcula-modified t)とする。第二引数のtは、読み込みの確認をしないという意味で、これを指定しないとEmacsを立ち上げるたびに先ほどの読み込み確認が表示される。

Emacsを再起動して適当なファイルを開き、修正したテーマが適用されていればすべての手順が成功している。

まとめ

  • カスタムテーマを配置するディレクトリとしてcustom-theme-load-pathを設定する
  • Emacsのテーマを編集するにはcustomize-create-themeを使う
  • テーマの保存先はcustom-theme-directoryで設定する
  • テーマを読み込むには、load-themeを使う
VienosNotes
Languages: Perl, Perl6, C#(WPF), Java, TypeScript / Tools: Emacs, IDEA / Learning: F#
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away