UTF-8 で,shell-command とか。

どもです。
色々と絶不調です。

NTEmacs スレから抜粋。

945 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2011/12/12(月) 21:01:47.21
Emacs と Cygwin を両方共 UTF-8 で運用している状態で
shell-command に日本語のパラメータを渡すことが出来ている方はいらっしゃいませんか?

946 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2011/12/15(木) 20:41:38.31
>> 945 UTF-8 にしてるけど、shell-mode では、漢字は
渡せるし、表示も問題なし。

聞いているのは、M-x shell-command での日本語パラメータが
渡らないということでしょうか。

この書き込みは自宅から、一方NTEmacsは会社で利用しているので、
明日試してみます。

948 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2011/12/15(木) 22:10:11.44
>>946
そうです。shell-command の方でだけ漢字が渡せなくて困っています。
(shell-command "echo 漢字") を実行すると以下になります(ロケールはUTF8に設定)
bash: unexpected EOF while looking for matching `"'
bash: シンタックス エラー: 期待してないファイルの終了

この部分だけどうしても解決しなくて困っていたので助けていただけるとすごく有難いです。

ちなにみ gnupack での Emacs は ターミナル、Emacs ともに sjis をデフォルトのエンコードにしているためか
(shell-command "echo 漢字")は正しく"漢字"が表示されます。

949 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2011/12/16(金) 09:34:41.28
>>945

>>912, >>917

912 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2011/11/09(水) 12:23:47.50
Windows版の Emacs から外部プロセスを立ち上げる際の引数と渡せる
文字列はコードページに依存。
つまり、一般的な日本語環境では cp932 に矛盾しない文字列しか渡せない。

ユニコードAPIを使うようにすれば改善できるかも。
そうする予定があるのかどうかは知らん。


coding-system-for-{read,write} 使えば,なんとかなった。

(let ((coding-system-for-write 'sjis-dos))
  (shell-command-to-string "echo 漢字"))
=> 漢字


ワタシの環境はというと,Windows XPSP3, Cygwin1.7系,NTEmacs23.2。
んで,

(getenv "LANG")
"en_US.UTF-8"

と。ja_JP.UTF-8 でも問題ないと思う。


ちなみに,その前の grep はというと,

(defadvice compilation-start (around compilation-start-message-coding-ad activate)
  (let ((coding-system-for-read 'utf-8)
        (coding-system-for-write 'sjis-dos))
    ad-do-it))

でいける。
以下のような感じ。

-*- mode: grep; default-directory: "e:/cygwin/home/whitypig/" -*-
Grep started at Fri Dec 16 17:16:28

grep -nH -e 森鴎外 ~/.emacs.ntemacs.el
/home/whitypig/.emacs.ntemacs.el:1719:;森鴎外

Grep finished (matches found) at Fri Dec 16 17:16:28


ただし,関数 compilation-start にアドバイスしているので,
結構影響がでかいと思われます。
何か問題があったら,grep なりにアドバイスすればいいと思う。
確か,以前スレみていて気になって grep を追ったら compilation-start 関数を
使っていて,どうせならと,こいつにアドバイスした,という記憶がある。


で,shell-command についてはというと,compilation-start と
同様のアドバイスを書けばいいと思うお。

まとめ

cygwin 付属の emacs だと emacs -q で起動して,日本語 grep ったり,
shell-command ったりしても何の問題もないのに,
なぜに NTEmacs だと問題が起こるのだろう。