Emacsの背景色の設定方法をまとめてみた
Emacs には背景の設定方法がいろいろありすぎてこまる.
なので Emacs 23 以降での背景色,前景色の変更をまとめてみた.
前提知識
- face
- フォント,前景色,背景色,下線の有無といった,スクリーン上でのテキストの表示に関する属性の集合.
- frame
- ウィンドウ システムで言うところのウィンドウ.
Emacs で言うところのウィンドウは C-x 2 などで分割したものをいうので注意.
- frame-background-mode
- 背景色が暗い色か明るい色かを表す値.
通常は自動で決定される.
face には frame-background-mode が dark のときと light のときの両方を定義することができる.
背景が黒のときと白のときでシンタックス ハイライトがいい感じに変わってくれるのはこいつのおかげ.
手動で設定できるけど,するもんじゃない.
前景色,背景色の設定方法
自分が知ってる限りだとこんだけある.
- custom-set-faces で default face の :background, :foreground を変更する.
- default-frame-alist に background-color と foreground-color を追加する.
- リソースで変更する.
- color-theme.el を使う.
- M-x customize-face して,手動で変える.
- set-background-color, set-foreground-color で設定する.
1. custom-set-faces で default face の :background, :foreground を変更する.
Emacs が提供している face のカスタマイズ機能を使ったときに Emacs が出力するコードで使われている方法.
.emacs.el に書けば最初から色が変わってる.
最近この方法を知ってからは,Emacs で背景色を変えるもっとも正しい方法なんじゃないかと思ってる.
例
.emacs.el に書くのはこんな感じ.
(custom-set-faces '(default ((t (:background "black" :foreground "#55FF55") )))) '(cursor ((((class color) (background dark)) (:background "#00AA00")) (((class color) (background light)) (:background "#999999")) (t ()) )))
default
とか cursor
っていうのは face の名前で,default
で Emacs 全体の背景と前景,cursor でカーソルの背景と前景が設定できる.
cursor
の方では ((class color)...
としているが,これは frame-background-mode
が dark
のときと light
のときの設定を分けているため。
default
にも同じように書いてもよい.
default
を上記のように記述しておけば,:backgrond
に設定した色によって自動で frame-background-mode
が決定される.
default
にも dark
と light
を設定した場合,Emacs を dark
の設定で起動するには,
% emacs -rv
として起動するか,後述するリソースに reverseVideo: true
を設定する必要がある.
2. default-frame-alist に background-color と foreground-color を追加する.
ブログとかでよく見る気がする.
.emacs.el に書いた場合,起動時に途中で色が変わったりしてなんかやだ.
個人的にはダサイから好きじゃない.
例
(setq default-frame-alist (append (list '(background-color . "black") '(foreground-color . "#55FF55") '(cursor-color . "#00AA00") ) default-frame-alist) )
この方法でも background-color
に設定した色によって frame-background-color
が動的に決定される.
3. リソースで変更する.
Emacs の設定ファイルには記述しない方法.
.Xdefaults とか org.gnu.Emacs.plist とかレジストリに書く.
emacs -nw
な場合の方法はわからない.
フォントとかも設定できて,システム依存の部分を .emacs.el から完全に分離できるのがいい.
Background や Foreground を設定する代わりに reverseVideo を "true" にすれば,frame-background-mode を dark にすることができる.
Cocoa Emacs の場合
~/Library/Preferences/org.gnu.Emacs.plist
に設定を書く.
このファイル自体は Carbon Emacs Package でも使われてたみたい.
内容はこんな感じ.
値はすべて string にする必要がある.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd";> <plist version="1.0"> <dict> <key>Background</key> <string>black</string> <key>Foreground</key> <string>white</string> </dict> </plist>
X Windows System 上の Emacs の場合
~/.Xdefaults か ~/.Xresources に書く.
.Xdefaults や .Xresources の使い方はぐぐればいろいろでてくる.
内容はこんな感じ.
Emacs.Foreground: white Emacs.Background: black
4. color-theme.el を使う.
color-theme.el に頼る方法.よく知らない.
気になる人は Emacs Wiki を.
5. M-x customize-face して,手動で買える.
M-x customize-face ってやって face を指定すると,その face の設定を動的に変更することができる.
default face を変更すれば,frame-background-mode も再計算されてとても便利.
普段は背景色: 黒でプロジェクタに移すとき背景色: 白にしたりフォント サイズを変えたいときに便利.
6. set-background-color, set-foreground-color で設定する.
set-background-color, set-foreground-color 現在の frame の背景色,前景色を変更する方法.
背景を黒のような暗い色にしたとき,シンタックス ハイライトなどの face が白のときのままになっちゃう.
frame-background-mode が dark にならないのが原因だが,frame-background-mode を期待通りに変更する方法は提供されていない.
なので,.emacs.el に書くのにはおすすめしない.
new-frame したとき,set-background-color で設定した色は引き継がれない.
終わりに
ざっくりあげただけでも 6 種類もある.
おすすめは,1. の custom-set-faces を使った方法です.