blog.hekt.org

Emacs から tmux と iTerm2 の Solarized を切り替える

ここのところずっとカラーテーマに Solarized を使っているのですが、明るい昼に紺背景の Solarized Dark を使うと少し映り込みが気になりますし、逆に暗い夜に Solarized Light はまぶしすぎます。時間帯によって使い分けたいところなのですが、今の環境では iTerm, tmux, Emacs とそれぞれを切り替えなくてはならなくて、毎日やることを考えるとちょっと面倒です。

ということで Emacs から一発で三つとも変更できるようにしました。

Emacs

Emacs だけなら普通ですね。Emacs 24 の Color Theme 機能を使っている場合ですが、23 以前でもできるはず。((color-theme-solarized-[dark|light]))

(defun light-theme ()
  (interactive)
  (load-theme 'solarized-light t))
(defun dark-theme ()
  (interactive)
  (load-theme 'solarized-dark t))

M-x dark-theme (light-theme) RET で切り替わります。

tmux も

色の設定を別にして tmux source-file で読み込みます。

(defun light-theme ()
  (interactive)
  (load-theme 'solarized-light t)
  (shell-command "tmux source-file ~/.tmux/solarized-light.conf"))
(defun dark-theme ()
  (interactive)
  (load-theme 'solarized-dark t)
  (shell-command "tmux source-file ~/.tmux/solarized-dark.conf"))

僕の設定はこんな感じ: Dark / Light

iTerm2 も

iTerm2 は AppleScript で設定を変更できるのですが、どうやらカラープリセットのロードには対応していないようです。とはいえ Solarized の Dark と Light を切り替えるだけなので、Basic Colors だけ変えれば OK。ググって見つけた AppleScript を使わせてもらいます: Dark / Light

完成

(defun light-theme ()
  (interactive)
  (load-theme 'solarized-light t)
  (shell-command "tmux source-file ~/.tmux/solarized-light.conf")
  (shell-command "osascript ~/.iterm/solarized-light.scpt"))
(defun dark-theme ()
  (interactive)
  (load-theme 'solarized-dark t)
  (shell-command "tmux source-file ~/.tmux/solarized-dark.conf")
  (shell-command "osascript ~/.iterm/solarized-dark.scpt"))

Emacs のテーマは開いている Emacs の分だけ変更を繰り返さなくてはなりませんが、まあそれはしょうがない。