背景色をtoggleするコマンド作った/バッファをhtmlに変換する

結構前の話だけど,背景色をtoggleするコマンド作った.
事の成り行きはこう.
htmlにCのソースをコピペしたら,シンタックスハイライトがなくて読みにくかったので,Emacsのバッファをhtmlに変換する拡張を探した.
まず見つかったのは,face2html.範囲指定でhtmlに変換できるけど,でてきたhtmlソースが汚い(preタグの中にfontタグでそれぞれ色直接指定).
もうちょっと調べてみると,htmlizeというのがあることがわかった.これだと,cssを使ったきれいなソースを吐いてくれる.その代わり,部分ソースじゃなくてhtmlタグから全部作ってしまうみたいけど,それはなんとでもなる.
よって,バッファをhtml化するならhtmlize.elがおすすめ.


ところで,俺はEmacsの背景を黒(透過)にしている.一方,htmlのは白背景だったので,黒背景用のfont-faceだと色が明るすぎて見えない.Emacsのデフォルトのfont-faceは,背景色の明るさに応じて自動で変わってくれるのだ.そういうわけで,htmlizeを使う時は一時的に白背景にすることになった.そこで,背景色を白黒切り替えるコマンドを作った.

(defun toggle-frame-color ()
  (interactive)
  (if (string= (cdr (assq 'background-color (frame-parameters (selected-frame)))) "black")
      (progn (set-background-color "white")
             (set-foreground-color "black"))
    (progn (set-background-color "black")
           (set-foreground-color "white"))))