CarbonEmacs 内の locale の設定

subversion で管理しているファイルに対して vc-diff すると、次のようなエラーが出てしまい、差分が見れなくて困った。

Index: sync_static_network.tex
===================================================================
svn: 'UTF-8' ?\227?\129?\139?\227?\130?\137?\227?\131?\141?\227?\130?\164?\227?\131?\134?\227?\130?\163?\227?\131?\150?\227?\129?\174?\227?\130?\168?\227?\131?\179?\227?\130?\179?\227?\131?\188?\227?\131?\135?\227?\130?\163?\227?\131?\179?\227?\130?\176?\227?\129?\171?\230?\150?\135?\229?\173?\151?\229?\136?\151?\227?\130?\146?\229?\164?\137?\230?\143?\155?\227?\129?\167?\227?\129?\141?\227?\129?\190?\227?\129?\155?\227?\130?\147:
svn: --- sync_static_network.tex        (?\227?\131?\170?\227?\131?\147?\227?\130?\184?\227?\131?\167?\227?\131?\179 2758)
+++ sync_static_network.tex     (?\228?\189?\156?\230?\165?\173?\227?\130?\179?\227?\131?\148?\227?\131?\188)

端末から svn diff するときちんと見れているので、原因は CarbonEmacs の中での環境変数設定ということになる。

~/.MacOSX/environment.plist で LANG や LC_* を設定するのは怖かった。そこで defadvice を使って vc-diff もしくは vc-do-command にアドバイスするとカッコイイかなぁと思って色々試してみたけど上手くいかなかったので、結局 .emacs の中で以下の式を評価することで対応した。

(let (p)
  (setq p process-environment)
  (setq process-environment '("LANG=ja_JP.UTF_8" "LC_ALL=C"))
  (while p
    (unless (or (string-match "^LANG=" (car p))
                (string-match "^LC_.+=" (car p)))
      (setq process-environment (cons (car p) process-environment)))
    (setq p (cdr p)))
  process-environment)