frame の色を由緒正しく (?) 設定する for frame-background-mode

追記 (2010-10-22)
after-make-frame-functions はユーザーがカスタマイズするのはよくない変数なので、この方法はお勧めできません。
さらに、NTEmacs23.2 で試したところ (add-to-list default-frame-alist ...) で background-color を黒に指定した場合でも dark になるようです。


Emacs23のmulti-ttyを試すもtty版の背景色が邪魔な件 - (rubikitch loves (Emacs Ruby CUI Books))

ここを参考に,frame の色を由緒正しい感じがする方法で設定できるようにしました!

(defun my-set-display-for-windowed-frames (frame)
  "Set display parameters for the current frame the way I like them."
  (select-frame frame)
  (set-background-color "black")
  (set-foreground-color "#55FF55")
)
(add-hook 'after-make-frame-functions 'my-set-display-for-windowed-frames)
(my-set-display-for-windowed-frames (selected-frame))  ; これがないとうまくいかない

(setq default-frame-alist ...) でいいんじゃないの? っていう意見もあるかと思いますが,ダメです(キリッ

(setq default-frame-alist ...) の場合 frame-background-mode がいい感じにならないからです.

frame-backgroun-mode

あまり知られていない感じがするのですが,emacs の色とかの設定 face には,背景色が light, dark のときの2種類の設定を同時行うことができます.

(defface hlline-face
  '((((class color)
      (background dark))
     (:background "#222244"))
    (((class color)
      (background light))
     (:background "LightSteelBlue1"))
     (t
     ()))

こんな感じね.

で,問題の (setq default-frame-alist ...) だと frame-background-mode が良しなになりません.

なので after-make-frame-functions っていう hook を使うことでうまく行きます.


でも,なんでdefault-frame-alist はダメで,after-make-frame-functions はいいの? って聞かれてもわかりません(>_<)

教えて!エロい人