Emacsのmodus-theme良いので紹介するよ

2023年3月30日
thumbnail
modusテーマがemacsの標準テーマにビルドインされるらしいです。今はパッケージをインストールしないと使えませんが、emacs29からはビルドインされるとのこと。私は長らくSolarizedとかAtom one Darkとかicebergとか使ってきました。これらはダークモードで映えるテーマで、ライトモードだとちょっと使いづらいなと感じていました。
ダークモードは日中の明るい場所でコーディングしますと、画面が異常に反射して、使いづらい場面が多々ありました。良さそうなライトテーマないかな〜なんて探していますと、ちょうどmodusテーマの記事を見つけて、それがすごく良かったので今ではmodus-operandi-themeをメインに使っています。
この記事で紹介する設定を参考に自分用にチューニングしてみてください。

modusテーマの設定

こちらがmodus-operandiを利用するための設定です。
;; カラーテーマをmodus-themesに変更する
(use-package modus-themes
  :ensure t
  :config
  ;; Add all your customizations prior to loading the themes
  (setq modus-themes-italic-constructs t
        modus-themes-bold-constructs t
        modus-themes-mixed-fonts nil
        modus-themes-variable-pitch-ui t
        modus-themes-custom-auto-reload t
        modus-themes-disable-other-themes t

        ;; Options for `modus-themes-prompts' are either nil (the
        ;; default), or a list of properties that may include any of those
        ;; symbols: `italic', `WEIGHT'
        modus-themes-prompts '(italic bold)
        )
  ;; Load the theme of your choice.
  (load-theme 'modus-operandi)
  (define-key global-map (kbd "<f5>") #'modus-themes-toggle))

斜体文字表現

斜体文字表現はデフォルトでnilです。これを有効にしています。 斜体文字表現が使われている場所はコードのコメントアウトの部分です。
modus-themes-italic-constructs t
ちなみにiTerm2で斜体文字を使う場合は別に設定が必要です。 こちらの記事の方法で実装できます。
斜体文字あり
article image
斜体斜体文字なし
article image
日本語は斜体文字になっていませんが仕方ないっぽいです。

太文字表現

太文字表現はデフォルトでnilです。これを有効にしています。 太文字表現が使われている場所は、プログラムの予約語や標準関数を太文字にします。
modus-themes-bold-constructs t
太文字あり
article image
太文字なし
article image

スペース表現の書式を整える

スペース表現の書式を整えるはデフォルトでnilです。これはそのまま無効にしています。 org-modeのテーブルやコードブロックのようにスペースで表現されているレイアウトの幅を調整してくれます。
ローマ字や日本語のように1文字のサイズが異なる場合でも調整してくれます。ただ、emacs28系からこの辺りの文字サイズによるレイアウト崩れは調整されているはずなので、これを有効にしても特に変化はありませんでした。
modus-themes-mixed-fonts nil

スペース表現のUIを整える

この設定は私が確認したところだと、GUI版のみに影響しています。モードラインのように、UI要素の間をスペースで表現しているものがあります。modus-themes-variable-pitch-uiはその間隔を等間隔に調整します。これはかなり好みが分かれると思うので、切り替えてしっくりくる方を利用すると良いと思います。
modus-themes-variable-pitch-ui t
等間隔あり
article image
等間隔なし
article image

手動でした変更したオプションのリロード

この値はデフォルトでtです。
modus-themes-custom-auto-reload t
modusテーマのfaceや変数を変更した時にテーマを自動的にリロードする設定です。 これを無効にすると、例えば、emacsを開いた後customize-groupmodus-themesを指定して、modus-themes-bold-constructsの値をnilにして太文字表現を無効にしても、現在開いているemacsではスタイルが更新されません。よっぽどの理由がない限りはtで良いです。

テーマロード時の他のテーマを無効

この値はデフォルトでtです。
modus-themes-disable-other-themes t
modus-themeはmodus-themes-toggleでダークモードとライトモードを切り替えられます。切り替え時に、別のテーマがロードされるのを無効にすることで、スタイルが変に適応されるのを防ぎます。これも特に理由がない限りはtが良いと思います。

エコーエリアのスタイル

公式のドキュメントによると、エコーエリアやシェルのプロンプトのデザインを指定できます。デフォルトでは特に設定されておらず、普通サイズの文字スタイルが適応されています。
;; Options for `modus-themes-prompts' are either nil (the
;; default), or a list of properties that may include any of those
;; symbols: `italic', `WEIGHT'
modus-themes-prompts '(italic bold)
組み合わせられる組み合わせは3つだけです。
  1. 普通サイズの文字
  2. 斜体文字
  3. 斜体文字 + 文字の太さ
斜体文字+太文字あり
article image
斜体文字+太文字なし
article image

まとめ

以上がmodus-themeが紹介している基本的なカスタマイズオプションです。
自分好みの設定ができたでしょうか。もちろんここで紹介したもの以外にも、サードパティ製のパッケージに個別にスタイルをあてもるものもあるので、挑戦してみてください。
profile image
Ted
大学でコンセンサスアルゴリズムを研究。卒業後ベンチャー企業に入社してフルスタックでWebサービスを開発。現在は大手IT企業に転職し、プログラミングを行っている。AIにプログラマーの仕事を奪って欲しいと願っている。