WindowsでEmacs+ESSでlocaleが設定できない問題の解決方法

追記:この問題は,gnupack4.08aでは起きません。ただし,別の問題が発生しています

id:Rion778さんがWindowsでのESSの設定について素晴らしい記事を書いてくれました。

http://d.hatena.ne.jp/Rion778/20100920

僕もgnupackを使っているのですが,再インストールを繰り返しているうちに設定がめんどくさくなって放置しています…。

さて,id:Rion778さんがヘルプを出されている点について,以前同じところでつまずいて,解決できていたような気がしたので(しかしその方法は放置している間にすっかり忘れていた)記事にしておきます。

ところでこれまでの方法で設定するとR起動時に「起動準備中です - 警告メッセージ: Setting LC_CTYPE=ja_JP.cp932 failed」などと出たうえ、plotなどでR Graphicsデバイスを呼び出したときにメニューが文字化けしてしまうので誰か助けて下さい><

これはどうもこの問題のようなのですが,何をいっているのかさっぱりわかりません。Sys.setlocaleが失敗することがあるという問題のようです(そしてRのバグではなくWindowsの問題らしい)。ESSのパッチを提供するのがスマートなんだと思いますが,LISPわかりません。とりあえずその場しのぎの解決策です。普通に

Sys.setlocale(locale="CP932")

とやってもエラーが返ってきます。いろいろと試してみたところ,

Sys.setlocale(locale="Japanese")

もしくは

Sys.setlocale()

でlocaleを変更できました。後者ですが,引数localeの初期値は""(空の文字列)となっていて,そのまま実行すると,システムのデフォルトのlocaleを設定する,という動作になる,とhelpに書いてました。下の二つのどちらかを.Rprofileに書き足しておけば毎回自動で設定されます。Sys.setlocale(locale="Japanese")のほうが安全かもしれません。

あと,僕の環境ではinit.elに以下の設定が必要でした。

(setq ess-pre-run-hook
  '((lambda () (setq default-process-coding-system '(cp932 .   cp932))
   )))