ElScreen のスクリーン毎に背景色を変える

何のために?と言われそうですが、私は ElScreen のスクリーン毎に背景色を切り替えています。 前回の 記事の通り、私はスクリーン番号を 0 番ではなく 1 番から始めていて、 1 番は暗い緑、2 番は暗い赤、3 番は黒、そして 4 番以降は前述の 3 色のローテーションという感じ。3 色しか用意していないのは、4 つ以上のスクリーンを使うことがないからです。

以下がそのプログラムです。

;;;
;;; スクリーンごとに背景色を切り替える
;;;

(defvar my-screen-background-colors '("#101010" "#102800" "#401000"))
(defun my-set-screen-background-color (&optional dummy)
  (set-background-color (nth (% (elscreen-get-current-screen) (length my-screen-background-colors))
			     my-screen-background-colors)))
(add-hook 'elscreen-goto-hook 'my-set-screen-background-color)
(add-hook 'elscreen-kill-hook 'my-set-screen-background-color)

変数 my-screen-background-colors には、最大 10 種類の色を設定できます。

動作確認環境は以下の通りです。

動機など

何故背景色を変えたいのか、何が便利なのか、と言われると色々自分なりの歴史があって、しかし明確な何かはなくて「うーん」と言葉に詰まります。私はスクリーンの 1 〜 3 の使い方がほぼ固定されていて、1 番は ChangeLog メモ、2 番は主作業用、3 番は一時作業用あるいはシェル…という感じです。ElScreen 導入前は、C-x 5 2 でフレームを作成して、フレーム毎に背景色を変更していました。フレームの場合は、一部分でも見えていれば目的のフレームをデスクトップから素早く探し出せる、という明確な (?) 背景色変えのメリットがあります。その後 ElScreen を使うようになったのですが、それまでの流れで「ChangeLog の背景は暗い緑、作業時の背景は暗い赤」というような決まり事が自分の中でできてしまったんですね。

さらに遡ると、10 年以上前に秀丸を使っていた際、拡張子ごとに固有の背景色を設定していた、という経緯に辿り着くんですけど…。