NTEmacs スレッド 3at SOFTWARE
NTEmacs スレッド 3 - 暇つぶし2ch2:名無しさん@お腹いっぱい。
12/01/03 16:13:00.92 t/ZxS1ba0
あけ おめ
いち おつ

3:名無しさん@お腹いっぱい。
12/01/03 17:22:44.96 rh0nNg7R0
おつかれちゃーん

4:名無しさん@お腹いっぱい。
12/01/04 14:39:02.42 lsfAYx+x0
おいおい、落ちちゃうぞ?

前スレ最後のテンプレ案に出てきてはじめてGNU emacs(x64)の存在を知った。
mingw64でもビルドできたりしないかな……。




5:名無しさん@お腹いっぱい。
12/01/04 15:12:26.78 wQvsaw290
emacs64って速いのかなぁ
整数扱える範囲も28+32bitになってたりするんだろうか

6:名無しさん@お腹いっぱい。
12/01/04 16:04:40.25 lsfAYx+x0
most-positive-fixnumは 2305843009213693951 だった。
0x1FFFFFFFFFFFFFFF だね。


7:名無しさん@お腹いっぱい。
12/01/04 22:18:15.90 wQvsaw290
そういえば gnupack はなんで cygwin 版の ghostscript を使わず
windows 版の ghostscript を使ってるんでしたっけ?

8:名無しさん@お腹いっぱい。
12/01/05 00:46:13.44 ABXgjFQC0
>>7
またスレ違いとか怒られそうだけどコメントすると,
w32tex.orgで配布されているバイナリが本家と違い
オプション -dWINKANJI を使えるから,です.

とはいえ,cygwin版をそもそも試したことがないので,
なんかメリットがあれば教えてもらえると嬉しいです.

それ以前に -dWINKANJIが日本語を含んだテキストの印刷に
関係あるのかも確かめてませんが…


9:名無しさん@お腹いっぱい。
12/01/05 00:54:28.74 YPyNZ/pE0
>>8
自分もこれから試そうかな状態なんですけど、以下の記事見てる感じだとcygwin版でも日本語扱えそうな感じがしたので。
URLリンク(www.akamoz.jp)
単純にこっちだと cygwin 側からも使いやすくていいかなーと。

それだけじゃなんなので・・・
doc-view.el も doc-view-ghostscript-program を設定してあげれば NTEmacs でも動くんですね。
まあ例によって日本語のファイル名だと動作が怪しいんですが・・・ coding-system-for-write を cp932 にしてるのに
ちゃんと動いてくれないorz

10:名無しさん@お腹いっぱい。
12/01/05 22:58:02.05 FV196OAg0
先日からGNU Emacs(x64)を使ってみてるんだが、あまりにも普通に使えるんで
拍子抜けするくらいだ。

最近の32bit版Emacsの最大バッファサイズは512MB(29bit)とかなりデカいので、
64bit版のメリットを感じる局面は少なさそうだが。


11:名無しさん@お腹いっぱい。
12/01/06 08:00:04.96 Djs4uktl0
オレはお小遣い帳のオーバーフローで困っていたので重宝してるぜ。

12:名無しさん@お腹いっぱい。
12/01/06 11:37:50.26 32ImYPDp0
どんだけ金持ちなんだよ

13:名無しさん@お腹いっぱい。
12/01/06 22:53:40.47 +e52v7mM0
太陽までの距離をミリメートルで表すみたいなもんだな

14:名無しさん@お腹いっぱい。
12/01/07 07:32:00.94 UAsDCrJT0
GNU emacs(x64)って見たところかなり良さそうだな。
ただ、試す環境がねーw
値段は16bitで足りそうだが、俺の小遣い15bit...


15:名無しさん@お腹いっぱい。
12/01/07 10:22:45.50 vK4dGno00
正直32bitメモリ空間で足りなくなるような編集してないんだけど、
64bitになって動作が早くなったとかのメリットもあるんだろか。

16:10
12/01/07 10:47:35.97 s9gwTyDN0
64bit化のメリットじゃないけど、migemoが速いメリットはあるねぇ。
あと、使える機能が少ないとかいうデメリットも特にないので、俺はすっかり
乗りかえてしまったよ。


17:名無しさん@お腹いっぱい。
12/01/07 10:48:12.40 vK4dGno00
Windows7 だとショートカットのエンコーディングが UTF-16LE になってるから
w32-symlinks.el そのままじゃ使えないのな・・・

18:名無しさん@お腹いっぱい。
12/01/07 12:50:16.92 Uf6hhNET0
64bit版ってAtokのインライン入力や
シェルの日本語も問題ないですか?


19:名無しさん@お腹いっぱい。
12/01/07 20:32:01.56 uhw/noU50
こんなの発見
URLリンク(alexpogosyan.com)

20:名無しさん@お腹いっぱい。
12/01/09 20:48:16.35 vzJJrbOK0
cygwin(bash) + ansi-term がうまく動いてくれないんだけど
ちゃんとうごかせてる人いる?
素の bash だと画面がガタガタになるわ
fakecygpty 版の bash だと何故か入力の echo バックだけないわで・・・

21:名無しさん@お腹いっぱい。
12/01/13 23:14:02.61 bXOOfvoQ0
64bit使ってみたけど、
32bit版と比較すると-Qで起動しても
初期状態で仮想メモリ500MB消費してるってどうなの??

22:名無しさん@お腹いっぱい。
12/01/14 13:26:39.01 I+7L8gDO0
emacs -qで起動した時のprivate working setサイズは20MBくらいだったが……。



23:名無しさん@お腹いっぱい。
12/01/14 13:42:45.03 6Q86Bflf0
migemo の dll 版を直接使用しているとかが関係してるんでないの?

24:名無しさん@お腹いっぱい。
12/01/14 13:57:18.64 vH9FIkkO0
多分ページ管理のオーバーヘッドでしょう。
x64(4Kバイトページ)では0.2%程度のメモリがページ管理に使用されるけど、
デフォルトで256G予約という事なので256G×0.2%で理論値どおり。

メモリ予約サイズは環境変数EMACS_MAX_HEAPで制御可能とどこかに書いてあった。

25:名無しさん@お腹いっぱい。
12/01/14 16:40:03.73 I+7L8gDO0
そう言われてコミットサイズを見るとたしかに500MB超えだった。なるほど。
まあ、そのサイズ分予約されてるだけなんで、あまり気にならんが。



26:名無しさん@お腹いっぱい。
12/01/14 17:06:57.43 vH9FIkkO0
いや、その500MBは管理用領域として実際に使っている。
デフォルト256Gというのは取り過ぎ。

環境変数EMACS_MAX_HEAPを実メモリの1-2倍程度にしとけばいいんじゃないかな。
EMACS_MAX_HEAP=8Gで37MB

27:名無しさん@お腹いっぱい。
12/01/14 18:13:17.36 6Q86Bflf0
実際どんな状況になったら 256G 使うような編集が出来るようになるんだろう
1年ぐらい立ち上げっぱでバッファ開きまくりとか?

28:名無しさん@お腹いっぱい。
12/01/14 19:58:48.13 vH9FIkkO0
動画編集.elとか。

29:名無しさん@お腹いっぱい。
12/01/22 17:56:41.06 5Z+Ppx1F0
GNU emacs(x64)ってパッチは公開してくれないんだろうか…

30:名無しさん@お腹いっぱい。
12/01/22 18:10:04.35 Yyw+NgFP0
インストールすればdistfilesにまとまってると思うけど。

31:名無しさん@お腹いっぱい。
12/01/22 23:55:33.92 Umt0OHuw0
emacs-24.0.92-20120120.exe で C-g (keyboard-quit)で落ちるのは
拙者だけでしょうか。

32:名無しさん@お腹いっぱい。
12/01/23 00:00:40.36 H0xs90tb0
gnupackで配布している奴?
うちでは落ちなかったよ。

"GNU Emacs 24.0.92.1 (i386-mingw-nt6.1.7601) of 2012-01-20 on GNUPACK"
on Windows 7 64bit

33:名無しさん@お腹いっぱい。
12/01/23 00:03:13.68 H0xs90tb0
ちょっと関係ないけど公式で配布しているemacsバイナリよりemacs-init-timeが0.1秒縮まったぜ。

34:名無しさん@お腹いっぱい。
12/01/23 00:58:09.81 EgzmNGiW0
>>32
URLリンク(sourceforge.jp)
ページにある
URLリンク(sourceforge.jp)
ですが、それって64bit版?

35:名無しさん@お腹いっぱい。
12/01/23 09:58:44.57 H0xs90tb0
>>34
そう、それ。
i386だから32bitじゃない?

36:名無しさん@お腹いっぱい。
12/01/23 12:18:16.13 X35yT3fq0
>>35
WinXPで使用32bitと思っていたが、>>32で「on Windows 7 64bit」あったので。

37:名無しさん@お腹いっぱい。
12/01/23 12:21:16.38 X35yT3fq0
>>35
別のWinXP上もC-gで確実に落ちる。
>>868 24.0.90-20110929 の時と全く一緒。
24.0.90-20111008 ~ 24.0.92-20111211 で問題なし。"877" で対処法あり。

38:名無しさん@お腹いっぱい。
12/01/23 12:27:56.02 1Ao5HnVj0
URLリンク(d.hatena.ne.jp)
> 追記:configureのオプションを間違えたっぽく,C-g連打で落ちる問題が発生します.大変申し訳ありませんが,ひとまず,上記の公開は一旦停止とさせてください.

39:名無しさん@お腹いっぱい。
12/01/24 14:15:54.15 BF8UBuaz0
>>38
emacs-24.0.92-20120123.exe でWinXPでもC-gで落ちるのがなくなりました。ありがとうございました。

40:名無しさん@お腹いっぱい。
12/02/01 02:35:44.16 gYM/XltW0
教えてください。dired 上で日本語のファイル名は表示できているのです
が、'f' で開こうとすると

File no longer exists; type `g' to update dired buffer

とか言い出す始末です。設定はいろいろ試しました。

環境
Windows 7
GNU Emacs 23.1.50.1 (i386-mingw-nt6.1.7601) of 2009-11-03 on LENNART-69DE564 (patched)


試した設定

(set-language-environment "Japanese")
(prefer-coding-system 'utf-8)

上記だけだと表示もままならないので

(set-language-environment "Japanese")
(setq file-name-coding-system 'utf-8-dos)

にすると表示はできるようになりますが、例のエラーがでます。他の
coding-system も試しましたが上手くいきません。このエラー自体は、
file-exists-p が nil を返すのが問題なようです。教えてください。


41:名無しさん@お腹いっぱい。
12/02/01 07:02:27.89 KMcBtz2x0
これでどうかな?

;;(set-language-environment "Japanese")
(prefer-coding-system 'utf-8)
(setq default-file-name-coding-system 'japanese-cp932-dos)

42:名無しさん@お腹いっぱい。
12/02/01 20:24:35.35 l7IHGIxX0
ダメ文字でしょ。
回避できるようなのを file-name-handler 利用して作ったことがあるけど、
虚しくなって使っていない。


43:名無しさん@お腹いっぱい。
12/02/01 21:01:45.67 M7L4rzja0
ダメ文字対策はcのソースレベルでパッチ書いてる人いたけど
あの手のが未だに残ってるってのも結構どうかと思う。

44:名無しさん@お腹いっぱい。
12/02/01 22:10:11.76 My5Xm7Vv0
windowsとemacs間のファイルアクセスにはにSambaを噛ませる実装にしちゃえよと

45:名無しさん@お腹いっぱい。
12/02/01 23:10:49.08 zpEoraJw0
ダメ文字って何?

46:名無しさん@お腹いっぱい。
12/02/02 00:22:55.75 mVCrnzq00
>>45
URLリンク(ja.wikipedia.org)

47:名無しさん@お腹いっぱい。
12/02/02 08:12:08.97 rWLN835Q0
いやいや、japanese-cp932-dos使えば、\を2バイト目に含んだ

芸能界\構わない.txt
芸能界\表示方法.txt

とか、普通にdiredとかfind-fileできるけど?

48:名無しさん@お腹いっぱい。
12/02/02 13:18:01.39 i6nEH/J60
>>47
芸能界 は?


49:名無しさん@お腹いっぱい。
12/02/02 13:20:24.13 i6nEH/J60
違った。

芸能界\一覧表

とかは?


50:名無しさん@お腹いっぱい。
12/02/02 13:25:14.09 rrL9j/ec0
文字コードの設定しなくてもだいじょうぶなんですけどね。

51:名無しさん@お腹いっぱい。
12/02/02 15:35:55.72 uCMIUj4R0
俺のところだと「一覧表」って名前のフォルダ「がある」フォルダに dired で移動しようとするとアウト。
version は GNU Emacs 23.3.1 (i386-mingw-nt6.1.7601) of 2011-08-15 on GNUPACK

c:\users\hogehoge\documents\一覧表 ってフォルダがあった場合、
c:\users\hogehoge から documents に移動しようとすると
Format specifier doesn't match argument type がでる。

ちなみに file-name-coding-system は cp932
gnupack 標準配布の状態から設定変更なしな。

52:名無しさん@お腹いっぱい。
12/02/02 15:38:14.31 uCMIUj4R0
なお、file-name-coding-system を japanese-cp932-dos にしても同様だった。

53:名無しさん@お腹いっぱい。
12/02/02 21:28:27.14 437kxkcG0
ソース見たけどfile-name-coding-systemでどうこうできる問題じゃないよ。

54:名無しさん@お腹いっぱい。
12/02/03 00:22:06.23 w6abHYAa0
おお、ファイル名(含むフォルダ名)の「末尾」の文字の
2バイト目が0x5cのときだけダメなんだな。

55:名無しさん@お腹いっぱい。
12/02/03 03:39:43.25 w6abHYAa0
NTEmacs23.2 Shift_JISパッチ (日々の反省1)

URLリンク(highmt.wordpress.com)

で公開されているパッチを、23.3のソースに(一部手動で)当て直したもの。
※上記のパッチで '' になってる部分は、'\0'が抜け落ちたものとして補完してある

URLリンク(www1.axfc.net)

gnupackで公開されてるemacs-23.3-ime-2012-01-22.patchを当ててから、
こいつ(emacs-23.3-cp932-damemoji.patch)を当てると、
「一覧表」フォルダがあるフォルダにもdiredで移動できるようになったよ。

56:名無しさん@お腹いっぱい。
12/02/04 10:24:14.53 GXKnhdMA0
前スレ>>919です。
前スレ>>919のパッチはframe-parameterのime-fontの設定は使用していなかっ
たのを、使用するようにしました。

URLリンク(www1.axfc.net)


57:56
12/02/04 10:27:05.33 GXKnhdMA0
どれへのパッチか書き忘れてました。
>>56
emacs-24.0.92 + emacs-24.0.92-ime-2012-01-22.patch
へのパッチです。

58:名無しさん@お腹いっぱい。
12/02/07 09:35:09.38 OOESHlIi0
56のパッチを当てたNTEmacs 23.4を使用しています。
普段常用している.emacs.d/init.elの中で、
initial-frame-alist(default-frame-alistにもコピー)にime-fontを追加すると、
最初にIMEをオンにした瞬間にw32fns.c/w32_abort()のダイアログが出て、
Emacsがappcrash(例外コード40000015)します。

デバッグ情報を含めてビルドした23.4のバイナリをgdbから起動して、
同じ事をすると、

Program received signal SIGTRAP, Trace/breakpoint trap.
0x760b3e2f in KERNELBASE!DeleteAce () from C:\Windows\system32\KernelBase.dll

となります。


59:名無しさん@お腹いっぱい。
12/02/07 09:40:31.85 OOESHlIi0
もちっと原因を絞り込めないかと調べてるところなんですが、

・56のパッチを当てたgnupackの24系、23.3系バイナリでも、
 普段常用している.emacs.d/init.elを読み込むと同じ結果(appcrash)になる
・ime-fontの設定を外して、フレームのfontをそのままIME用に使うと
 正常に動作する
・initial-frame-alistやw32-ime-initializeなど最小限の設定のみを書いた
 minimal.elを作成し、-Q -l minimal.el で起動すると、
 正常に動作する(ime-fontで指定したフォントがIME用に使われる)


60:名無しさん@お腹いっぱい。
12/02/07 09:42:02.88 OOESHlIi0
これは、普段読み込んでいるelispパッケージの何かとコンフリクトしている
のではないかと思い、

・minimal.el に.emacs.d/init.elの内容を少しずつ追加していったら
 auto-install.elを読み込んだ後、auto-install-compatibility-setupを
 呼び出すとappcrashした

ので、auto-install.el おまえcarっと、確認のために、

・minimal.elに最小限の設定 + auto-intall.elの読み込みと
 auto-install-compatibility-setup を追加した場合には正常に動作する

直接コンフリクトしているのではないみたい。ちなみに、

・普段常用している.emacs.d/init.elの場合は、
 auto-install-compatibility-setupの内容の末尾にある
 message(4行ぐらいミニバッファに表示する)をコメントアウトすると、
 正常に動作する。


61:名無しさん@お腹いっぱい。
12/02/07 13:12:16.15 8Am6ImpY0
>>58
そのパッチは使ってないので経験則だけど、そういう症状はGCがらみの場合が多い。
frame_param_ime_fontが怪しい。

62:名無しさん@お腹いっぱい。
12/02/08 00:10:23.90 Hk5HSa8l0
GNU Emacs(x64)使ってみたけど、32bit版に比べて遅い気がするんだが・・・。
何処といわれるとパフォーマンス計測したわけじゃないので明言はできないが、
EDEでC++ソースなどを開いた際や編集した際に
semantic-dbやlispによるパースなどが行われているのか
数秒間固まる事がある。
タスクマネージャーでCPU時間をみてると5秒間ずっと17%ぐらい占有したままの状態になった。
結構頻繁にあるので困ってます。
32bit版でも、同様のシチュで重くなることはあるけれど
64bit版にくらべるとかなり軽微な感じでした。


63:56
12/02/08 07:19:40.89 AVQtr/kd0
>>58
あらら…私の環境では起きなかったので気付きませんでした。すみません。
私も調べてみたいとおもいますがどうもうまく現象が再現できません…
(auto-install.el読み込み後auto-install-compatibility-setup呼び出しても
起きない)

>>61
GCまわり詳しくないのですが何か手がかりになりそうな情報ご存知でしたら
ご教示いただけるとありがたいです。


64:名無しさん@お腹いっぱい。
12/02/08 23:31:00.94 qnFaBhYI0
>>63
スマン。
最近のemacsはコンサーバティブGC使ってるので>>61はウソだ。忘れてくれ。

65:58
12/02/10 10:43:26.75 mEKuvN1H0
>>56
いえいえ、わざわざ調べてもらってすいません。
私自身も普段はime-fontを設定していない(フレームのfontをそのまま利用)しているのですが、せっかく現象が起きる環境があるので、試行錯誤の末、ime-fontを設定した場合でも問題が起きない実装にしてみました。

URLリンク(www1.axfc.net)

どうやら、58さんがスレ2で作成したパッチのうちの、
>#あと w32_set_ime_font 呼び出しを w32_set_ime_conv_window 内へ移動。
が、appcrashを起こす原因になっていたようです。

それ以前の実装を参考に、WM_IME_NOTIFYでw32_set_ime_fontを呼び出し、w32_set_ime_conv_windowでは呼び出さないようにしたらappcrash
しなくなりました。

66:名無しさん@お腹いっぱい。
12/02/10 21:01:47.92 s9zV4+C80
以前からIMEとemacsでフォントが異なるのが気になっていましたが、
触発されていじってみました。23.4+IMEパッチ(2011年11月頃)へのパッチです。
(フォント設定の修正だけでなく、プロトタイプ宣言の追加等も入っていますが、
うまく切り出せなかったのでご容赦)、パッチのオフセットはずれていると思います。
当初、フレームの日本語フォントとime-fontの設定を分ける意義がわからなかっ
たので、フレームの日本語フォントと同一にするだけにしようと思っていました
が、ime-fontで別フォントにする機能もなんとなく作りこんでしまいました。

・フレーム属性ime-fontにfontset名またはxlfd名を指定できます。
・指定がない場合はフレームの日本語フォント("あ"を表示するフォント)を使用します。
・フォントのサイズはface-font-rescale-alistの設定を適用します。
・フォント設定(w32_set_ime_font)と、変換ウインドウ位置設定(w32_set_ime_conv_window)呼び出しの最適化。
URLリンク(hp.vector.co.jp)

>>62
32bitでsemanticは使ったことがなかったので、こんなもんかと思っていましたが、
プロファイルかけてみます。

67:名無しさん@お腹いっぱい。
12/02/11 00:33:00.21 nKPAwUza0
>>66
さっそくバグ発見してしまったので、差し替えました。
2/11 0:28以前に取得した方は再取得してください。
ime-fontにfont-specも許すようにしました。(こんなの誰が使うんだ?)

(default-frame-alist
`((ime-font . ,(font-spec :family "あずきフォント" :size 12))))

68:56
12/02/11 11:41:47.05 NIqELbOX0
>>65
解決してよかったです。自分のしょぼいパッチが迷惑かけたかと思って冷や汗
ものでした^^;

>>66
#…もしかしてBOWの方?
ime-fontの設定しなくても日本語部分のフォント使うんですね。すごいです。

ただ、(>>65,>>66 どちらもで)ちょっと気になるので一点だけ。
w32_set_ime_fontの呼び出しがそこだと

・2つフレーム開く
・一方のフレームでフォント設定変える
・「IME ONのまま」フレームを切り替える
(frame-parameterのime-fontの設定はなし)

などとするとフォントがあわなくなるようです。
#まあ、普段そんな使い方してるわけではないので気にしなければいいだけですが

よくわかってないですがとりあえずWM_IME_NOTIFYで
wParam == IMN_OPENSTATUSWINDOWの時にもw32_set_ime_fontを呼び出すように
してみるとうまくいっているような気がします。


69:58
12/02/11 11:59:26.43 P9EhUiC30
>>66
>当初、フレームの日本語フォントとime-fontの設定を分ける意義がわからなかっ
>たので、フレームの日本語フォントと同一にするだけにしようと思っていました
>が、ime-fontで別フォントにする機能もなんとなく作りこんでしまいました。

これは、当初の実装でフォントセットを正しく扱うのが(当時のパッチを
書いた人にとって)面倒だったからじゃないかと思ってます。

フォントセットでASCII部分と日本語部分に別のフォントを割り当てた場合、
フレームのフォント(hfontでハンドルが得られるやつ)は、ASCII部分の
フォントで、IME用にこれをそのまま割り当てると、それが英語フォント
だった場合は、(暗黙または明示的な)フォントリンクによって、
日本語部分とは別のフォント(たとえばMS UIゴシックなど)が
IME用に使われてしまいます。

で、正統的な解決法はOOTAさん(じゃなかった、66の中の人)みたいに
日本語部分のフォント(のうちのどれか)を取得して設定することなんだけど、
それが面倒だったので、「ime-fontで明示的に設定してね」ってやった
のではないかと。

フォントセットの日本語部分のフォントを取り込めるなら、ime-fontを使う
場面は、「目が悪いので変換時はデカイフォントがいいんじゃ」みたいな
ものしか思い浮かびません...

70:名無しさん@お腹いっぱい。
12/02/11 17:20:38.51 nKPAwUza0
あっヤバいことに気づいてしまった。ハングしないのはまぐれですね。w
wndメッセージを処理するスレッドとlispスレッドは別なので、
メッセージループから直接lispデータに触っちゃだめじゃん。

71:名無しさん@お腹いっぱい。
12/02/11 20:30:34.55 NIqELbOX0
gnupackのemacs-23.3-ime-2011-03-13.patchではsrc/w32term.cの
w32_read_socketでやってますね。最初見たときなんでここでやってたのか
よくわかりませんでしたが>>58さんの現象、たぶんここ変えちゃったからです
よね。


72:58
12/02/12 00:24:35.21 600xHArL0
あー、2011-03-13で、w32fns.cのWM_IME_NOTIFY受け取ったところで、
my_post_msgでWM_MULE_IME_SET_FONTをポストしてるところだ。
で、w32term.cのほうでそのメッセージを受け取ってw32_ime_fontを
呼んでIME用フォントの処理をする、と。
こんなまだるっこしいことしてるのはスレッドが別だからなのか。

確かに、gdbで挙動追いかけてるときに、ime-fontの指定があるときに
呼び出してるfill_in_logfont()でクラッシュすることが多かったんだけど、
そこでもさらにいろいろlispデータにさわってます。

73:66
12/02/12 10:43:37.82 wXQsDsdp0
my_post_msgでポストして、lispスレッドからset_ime_fontを呼び出すようにすると
何故かIMEフォントが設定できない。なにか間違ってるのだろうか…
RECONVERSIONの方もヤバそうだけど、こっちはwnd_procスレッドの方で結果を返さ
ないといけないから、厄介ですね。

>>56
> #…もしかしてBOWの方?
はい。

74:58
12/02/12 12:59:42.93 600xHArL0
gnupackのIMEパッチ(2011-03-13)を参考にして、論理フォントの生成と
IMEへのフォント設定を別の関数に分離してみたもの。
gnupackの最新IMEパッチ(2012-02-05)を当てた後で当ててください。
URLリンク(www1.axfc.net)

WM_IME_NOTIFYを受け取ると、my_post_msgでWM_MULE_IME_SET_FONTをポストし、
w32term.c/w32_read_socket()でそいつを受け取ったときに
論理フォントを生成する関数が呼び出されます。
なお、関数名は、わかりやすさを考慮して、元のw32_ime_font()から
w32_set_ime_logfont()に変更しています。

あと、68での指摘を受けて、WM_IME_NOTIFYで
wParam == IMN_OPENSTATUSWINDOWの時にも
同様にメッセージをポストするようにしています。

これで、w32_set_ime_font()は、生成済みの論理フォントを
IMEに設定するだけのシンプルな内容に戻りました。
こいつは、w32fns.c/w32_wnd_proc()の中で、
WM_IME_STARTCOMPOSITIONと
WM_MULE_IMM_SET_CONVERSION_WINDOWを
受け取ったときに呼び出しています。

75:56
12/02/12 14:09:45.26 hlYb7Nrh0
やはりBOWの中の人でしたかw さすがです。

#BOWって何?って人はBSD on Windowsでググってみてください

76:名無しさん@お腹いっぱい。
12/02/13 04:05:35.62 FNjIDW5z0
GNU Emacs(x64)ですが
23.4のビルド、デバッグでおこなわれてませんか?
実行するとサイドバイサイド系の警告吐くので、再配布パッケージがらみなのかな。

いちおう動作していた23.3と23.4のマニフェスト確認してみたけど
23.3がMicrosoft.VC90.CRT
23.4がMicrosoft.VC90.DebugCRT
になってました。



77:66
12/02/13 20:40:16.92 mH1EcHN70
うっ、すみません。作り直します。
反応があるのはうれしいのですが、「ここはサポート掲示板じゃねーぞ」と
言われないようにblogかvectorの方にコメントしていただけると幸いです。

78:名無しさん@お腹いっぱい。
12/02/13 22:47:43.00 FNjIDW5z0
>>77
> うっ、すみません。作り直します。
> 反応があるのはうれしいのですが、「ここはサポート掲示板じゃねーぞ」と
> 言われないようにblogかvectorの方にコメントしていただけると幸いです。
あ、了解です、すいません。

79:56
12/02/18 15:26:50.93 wr6AxFQ70
>>58さんのパッチ(>>74)と>>66さんのパッチを組み合わせてみました。
パッチありがとうございます > >>58さん、>>66さん

emacs-23.4用
emacs-23.4 + emacs-23.4-ime-2012-02-05.patchにあててください。
URLリンク(www1.axfc.net)

emacs-24.0.93用
emacs-24.0.93 + emacs-24.0.93-ime-2012-02-05.patchにあててください。
URLリンク(www1.axfc.net)


80:56
12/02/18 15:27:30.58 wr6AxFQ70
>>79の続き

・gccでのビルドだとフォント名が日本語のものがIMEのフォントに設定できな
かったので
strcpy(ime_logfont.lfFaceName, SDATA(family)); を
strcpy(ime_logfont.lfFaceName, SDATA(ENCODE_SYSTEM(family)));
にしました。
#環境がないのでわかりませんがMSVCだと問題ないのかな。

・WM_MULE_IMM_SET_CONVERSION_WINDOWで毎回w32_set_ime_font()
((ImmSetCompositionFontProc)())を呼ぶのは冗長な気がしたので
(一応>>56のパッチでは設定が変わってなければ(ImmSetCompositionFontProc)()
は呼ばれないようにしていたつもり)、
w32_set_ime_logfont()後にメッセージを送ってw32_wnd_proc()で
w32_set_ime_font()を呼ぶようにしてみました。
#w32_read_socket()でw32_set_ime_font()を呼んでもIMEのフォントに設定
#されないようなので。
#よくわかってないけどこんなんでいいのかな…

>>68に書いた、フレームのフォントが異なるフレーム間をIME ONのまま移動
するとIMEのフォントがあわなくなる、というのがC-x 5 oとかで移動する場合は
なぜか起きなくなったのですがマウスクリックでの移動だと起きてしまいました。
IMEで文字入力を開始したときにWM_IME_NOTIFYでwParam==269なのが飛んできてる
ようなので、そのときもWM_MULE_IME_SET_FONTをポストするようにしてみると
一瞬違うフォントがみえることがあるけどIMEのフォントがあうようになったので
そうしています。#怪しいです^^;


81:名無しさん@お腹いっぱい。
12/02/22 06:45:03.81 /4oTnUTY0
>>79
emacs-24.0.03 の方ですが、
私の環境では、IME-on するたびに警告音がなります。
*Messages* バッファに、
completing-read-default: Wrong type argument: stringp, (nil . "jisx0208*-*")
などと出るのですが、私の環境だけ?
init.el の中を探してもそれらしい場所は見つからず。

82:66
12/02/22 20:30:49.70 hSyxfiZ10
RECONVERSIONがwindowスレッドからlispデータにアクセスしていてまずそうなので、
大改修しました。APC(Asyncronous Procedure Call)でLispスレッドに関数を送り込み、
Lispスレッドで処理します。メモリアロケータもwindowsスレッドから呼べるよう、
排他制御しました。IMEフォントもこの機構を使ってLispデータから情報を取るように
しました。ついでにIMR_DOCUMENTFEED(前後参照変換)にも対応してみました。(Win7/MS-IMEで動作確認)
IMEフォントの切り替えの作りこみが不十分(フレーム切り替えとか)だと思いますが、
しばらく時間的にいじれなくなるので、公開します。

x64版での変更からは独立するようにしたつもりなので、32ビット版でもいけると思っています。
2011年11月頃のimeパッチからの差分になっているはず(はずばかりで申し訳ない)

URLリンク(hp.vector.co.jp)
.\configure.bat --enable-w32-ime --cflags=-DRECONVERSION --cflags=-DDOCUMENTFEED

83:79
12/02/22 21:11:16.66 xKU2HDO30
>>81
emacs-24.0.93の方を使っていますが私の環境ではおきていません。
-qオプションを指定して起動してもおきますか?


84:66
12/02/22 22:15:12.16 hSyxfiZ10
申し訳ありません。>>82はいったんひっこめます。

85:名無しさん@お腹いっぱい。
12/02/22 23:34:25.15 /4oTnUTY0
>>83
お騒がせしました。init.el のせいのようです。
整理して 今やもう古い Meadow 用のコードを削除したら問題は起きなくなりました。
if (featurep 'Meadow) していたのですが。

86:66
12/02/23 00:42:20.81 olx80Nzh0
>>82を修正版で置き換えました。

87:名無しさん@お腹いっぱい。
12/03/10 19:05:50.22 t4q/afjt0
日本語対応NTEmacsとしてのgnupackが
URLリンク(gihyo.jp)
の本で紹介されてますね。お世話になってます

88:名無しさん@お腹いっぱい。
12/03/17 18:46:03.86 XvbyqTZV0
>>82
パッチを試してみようと思ったのですが,
適用元の状態が良く分からず,上手くいきません.

素のソースファイルとの差分パッチを公開いただくことは可能でしょうか?


89:名無しさん@お腹いっぱい。
12/03/24 13:06:53.58 SxgjRYmP0
>>88
x64版のパッチ(x64版インストール先のdistfiles/diffs-0.zip内のdiffs-0.diff)
を当てたemacs-23.4へだとすこし行がずれますが当たるみたいですよ。

90:名無しさん@お腹いっぱい。
12/03/29 04:31:40.87 AuwNBzPU0
gnupackのbasicとdevelってどう違うのん?

91:名無しさん@お腹いっぱい。
12/03/29 04:59:31.18 p1mA/s2G0
前スレ975が見ているかな。

gnupackのemacsで、
C-x C-fでTab補完するとc:c:/homeみたいになるのは、
file-name-shadow-modeをnilにすると直りました。
他への影響は分かりませんが。

URLリンク(stackoverflow.com)

92:名無しさん@お腹いっぱい。
12/04/24 14:33:05.38 lBglecSp0
Emacs始めようとしたのだが、背景白でまぶしくてかなわない。
お薦めのカラーセットはどうすればいいかな?

93:名無しさん@お腹いっぱい。
12/04/24 18:03:14.47 nVpKbGtS0
XP x86上で、gnupack氏のemacs-23.4-20120324.exeを使用しています。
IMEをオンにしていると、入力中にフレーム内の文字の一部が消えます。
消えた部分をカーソルでなぞるか、emacsをアクティブにし直せば再描写
されるのですが。
emacs-24.0.94-20120324.exeでも同様でした。
設定は、~/.emacs.d/init.elに以下のみで試しました。
;;;; -*- coding: utf-8-emacs-unix -*-
(setq default-input-method "W32-IME")
(w32-ime-initialize)

94:名無しさん@お腹いっぱい。
12/04/25 01:35:20.18 r7vCV1FQ0
>>93
私の所でもGoogleIMEを使うと起きます。ATOK、SKKでは起きないようです。
Win7の64bit ですが、GNU Emacs 64bit のほうがフレームが消える確率がかなり高いです。
ATOKに切り替えようかと思っていますけど、なおったらいいな。

95:名無しさん@お腹いっぱい。
12/05/16 14:56:21.52 cxeFk8Q90
emacs上でGoogle IMEを使っています。
(setq default-input-method "W32-IME")
(w32-ime-initialize)
init.elにこう設定をするとkanjiキー(半角全角キー)でIMEの状態をトグルできなくなってしまいます。
原因を探った所、どうやらkanjiキーを押すとemacsとGoogle IMEの両者が共に状態をトグルさせようとし、
その結果状態が2回反転され元の状態から変わらない、というカラクリのようでした。

(defun nop () (interactive) t)
(global-set-key (kbd "<kanji>") 'nop)
そこでその後ろでこうした所うまくトグルされるようになったのですがemacsがIMEの状態変化に気づけないようで
モードラインの最左が[Aa]のまま変化しなかったり、ON/OFF毎に設定しているカーソルの色が変化しなくなりました。
MS IMEではこの様なことは起こりませんでした。良い解決方は無いでしょうか?お知恵を拝借したいです。

emacs
This is GNU Emacs 23.4.1 (i386-mingw-nt6.1.7600)
 of 2012-03-24 on VMWIN2

Google IME
GoogleJapaneseInput-1.4.1031.0

96:名無しさん@お腹いっぱい。
12/05/17 11:51:11.09 ShWIaFJn0
>>93
>>95
gnupack emacsをWin7で使ってるけどフツーに使えとるよ。
ちなみに日本語関連の設定はこんなん

;;; 日本語環境の設定
(set-language-environment "Japanese")
(set-keyboard-coding-system 'japanese-cp932) ;; おまじないかも

;;; IME の設定
(setq default-input-method "W32-IME")
(setq-default w32-ime-mode-line-state-indicator "[--]") ;; おこのみで
(setq w32-ime-mode-line-state-indicator-list '("[--]" "[あ]" "[--]")) ;; おこのみで
(w32-ime-initialize)

;;; IME ON/OFF 時にカーソル色を変える。
(setq ime-activate-cursor-color "#00a000")
(setq ime-inactivate-cursor-color "#000000")
(set-cursor-color ime-inactivate-cursor-color)
;; ※input-method-activate-hook, input-method-inactivate-hook じゃない方がいい感じになる。
(add-hook 'w32-ime-on-hook
(function (lambda ()
(set-cursor-color ime-activate-cursor-color))))
(add-hook 'w32-ime-off-hook
(function (lambda ()
(set-cursor-color ime-inactivate-cursor-color))))


97:名無しさん@お腹いっぱい。
12/05/17 11:54:37.40 tgM9YAT40
>>95
Emacs なんだから
C-\ でいいじゃん。


98:名無しさん@お腹いっぱい。
12/05/17 15:29:54.49 rSHnBxSt0
>>96
詳細なレスありがとうございます。私もgnupack emacsをWin7で使っています。
.emacsに上記だけを書き試してみましたが、うまくいきませんでした。
IMEは何をお使いでしょうか?問題点は半角全角キーでIMEのON/OFFをトグルさせたいときにうまくいかないと言う点です。
IMEがMS IMEやSKKの場合はうまくいくのですがGoogle IMEの時はうまくいきませんでした。

>>97 IMEのデフォルトトグルキーである漢字キーを使い今までと同じように1キーで切り替えたいです。

99:名無しさん@お腹いっぱい。
12/05/17 16:04:24.51 tgM9YAT40
>>98

Google IME の設定でどうにかできないのなら
w32-ime-state-switch を書き換えて IME のモード変更を
しないようにすれば?


100:名無しさん@お腹いっぱい。
12/05/22 17:54:36.55 66uSsYXU0
ずっと前に効いた質問、やっと見つけた。
キーのリマッピングできるソフトはKeyRemap4MacBook

101:名無しさん@お腹いっぱい。
12/05/29 21:42:07.74 0/xVA/fQ0
>>98
96です。自分もGoogle IMEを使用しています。
現在自宅にいてVistaで実験してるのでなのでなんとも言えませんが。
私もできるだけ最小の構成でやってみたのですが、ちゃんとトグルしてまして...
やったことといえば、emacs/binをPATHに追加して、
.emacdはutf-8-unixで書いて以下の一文+>>96の設定をしただけです。
;;;; -*- mode: lisp-interaction; syntax: elisp; coding: utf-8-unix -*-

Google IME: 1.4.1031.0
emacs-version: GNU Emacs 23.4.1 (i386-mingw-nt6.0.6002) of 2012-03-24 on VMWIN2
参考に、Google IMEのキー設定のスクショ貼っときます。
URLリンク(up3.viploader.net)


102:93
12/05/30 19:21:59.83 ruui1a1X0
Microsoft Office IME 2010を使用していますが、20120527版でも症状変わらず。
20120205版に戻しました。

103:名無しさん@お腹いっぱい。
12/06/05 14:24:29.01 nopaml1A0
>>95の人とはまた別の問題だと思いますが、うちではバッファ切り替え時の
IME状態の引き継ぎがおかしいです。状態を引き継がない設定にしているんですが、

  1) あるバッファでIMEをOFFにしておいて、
  2) 別のバッファを開き、IMEをONにして、
  3) 元のバッファに戻ると、カーソルはIME ONの色、モードラインはIME OFFの表示、
    実際に入力するとIME ONになっている。
  4) ここで、半角/全角キーを押すと、モードラインはIME ONの表示に変わり、
    他はそのままで表示と状態の整合がとれる。

となってしまいます。何か対策はないでしょうか。

Windows XP SP3 32bit、MS IME スタンダード 2003、Emacsはgnupackの20120324版、
設定は付属のinit.elのカーソルカラー関連をアンコメントしています。

;; 標準IMEの設定
(setq default-input-method "W32-IME")
;; IME状態のモードライン表示
(setq-default w32-ime-mode-line-state-indicator "[Aa]")
(setq w32-ime-mode-line-state-indicator-list '("[Aa]" "[あ]" "[Aa]"))
;; IMEの初期化
(w32-ime-initialize)
;; IME OFF時の初期カーソルカラー
(set-cursor-color "red")
;; IME ON/OFF時のカーソルカラー
(add-hook 'input-method-activate-hook
(lambda() (set-cursor-color "green")))
(add-hook 'input-method-inactivate-hook
(lambda() (set-cursor-color "red")))
;; バッファ切り替え時にIME状態を引き継ぐ
(setq w32-ime-buffer-switch-p nil)


104:103
12/06/06 10:10:41.82 7L/DUxhl0
すみません。

× 状態を引き継がない設定にしているんですが、
○ 状態を引き継ぐ設定にしているんですが、

です。

105:103
12/06/10 22:42:16.67 FEHnwzBn0
>>103ですが、一応自己解決しました。

w32-ime-sync-stateという関数を書き換えて、
バッファが切り替わるたびにIMEのON/OFF((ime-get-mode)の値)に合わせて
activate-input-methodまたはinactivate-input-methodするようにすれば、いけました。

モードラインの表示も直接(ime-get-mode)の値を評価した方が良さそうだし、
他にももっと整理した方が良さそうだけど、一応動いてるからいいや。

106:名無しさん@お腹いっぱい。
12/06/19 02:13:33.95 sDwMx/S+0
Emacs初心者なのですが、現在設定ファイルを書いていて、c-x c-fなど、
起動時のワーキングディレクトリをホームディレクトリにするために、
(cd "~/")
を設定したのですが、反映できません。

(setq inhibit-startup-message t)
を追加したら、反映できたのですが、
なぜ、このようことがおきるのでしょうか?

OS: Windows 7 64bit
Emacs: emacs-24.1-20120616.exe (gnupackのもの)
環境変数: HOME=C:\home\watashi
備考: runemacs.exeから起動


107:名無しさん@お腹いっぱい。
12/06/19 06:28:19.61 fcBAEKql0
>>106
期待通りに動作しない原因については後でゆっくり自分で調べてもらうとして、
Windows なら、起動ショートカットのプロパティの中の作業フォルダを設定することで
「起動時のワーキングディレクトリをホームディレクトリに設定」できる。

108:名無しさん@お腹いっぱい。
12/07/03 05:06:02.81 +M8/O6gp0
24.1出たのでMinGWでコンパイルしようとしたけど
makeがいちいちアクセス拒否で死んで殺意覚える

109:56
12/07/14 15:59:53.99 1VzMGj390
>>93
XPでOffice IMEを使うと私のところでも発生しました。MS IME Standardだと
発生せず。

w32_wnd_proc() の WM_IME_STARTCOMPOSITION の処理で変換ウインドウを
設定した時だけデフォルトの処理(goto dflt)をするようにすると解消した
ようです。

emacs-24.1-ime-2012-06-16.patch後に当ててください。

URLリンク(www1.axfc.net)

文字が消えるのとは関係ないですがIMEフォント設定のところを少し変えて
みてます。


110:93
12/07/16 15:32:00.02 aYYPZ3Wn0
>>109
56さん、gnupackのksugitaさんありがとうございました。

111:名無しさん@お腹いっぱい。
12/07/25 16:36:22.96 URn2zDlY0
gnupack_devel-9.00 を利用しています。

utf-8でエンコードされた漢字を含むバッファに対し、M-| (shell-command-on-region)
を使って、grep 'あああ' のような漢字コードをパラメータに含むコマンドを実行する
ことは可能でしょうか?


112:名無しさん@お腹いっぱい。
12/07/26 01:12:54.75 CKSLCU8w0
>>111
まずは自分でやってみ

113:名無しさん@お腹いっぱい。
12/07/26 12:25:01.69 rAADqd/n0
>>112
やってみてだめなので。

"あああ
いいい"という文字列が入っているuft-8のバッファを全選択して、
M-|の後に(つづく..)

114:名無しさん@お腹いっぱい。
12/07/26 12:27:06.03 rAADqd/n0
■ (modify-coding-system-alist 'process ".*sh\\.exe" '(utf-8 . utf-8)) の場合

・sort ---> OK
・grep 'あああ' ---> エラー

115:名無しさん@お腹いっぱい。
12/07/26 12:29:25.86 rAADqd/n0
■ (modify-coding-system-alist 'process ".*sh\\.exe" '(utf-8 . cp932)) の場合

・sort ---> エラー
・grep 'あああ' ---> no output

116:名無しさん@お腹いっぱい。
12/07/26 12:48:28.58 FpcLvOKZ0
ここらへんすごく根が深いんだよね


117:名無しさん@お腹いっぱい。
12/07/26 13:09:36.45 rAADqd/n0
shell-command-on-regionから呼ばれているcall-process-regionにアドバイス
入れてみた。でも、どこかに影響が出そう。

(modify-coding-system-alist 'process ".*sh\\.exe" '(utf-8 . cp932))
(defadvice call-process-region (before ad-call-process-region activate)
(if (ad-get-arg 7)
(ad-set-arg 7 (concat "nkf -w | " (ad-get-arg 7)))))


118:名無しさん@お腹いっぱい。
12/07/26 15:58:33.92 rAADqd/n0
113のテストは、LANG=ja_JP.UTF-8 でしました。
これをLANG=ja_JP.cp932にして、processの入出力もcp932にすれば、
アドバイスの設定しなくてもうまくいきました。

だから、gnupackのデフォルト値はcp932なんですかね..。



119:名無しさん@お腹いっぱい。
12/07/26 16:30:24.37 FpcLvOKZ0
Windowsの仕様だったかでどっかがcp932決め打ちになってるってのだけは覚えてる
NTEmacsスレの過去ログでもそこらへん話題になってたはず
すっきりした解決策はなかったような

120:名無しさん@お腹いっぱい。
12/07/26 16:41:18.81 FpcLvOKZ0
自分の init.el 見て思い出した。
コマンド引数が cp932 決め打ちなんだった。
パイプで渡す内容が utf-8 なのは問題ないとしても grep 'ほげ' は cp932 で渡さないと行けないんだったと思う。


121:名無しさん@お腹いっぱい。
12/07/26 17:17:09.94 rAADqd/n0
・コマンド引数はcp932でなくてはならない
・コマンド引数とプロセスの入力に使うコーディングシステムは、同一でなくてはならない

ということですかね。

コマンド引数のコーディングシステムのみ指定できる変数があればいいのですが..。

122:名無しさん@お腹いっぱい。
12/07/26 17:31:44.18 FpcLvOKZ0
自分のとこも結局関数に advice つけて対処したよ。nkf は流石につかわなかったけど。
こんな感じ。

(defmacro in:set-function-coding-system (function decoding encoding)
"関数使用時のコーディングシステムを設定する.
関数 FUNCTION に対し、実行時に DECODING を `coding-system-for-read' に、
ENCODING を `coding-system-for-write' に設定する advice を作成、活性化する."
`(defadvice ,function (around
,(intern (format "in:ad-%s-coding-setup" function))
activate compile)
,(format "関数実行時のコーディングシステムを以下に置き換える.
`coding-system-for-read': %s
`coding-system-for-write': %s" (eval decoding) (eval encoding))
(let ((coding-system-for-read ,decoding)
(coding-system-for-write ,encoding))
ad-do-it)))

(set-language-environment 'Japanese)
(prefer-coding-system 'utf-8-dos)
(set-file-name-coding-system 'cp932)

(setenv "LANG" "ja_JP.UTF-8")

;; シェルコマンド呼び出しだけ入力をcp932でエンコード
(in:set-function-coding-system shell-command 'undecided 'cp932)
(in:set-function-coding-system shell-command-on-region 'undecided 'cp932)



123:名無しさん@お腹いっぱい。
12/07/26 17:35:10.32 FpcLvOKZ0
加えて grep、lgrep、rgrep にも同様の設定してた。
M-x shell ”以外” を設定しようとしてたって感じだなぁ。

(in:set-function-coding-system rgrep 'utf-8 'cp932)
(in:set-function-coding-system lgrep 'utf-8 'cp932)
(in:set-function-coding-system grep 'utf-8 'cp932)

124:名無しさん@お腹いっぱい。
12/07/26 18:03:28.34 rAADqd/n0
上記の設定だと、漢字の入ったリージョンに対し、

M-| grep 'リージョンにある漢字'

とすると、エラーになりませんか?

grepの入力が、utf-8を期待しているから。

125:名無しさん@お腹いっぱい。
12/07/26 18:18:33.27 FpcLvOKZ0
もう一個抜けてた。
結局その入力のギャップが解決しないから、異なるエンコードのファイルもまとめて検索できる
lv 付属の lgrep を使うようにしてパラメータと入力のギャップを埋めたんだった。

126:名無しさん@お腹いっぱい。
12/07/26 18:28:48.85 rAADqd/n0
やはりそうですよね。
なので、117 に行きついたのでした。M-| sort なども動くので。
でも、なんかエレガントでない。もっといい解決方法がないのかなぁと。

127:名無しさん@お腹いっぱい。
12/07/26 18:32:23.05 FpcLvOKZ0
ちなみに前に話題になったのはこれ
URLリンク(d.hatena.ne.jp)

パッチでも書くしか無いのかしらん

128:名無しさん@お腹いっぱい。
12/07/26 18:56:28.93 rAADqd/n0
>> 127
このページも参考として見ていました。

とりあえず、参考まで現在の私の設定です。

(set-language-environment 'Japanese) ; なくてもいいかも
(prefer-coding-system 'utf-8) ; なくてもいいかも
(set-file-name-coding-system 'cp932)

(setq default-process-coding-system '(utf-8 . cp932))
(modify-coding-system-alist 'process ".*sh\\.exe" '(utf-8 . cp932)) ; 上書き用

;; M-x shell 実行する際に必要な設定
(defadvice shell (around ad-shell activate)
(let ((coding-system-for-write 'utf-8))
ad-do-it))

;; 漢字を含むバッファを入出力として shell コマンドを実行する際に必要な設定
(defadvice call-process-region (before ad-call-process-region activate)
(if (ad-get-arg 7)
(ad-set-arg 7 (concat "nkf -w | " (ad-get-arg 7)))))


129:名無しさん@お腹いっぱい。
12/07/26 19:36:44.16 rAADqd/n0
↑ 以下も最初の方にあったほうがいいですね。
(setenv "LANG" "ja_JP.UTF-8")

gnupackの場合、config.iniでLANGを設定できるので、init.elには書いていないのです。

130:名無しさん@お腹いっぱい。
12/07/26 22:39:05.85 pzO+BvND0
おまいら凄いな-
参考になるのでもっとやってください。

131:名無しさん@お腹いっぱい。
12/07/26 23:19:50.82 TYT5Vlom0
>>130
漢字コードの件は、上記が今の自分の最善解なので、これ以上のネタなし。
その他に参考となりそうな設定なら晒せるけど、そんなんにここ使っていいんかな?

132:名無しさん@お腹いっぱい。
12/07/26 23:25:17.37 wXsUkde+0
イイヨイイヨー

133:名無しさん@お腹いっぱい。
12/07/26 23:43:37.79 TYT5Vlom0
文字制限に引っかかるのでちょびちょびで。いろいろなところで紹介しているもの
ばかりと思うけど。

134:名無しさん@お腹いっぱい。
12/07/26 23:50:41.94 TYT5Vlom0
;; windowsでファイルもしくはディレクトリを開く
(defun winstart (filename)
(interactive)
(w32-shell-execute nil (unix-to-dos-filename filename)))

;; ファイル名称をDOS形式に変換する
(defun unix-to-dos-filename (filename)
(replace-regexp-in-string "/" "\\\\" filename))

135:名無しさん@お腹いっぱい。
12/07/26 23:52:57.51 TYT5Vlom0
;; diredでwindowsに関連付けられたファイルを起動する
(define-key dired-mode-map "z"
'(lambda ()
(interactive)
(winstart (dired-get-filename nil t))))

;; diredで開いているフォルダをMS Explorerで開く
(define-key dired-mode-map "E"
'(lambda ()
(interactive)
(winstart (dired-current-directory))))

136:名無しさん@お腹いっぱい。
12/07/26 23:55:37.33 TYT5Vlom0
;; windowsで開きたいファイルか?
(defun windows-open-file-p (file)
(let (ext)
(if (and (file-regular-p file)
(setq ext (file-name-extension file)))
(progn
(setq ext (upcase ext))
(or
(equal ext "DOC")
(equal ext "XLS")
(equal ext "PDF")
)))))

137:名無しさん@お腹いっぱい。
12/07/26 23:57:40.44 TYT5Vlom0
;; find-fileのアドバイス
(defadvice find-file (around ad-find-file-winstart-setup activate)
(let ((file (ad-get-arg 0)))
(if (windows-open-file-p file)
(winstart file)
ad-do-it)))


138:名無しさん@お腹いっぱい。
12/07/27 00:00:07.56 7yNnR3yv0
;; find-file-other-windowのアドバイス
(defadvice find-file-other-window (around ad-find-file-other-window-winstart-setup activate)
(let ((file (ad-get-arg 0)))
(if (windows-open-file-p file)
(winstart file)
ad-do-it)))


139:名無しさん@お腹いっぱい。
12/07/27 00:01:31.43 PTD5vTzM0
パスの変換は自分はこうやってるなあ。
~/.emacs.d/bin とかを Emacs 上でのみパスに追加とかしたかったので相対→絶対の変換も入れてた。

(defmacro in:system-path (path &optional base)
"PATH をシステムで認識可能なパスに変換する.
PATH が相対パスの場合 `expand-file-name' で絶対パスに変換される.
BASE が non-nil の場合は絶対パス変換時の基準ディレクトリと見なす.
環境変数などの Emacs 外のプログラムに参照される場合に用いる."
(if (eq system-type 'windows-nt)
`(subst-char-in-string ?/ ?\\ (expand-file-name ,path ,base))
`(expand-file-name ,path ,base)))

140:名無しさん@お腹いっぱい。
12/07/27 00:02:52.80 7yNnR3yv0
以上で、dired がファイラみたいになる。とか。

136 の(equal ext "DOC") の行を増やすと、z でなく f や o で起動する
windowsアプリが増える。


141:名無しさん@お腹いっぱい。
12/07/27 00:17:47.91 PTD5vTzM0
equal ext "xxx" の羅列は流石に list と memq 使ったほうがいいんでないの?

(setq external-app-exts '("DOC" "XLS" "VBS")

...

(if (memq ext external-app-exts)

142:名無しさん@お腹いっぱい。
12/07/27 06:34:49.59 7yNnR3yv0
>>141
であれば、memberですかね?

143:名無しさん@お腹いっぱい。
12/07/27 06:37:01.29 7yNnR3yv0
>>139
こちらの方が汎用的ですね。

144:名無しさん@お腹いっぱい。
12/07/27 12:08:12.73 sdXRmEiY0
>>134 をまとめてシンプルにしてみた。

;; windowsでファイルもしくはディレクトリを開く
(defun winstart (filename)
(interactive)
(w32-shell-execute nil (replace-in-string filename "/" "\\\\")))

これで、フォルダでもファイルでも、Windowsのシェルに任せて開くことができる。
"/"の変換をしているのは、ファイルサーバの先のファイルなど、UNCのパスを
開くのに必要だったから。ローカルのファイルなどは、そのままでも開くみたい。


145:名無しさん@お腹いっぱい。
12/07/27 21:12:45.39 PTD5vTzM0
NTEmacs固有の設定ってしてるようで意外としていないなぁ。
region と cua-rectangle の色を SystemHilightText/SystemHighlightにしてWindows標準っぽくしてるぐらいか。

146:名無しさん@お腹いっぱい。
12/07/27 23:57:34.56 7yNnR3yv0
>>145
ntemacs から shell とか使うのに、設定必要ない?
shell 使う人って、あんまりいないんですかね?

147:名無しさん@お腹いっぱい。
12/07/28 00:02:58.84 5LyR8Hfz0
cygwin向けにエンコード設定したり bash じゃなく fakecygpty に差し替えたりとかしてるけど
NTEmacsだからというよりCygwin使うからって感じだしなぁ

あーあと印刷の設定もあるか。

148:名無しさん@お腹いっぱい。
12/07/28 00:16:50.48 Ai+fWoXo0
やっぱりそうですよね。このあたりが、ntemacsを使う敷居を高くしているような
気がする。

shell-mode の割り込みが効かないのにはエライハマって、以下のページでやっと
解決できた。

URLリンク(d.hatena.ne.jp)

これと、fakecygptyの差し替え両方で。

149:名無しさん@お腹いっぱい。
12/07/28 00:29:23.06 5LyR8Hfz0
>>148
このブログの設定に加えて、C-d もまともに動かなかったから
(defadvice comint-send-eof (around in:ad-comint-send-eof activate compile)
"直接 C-d を送信."
(process-send-string nil "\C-d"))
も追加してるなぁ

なんか色々不毛だよね

150:名無しさん@お腹いっぱい。
12/07/28 00:36:17.60 Ai+fWoXo0
不毛なの、もう一つ。ssh接続。

ちょっと前まで、plink使っていたけど、>>128 の設定にしてからうまく動かなく
なって、現在ハマリ中。

f_ssh.exe でうまくいきそう。

151:名無しさん@お腹いっぱい。
12/07/28 02:14:14.60 5LyR8Hfz0
設定見るとf_sshの設定やってたわ・・・TRAMP用、マルチホップ非対応のやつ

;; Tramp
(eval-after-load "tramp"
'(progn
(setq tramp-default-method "ssh")
;; fakecygpty 仕様の ssh に置き換え (マルチホップは未検証)
(when (executable-find "f_ssh")
(dolist (m tramp-methods)
(let ((lp (assq 'tramp-login-program m)))
(if (string= "ssh" (cadr lp))
(setcdr lp '("f_ssh"))))))))


152:名無しさん@お腹いっぱい。
12/07/28 08:10:03.04 Ai+fWoXo0
sshの先の漢字がうまくいかない。

153:名無しさん@お腹いっぱい。
12/07/28 21:19:20.70 Ai+fWoXo0
自己解決した。 >>128 の設定に追加。

;; >>128 の設定の.*sh.exeのcoding設定の後に以下を追加
;; この設定により、>>128 に書いた shell のアドバイスが不要となった
(modify-coding-system-alist 'process ".*f_bash\\.exe" '(utf-8 . utf-8))

(setq tramp-default-method "ssh")
(setq tramp-encoding-shell "f_bash.exe")

;; tramp による sshログイン時に漢字がでない原因を排除
;; URLリンク(www.gnu.org)
(let ((process-environment tramp-remote-process-environment))
(setenv "LC_ALL" nil)
(setq tramp-remote-process-environment process-environment))

;; explicit-shell-file-name に f_bash.exe を設定しているので、置き換える
(defadvice shell (around ad-shell-tramp-setup activate)
(if (file-remote-p default-directory)
(let ((explicit-shell-file-name "/bin/bash"))
ad-do-it)
ad-do-it))

154:名無しさん@お腹いっぱい。
12/07/28 21:21:30.87 Ai+fWoXo0
plink も f_ssh も使わなくても動いてしまった。
でも、以下の設定が正しい方法なのか、自身なし。

(setq tramp-encoding-shell "f_bash.exe")

155:名無しさん@お腹いっぱい。
12/07/28 21:22:39.83 Ai+fWoXo0
ついでに、ローカルで shell を使う設定もまとめておく。
>>148 のアドバイスも追加している。

(setq explicit-shell-file-name "f_bash.exe")
(setq shell-command-switch "-c")
(setq shell-file-name "bash.exe")

;; ssh の関数 の実装を流用して乗っ取る
(defadvice comint-interrupt-subjob (around ad-comint-interrupt-subjob activate)
(process-send-string nil "\C-c"))
(defadvice comint-stop-subjob (around ad-comint-stop-subjob activate)
(process-send-string nil "\C-z"))
(defadvice comint-send-eof (around ad-comint-send-eof activate compile)
(process-send-string nil "\C-d"))


156:名無しさん@お腹いっぱい。
12/07/28 21:26:11.29 Ai+fWoXo0
おまけ。

;; 新しくshellを起動する
(global-set-key "\C-cs"
'(lambda ()
(interactive)
(if current-prefix-arg
(shell (generate-new-buffer-name "*shell*"))
(shell))))

C-c s で *shell* バッファがなければ新たに開き、あれば遷移する。
C-u C-c s で、常に新規に shell を開く。開くときに、バッファ名の確認をしない。

157:名無しさん@お腹いっぱい。
12/07/28 21:45:49.84 vdxUByGZ0
shellってcygwinのを使うんですかね?
msysで何とかなりませんか?

158:名無しさん@お腹いっぱい。
12/07/28 21:49:59.74 Ai+fWoXo0
cygwin 付きの gnupack 9.00 でテストをしています。
msys は使っていないのでよくわかりません。 m_O_m

159:名無しさん@お腹いっぱい。
12/07/29 03:15:48.96 +uCMmoi10
>>136
>>141 のアドバイスに従い、見直してみました。

(setq external-app-exts '(
"DOC" "DOCX"
"XLS" "XLSX"
"PDF"
))

;; windowsで開きたいファイルか?
(defun windows-open-file-p (file)
(if (file-regular-p file)
(let ((ext (file-name-extension file)))
(if ext
(if (member (upcase ext) external-app-exts)
t
)))))


160:名無しさん@お腹いっぱい。
12/07/29 10:36:18.59 hvkl+NOR0
シェル絡みだとpop-shellがすごく使いやすい
;; URLリンク(www.emacswiki.org)
(autoload 'shell-pop "shell-pop" nil t)
(global-set-key (kbd "C-z C-z") 'shell-pop)

C-zC-z でポップアップウィンドウ上でシェルが開いて同じく C-zC-z でシェルの窓だけ閉じる。
ちょっとコマンドラインで何かしたい時にさっとひらけてさっと閉じられるから重宝する。

161:名無しさん@お腹いっぱい。
12/07/29 11:23:30.49 +uCMmoi10
>>160
入れてみた。すごく便利。


162:名無しさん@お腹いっぱい。
12/07/29 12:49:10.91 hvkl+NOR0
cygwinのバージョンあげたら
M-! が ↓の問題にひっかかるようになってうざい
URLリンク(stackoverflow.com)

163:名無しさん@お腹いっぱい。
12/07/29 13:19:35.18 hvkl+NOR0
というか >>162 の症状のおかげで gist.el が動かなくなってるよくそう
gist-list するとエラーが出るから見てみると
http -> Request is:
POST /api/v1/xml/gists/bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash:
(ユーザ名) HTTP/1.1

エラーメッセージまでリクエストに含まれてるという・・・・
なんとかして回避できないものか

164:名無しさん@お腹いっぱい。
12/07/29 22:19:13.33 +uCMmoi10
>>162
fakecygpty版のshellを使わずに M-x shell するとでるエラーと一緒だけど、
M-! の時に出るのはなぜだろう?

165:名無しさん@お腹いっぱい。
12/07/29 22:23:57.81 hvkl+NOR0
M-! の時は shell-file-name が使われるからかねえ。
shell-file-name は bash にしている。
f_bash は shell-file-name の方だと機能しないなぁ・・・

fakecygpty の改造でなんとかならないかな。

166:名無しさん@お腹いっぱい。
12/07/29 23:31:16.69 +uCMmoi10
gnupack 9.00 のcygwin を最新状態にして使っているけど、M-! は普通に動く
けどな。

# uname -a
CYGWIN_NT-6.1-WOW64 xxxx 1.7.15(0.260/5/3) 2012-05-09 10:25 i686 Cygwin

167:名無しさん@お腹いっぱい。
12/07/29 23:37:53.96 hvkl+NOR0
なんだろね、発生してる人としてない人の違いは。
EmacsWikiにも載ってるぐらいだから俺だけじゃないことは確かだと思うんだけど。
自分は gnupack は使わず個別に入れてる。

M-x version
GNU Emacs 24.1.1 (i386-mingw-nt6.1.7601) of 2012-06-10 on MARVIN

# uname -a
CYGWIN_NT-6.1-WOW64 XXXXX 1.7.16(0.262/5/3) 2012-07-20 22:55 i686 Cygwin

168:名無しさん@お腹いっぱい。
12/07/30 01:20:02.65 /TxL9z3D0
再度、cygwinを更新してやってみたが、やっぱりならない。

M-x version
GNU Emacs 24.1.1 (i386-mingw-nt6.1.7601) of 2012-06-16 on GNUPACK

# uname -a
uname -a
CYGWIN_NT-6.1-WOW64 hata-THINK 1.7.16(0.262/5/3) 2012-07-20 22:55 i686 Cygwin

169:名無しさん@お腹いっぱい。
12/07/30 01:22:49.19 /TxL9z3D0
emacs から開いた shell で。

# type bash
bash is /usr/bin/bash

170:名無しさん@お腹いっぱい。
12/07/30 09:19:57.67 gRz7kSxb0
そうするとgnupack配布版と公式配布版のコンパイル状況の違いとかもあるのかな?
とりあえずgnupackダウンロードしてみてそちらでも試してみます。
・・・残りダウンロード時間1時間て・・・

171:名無しさん@お腹いっぱい。
12/07/30 10:45:03.18 gRz7kSxb0
回避方法判明しました。
shell-command-switch に i が入ってたのが原因っぽい。
抜いたら当該エラーは出なくなった。
M-!でエイリアス使えなくなるのはちょっとうっとおしいけどバグ修正されるまで我慢の子だな・・・

172:名無しさん@お腹いっぱい。
12/07/30 18:29:47.47 pp0uMeZe0
原因分かって良かったですね。
後学のため。以下の方法で確認すれはよかったようです。

M-x trace-function-background -> shell-command -> RET
M-x trace-function-background -> call-process-region -> RET
M-! -> ls
*trace-output* バッファを見る。-> お互いに比較する。
M-x untrace-all

こんな感じの結果となります。

======================================================================
1 -> shell-command: command="ls" output-buffer=nil error-buffer=nil
| 2 -> call-process-region: start=1 end=1 program="bash.exe" delete=nil buffer=#<buffer *Shell Command Output*> display=nil args=("-c" "nkf -w | ls")
| 2 <- call-process-region: 0
1 <- shell-command: 0

>>117 のテストにもなることが分かりました。




173:名無しさん@お腹いっぱい。
12/07/31 18:02:38.83 T+386KjI0
GNU Emacs 24.1.1 (i386-mingw-nt6.1.7601) of 2012-06-10 on MARVIN です。

URLリンク(www.emacswiki.org) を参照してメールが送れないかと試してるんですが
(gnutls-available-p) が nil の環境だと自分でビルドしないと駄目でしょうか?

174:名無しさん@お腹いっぱい。
12/07/31 18:26:00.52 T+386KjI0
すいまんせん。言葉が足りませんでした。
cygwin の gnutls は入れてあって Gmail を読むことはできています。

175:名無しさん@お腹いっぱい。
12/07/31 19:33:43.93 k0i89/zE0
上記とは直接関係あるかはわからないけど、starttls-available-p の実装があんまりだった

(and (not (memq system-type '(windows-nt ms-dos)))
(executable-find (if starttls-use-gnutls
starttls-gnutls-program
starttls-program))))

Windows がいきなり弾かれてるし。

176:名無しさん@お腹いっぱい。
12/07/31 22:58:16.46 k0i89/zE0
ちなみに gnupack の配布物から gnutls 関係の dll を拾ってきて
GNU 配布版の emacs の bin ディレクトリに放り込んだら
gnutls-available-p は t になったよ。

177:名無しさん@お腹いっぱい。
12/08/01 16:13:47.20 ApV1PNj80
gnupack使うのが一番素直になるかな……

178:名無しさん@お腹いっぱい。
12/08/03 22:16:44.49 tRNxOJGn0
ちょっと前に >>117 の方法を考えたけど、この方法は結局文字化けを回避する
だけの方法で、外部プロセスに UTF-8 の出力はできていなかった。
どうにかならないかと調べていて、こんな方法があることが分かった。

(modify-coding-system-alist 'process ".*sh\\.exe" 'utf-8)
(defadvice call-process-region (before ad-call-process-region activate)
(if (ad-get-args 6)
(ad-set-args 6 (mapcar
'(lambda (arg)
(if (multibyte-string-p arg)
(encode-coding-string arg 'cp932)
arg))
(ad-get-args 6)))))

プロセスへの入出力はUTF-8としたまま、プロセスに渡すパラメータをCP932に
することができた。

179:名無しさん@お腹いっぱい。
12/08/03 22:25:38.07 tRNxOJGn0
上記のやり方を >>122 の内容を参考に、マクロで実現してみた。
intern のあたりの書き方が正しいのか、ちょっと自信なし。

(setenv "LANG" "ja_JP.UTF-8")

(set-language-environment 'Japanese) ; なくてもいいかも
(prefer-coding-system 'utf-8) ; なくてもいいかも
(set-file-name-coding-system 'cp932)

(setq default-process-coding-system 'utf-8)
(modify-coding-system-alist 'process ".*sh\\.exe" 'utf-8) ; 上書き用

;; サブプロセスに渡すパラメータの文字コードを cp932 にする
(defmacro set-function-args-encode (function args-number)
`(defadvice ,function (before ,(intern (concat
"ad-"
(symbol-name function)
"-args-encode-setup"))
activate)
(if (ad-get-args ,args-number)
(ad-set-args ,args-number
(mapcar '(lambda (arg)
(if (multibyte-string-p arg)
(encode-coding-string arg 'cp932)
arg))
(ad-get-args ,args-number))))))

(set-function-args-encode call-process-region 6)
(set-function-args-encode call-process 4)
(set-function-args-encode start-process 3)



180:名無しさん@お腹いっぱい。
12/08/03 22:30:06.32 tRNxOJGn0
これで、かなりの部分からcp932を排除することができた。

cp932で表現できない文字が入ったutf-8のバッファなどへも、M-| sort など
が正しく機能すると思う。M-| grep 'ほげほげ' の 'ほげほげ' の部分は、
cp932で表現できる文字でないとだめだけど、これをどうにかするには、
emacs が動作するコードページをcp932からutf-8に変える必要があるんだと思う。

181:名無しさん@お腹いっぱい。
12/08/03 22:34:39.79 tRNxOJGn0
コマンドプロンプトで、chcp 65001 とすると、コードページをutf-8にする
ことができる。(戻すには、chcp 932)

これと同様なことを emacs.exeでもできれば、完全にcp932を排除することが
できるような気がするんだけど..。


182:名無しさん@お腹いっぱい。
12/08/03 22:36:33.10 tRNxOJGn0
>>179 がうまく動いているかは、>>172 の方法でtraceすると良くわかります。

183:名無しさん@お腹いっぱい。
12/08/03 23:47:16.58 gdCJ+QPk0
これはnkf無しでもいけるってことか。
かなりの最適解じゃないか。

コードページに関してはビルド時に指定はできたんだったかな・・・

184:名無しさん@お腹いっぱい。
12/08/03 23:55:35.15 gdCJ+QPk0
もうプロセスに関しては全部 utf-8 指定で問題なくなるわけだし
prefer-coding-system で utf-8 指定するだけで良くなるわけか。

185:名無しさん@お腹いっぱい。
12/08/04 08:58:14.40 wwAEOj4u0
これgnupackに入ったらいいのになって思ったけど
gnupackはそもそもcp932運用を前提としてるから不要か

もっとも入ってても害はないよね。いかなるコーディングで運用していたとしても
Windows上だとコマンドライン引数はcp932にしなきゃいけないわけだし

186:名無しさん@お腹いっぱい。
12/08/04 10:37:07.77 SXU3HZ2k0
24.1にしてみたけど、ミニバッファのIMEオフが動かなくなってた。
今のところ、不満点はそのくらい。

187:名無しさん@お腹いっぱい。
12/08/04 19:22:11.64 DF9UaZH+0
>>179 に一箇所間違いがありました。

誤: (setq default-process-coding-system 'utf-8)
正: (setq default-process-coding-system '(utf-8 . utf-8))

set- で始まる function の書き方と混同していたようです。

188:名無しさん@お腹いっぱい。
12/08/04 19:28:37.96 wwAEOj4u0
default-process-coding-system は
set-default-coding-systems で、さらには
prefer-coding-system で同時に設定されるから不要じゃない?

189:名無しさん@お腹いっぱい。
12/08/04 19:52:12.50 DF9UaZH+0
C-h C で見てみると、

■ (prefer-coding-system 'utf-8) だけの場合

Defaults for subprocess I/O:
decoding: U -- utf-8-dos (alias: mule-utf-8-dos)

encoding: U -- utf-8-unix (alias: mule-utf-8-unix)


■ さらに (setq default-process-coding-system '(utf-8 . utf-8)) を設定した場合、

Defaults for subprocess I/O:
decoding: U -- utf-8 (alias: mule-utf-8)

encoding: U -- utf-8 (alias: mule-utf-8)


改行の変換が入るのかな? どこかに影響はでないだろうか?

190:名無しさん@お腹いっぱい。
12/08/04 20:59:09.23 wwAEOj4u0
wc -c とかした時に CR とか数えられるのもなんだし外部プロセスが期待してる改行コードに変換するのは妥当だと思うけど
何故に外部システムが LF 改行で決め打ちになってるんだろ。prefer... を utf-8-dos にしようが utf-8-unix にしようが
>>189 と同じになるね。

191:名無しさん@お腹いっぱい。
12/08/04 22:47:19.10 DF9UaZH+0
しばらく、 (setq default-process-coding-system '(utf-8 . utf-8)) なしで、
使ってみよう。これで、あと必要な設定は以下くらいかな。かなりすっきり。

(set-file-name-coding-system 'cp932)

192:名無しさん@お腹いっぱい。
12/08/04 23:16:46.24 WrlxrbSf0
>>190
prefer-coding-systemはdefault-process-coding-systemの改行指定部分
(-unixとか-dosの部分)を変更しないようになってるね。

そして、default-process-coding-systemのデフォルトは
(undecided-dos . undecided-unix)になっていて、
これはw32-fns.elのset-default-process-coding-systemで設定してる。
;; Most programs on Windows will accept Unix line endings on input
;; (and some programs ported from Unix require it) but most will
;; produce DOS line endings on output.
だそうだ。

193:名無しさん@お腹いっぱい。
12/08/05 00:27:57.87 QQcGWr920
>>192
なるほど、環境依存性が強いから初期値決めてあるわけなのね。
ここ数日ので大分文字コード周りがすっきり納得行くようになってる。
陳謝陳謝!

194:名無しさん@お腹いっぱい。
12/08/05 00:31:02.93 QQcGWr920
個人的にはあとは小菊を23以降の仕様に合わせるところだけだ

195:名無しさん@お腹いっぱい。
12/08/05 10:19:30.46 vtNhfpy20
まとめると下記でいいの?

(setenv "LANG" "ja_JP.UTF-8")
(set-language-environment 'Japanese)
(prefer-coding-system 'utf-8)
(set-file-name-coding-system 'cp932)

(setq default-process-coding-system 'utf-8)
(modify-coding-system-alist 'process ".*sh\\.exe" 'utf-8)

(defmacro set-function-args-encode (function args-number)
`(defadvice ,function (before ,(intern (concat
"ad-"
(symbol-name function)
"-args-encode-setup"))
activate)
(if (ad-get-args ,args-number)
(ad-set-args ,args-number
(mapcar '(lambda (arg)
(if (multibyte-string-p arg)
(encode-coding-string arg 'cp932)
arg))
(ad-get-args ,args-number))))))

(set-function-args-encode call-process-region 6)
(set-function-args-encode call-process 4)
(set-function-args-encode start-process 3)


196:名無しさん@お腹いっぱい。
12/08/05 11:00:44.36 Iul6kiCH0
>(setq default-process-coding-system 'utf-8)
>(modify-coding-system-alist 'process ".*sh\\.exe" 'utf-8)
↑がおそらく不要

197:名無しさん@お腹いっぱい。
12/08/05 11:01:25.94 Iul6kiCH0
あとは prefer のところに好きな改行コードの種類を入れたければ入れるぐらいの違いか

198:名無しさん@お腹いっぱい。
12/08/05 11:49:37.65 lb8byn750
>>196
(modify-coding-system-alist 'process ".*sh\\.exe" 'utf-8) の行は、
C-h v process-coding-system-alist とやって、"bash"の行があときは必要と思う。
自分のとこは、以下のような形なので、追加している。
(一番上の行は、上記の設定で追加されたもの)

process-coding-system-alist is a variable defined in `C source code'.
Its value is
((".*sh\\.exe" utf-8 . utf-8)
("bash" raw-text-dos . raw-text-unix)
("[pP][lL][iI][nN][kK]" undecided-dos . undecided-dos)
("[cC][mM][dD][pP][rR][oO][xX][yY]" undecided-dos . undecided-dos))


199:名無しさん@お腹いっぱい。
12/08/05 11:51:27.75 lb8byn750
もう一つの方法として、"bash"の行を削除してもよいと思う。

(setq process-coding-system-alist (delq (assoc "bash" process-coding-system-alist) process-coding-system-alist))

200:名無しさん@お腹いっぱい。
12/08/05 11:55:09.14 lb8byn750
gnupack で提供されているinit.elには、@ shell のカテゴリのところに、
(modify-coding-system-alist 'process ".*sh\\.exe" 'cp932)
の設定があるので、コメント化する必要がある。

また、shell-mode-hook の設定もあるけれども、これもコメント化している。

201:名無しさん@お腹いっぱい。
12/08/05 12:12:28.01 Iul6kiCH0
なるほど、公式配布版だともともとはいってないからいいけど
gnupack 版だと初期設定を書き換える必要があるわけね。

202:名無しさん@お腹いっぱい。
12/08/05 12:22:59.39 lb8byn750
gnupackにはとても感謝している。init.elを含むもろもろの設定をゼロから
するのであれば、emacsのユーザにはなっていなかったように思うので。

203:名無しさん@お腹いっぱい。
12/08/05 12:35:17.88 Iul6kiCH0
cygwin も含めて落として展開するだけですぐ使える上環境汚さないからお試し導入も出来るってのもいいよね。
母艦はもともと cygwin 環境整えてたから NTEmacs 使ってるけど
サブではお手軽に gnupack 使わせてもらってるわ。

204:名無しさん@お腹いっぱい。
12/08/05 13:19:04.46 8NcRpAwD0
設定削っていったらGNU謹製でもフォント設定以外なくても大分使えると分かった

205:名無しさん@お腹いっぱい。
12/08/05 13:39:28.08 lb8byn750
>>153 の設定で、
Symbol's value as variable is void: tramp-remote-process-environment
ってエラー出てる人いるかな。以下の設定にするとうまくいくかも。

(eval-after-load "tramp-sh"
'(let ((process-environment tramp-remote-process-environment))
(setenv "LC_ALL" nil)
(setq tramp-remote-process-environment process-environment)))

206:名無しさん@お腹いっぱい。
12/08/05 16:07:22.08 Iul6kiCH0
>>204
IME も GoogleIME とかだとパッチなしでもなんとか運用出来るんだよね。

207:名無しさん@お腹いっぱい。
12/08/08 00:41:28.39 JLPuMljA0
こんにちは。Emacs 24.1(gnupackからpatchをいただいてWindows XP SP3上で自分でビルドしたもの)で
jaspace.elを使っていらっしゃる方はいますか?
(require 'jaspace)
でjaspaceを読み込んで、jaspaceを使うモードを
(setq jaspace-modes (append jaspace-modes
(list 'php-mode
'javascript-mode)
と設定して、表示する記号を下記のように設定しているのですが、
(setq jaspace-alternate-jaspace-string "□"))
(setq jaspace-alternate-eol-string "\n"))
(setq jaspace-highlight-tabs ?^))
表示がうまくいきません。□が消えてしまったりします。
もし何か対策をご存じの方がいらっしゃったらアドバイスお願いします。


208:名無しさん@お腹いっぱい。
12/08/10 14:19:55.81 mOtZErrd0
24.1だとフォントの設定を何にもしなくても日本語が表示されるんだな
メイリオだからあんま意味ないけど

209:名無しさん@お腹いっぱい。
12/08/10 21:33:06.36 h/aqy/WE0
おお、ほんとだ
無設定の状態で「ー」も「□」にならずに表示されるな

210:名無しさん@お腹いっぱい。
12/08/15 16:43:31.56 ICueTD1k0
64bit ビルドが make bootstrap 一発で通らないのが気になりますが…
ビルドできればとりあえず動いているようです^^;

テンプレのGNU emacs(x64)に添付のパッチを元に mingw-w64 (32bit, 64bit)
でビルドできるようにしてみました。
w64 でない tdm-gcc 32bit (mingw32) でも一応ビルドできます。

ダイナミックロード機能はうまく動かせなかったので入っていません。

emacs-24.1 用。使用した gcc, 画像ライブラリなどは zip 内の README.txt
をみてください。

URLリンク(www1.axfc.net)

211:名無しさん@お腹いっぱい。
12/08/19 19:02:14.90 oXpbEM+l0
GNUPACKのemacs24.1.1を使ってます
flymakeでgccの代わりにcl.exeを使うように設定して、呼び出しはちゃんとできているようなのですが、エラーメッセージが文字化けして読めません(「\203I\203v」とかって感じになる)
どうにかして治す方法って無いですか

212:名無しさん@お腹いっぱい。
12/08/19 21:24:32.54 OcmT3rXh0
(modify-process-coding-system-alist "cl\\.exe" 'cp932) とかでなんとかならんかね

213:211
12/08/19 23:58:20.84 oXpbEM+l0
>>212
(modify-process-coding-system-alist "cl\\.exe" 'cp932)
だと通らなかったので
(modify-coding-system-alist 'process "cl\\.exe" 'cp932)
としてみましたが、通りはしても症状変わらずでした…

214:名無しさん@お腹いっぱい。
12/08/20 09:54:35.03 sJr6RB+A0
'cp932 を 'undecided にしてみたら?

215:名無しさん@お腹いっぱい。
12/08/20 09:57:05.96 sJr6RB+A0
あぁ、それか、cmdproxy.exe で cl.exe を間接的に呼び出しているから、
"cl\\.exe" を "cmdproxy\\.exe" にすると、うまく行くとか?

216:名無しさん@お腹いっぱい。
12/08/20 10:46:22.08 sJr6RB+A0
"cl\\.exe" → "cl\\(\\.exe\\)?" かな?

217:名無しさん@お腹いっぱい。
12/08/20 17:32:12.80 /oUjdjxm0
lpr-buffer しようとすると c:\ 直下にスプールファイルか何か作ろうとするせいで
Permission Denied になってしまう

違う場所に書き出す設定でもないかと思ってみてみても
(safe-dirs (list "c:/" (getenv "windir") (getenv "TMPDIR"))) とかハードコーディングされててオワタ


218:名無しさん@お腹いっぱい。
12/08/20 17:51:03.33 He9rv5XZ0
何もオワッテいない
elispでハードコードされてる部分なら、自分で好きなように修正すればいいだろ
ぶっちゃけ個人環境なら、lispディレクトリ直下をそのままいじってもいい

219:名無しさん@お腹いっぱい。
12/08/20 17:57:08.15 /oUjdjxm0
標準配布されてるのを上書き等でいじるのはやだよ。
hook や advice で直せない時点でもうだめだわ。
関数丸コピーで一部変えて再定義も気持ち悪い。

つか c:/ とかハードコードすんなよなぁ・・・

220:211
12/08/20 21:44:55.61 sT/hXn3R0
>>216
それでうまくいきました!
回答どもです

221:名無しさん@お腹いっぱい。
12/08/21 20:02:36.77 dKidsIbM0
cygwin の bash + ansi-term がちゃんと使えてる人居ます?
f_bash 入れてもとてもまともに動いてるとは言いがたい・・・
shell-mode で大抵のことは出来るからそう困ったりはしないけど
ちゃんと動かせるなら動かしてみたい

222:名無しさん@お腹いっぱい。
12/08/23 09:33:49.33 vheo1xaG0
w32-symlinks.el は結構内容古いんだな
insert-file-contents-literally とかの低レベル関数定義をまるっと置き換えしてるけど
w32-symlinks のは古い版のだからか暗号化ファイルとか読み込み出来ないままになってる


223:名無しさん@お腹いっぱい。
12/08/23 19:14:48.22 VEO4vW+O0
>>179 の発展系として、以下のマクロを考えてみた。

(defmacro set-function-args-coding-system (function program-number args-number)
`(defadvice ,function (around ,(intern (concat
"ad-"
(symbol-name function)
"-function-args-coding-sytem-setup"))
activate)
(let ((program (ad-get-arg ,program-number)) (args (ad-get-args ,args-number)))
(if (and program args)
(progn
(ad-set-args ,args-number (mapcar '(lambda (arg)
(if (multibyte-string-p arg)
(encode-coding-string arg 'cp932)
arg))
args))
(if (and (equal program shell-file-name) (equal (car args) shell-command-switch) (cdr args))
(let ((process-coding (assoc-default (cadr args) process-coding-system-alist 'string-match)))
(if process-coding
(let ((coding-system-for-read (car process-coding))
(coding-system-for-write (cdr process-coding)))
ad-do-it)
ad-do-it))
ad-do-it))
ad-do-it))))

224:名無しさん@お腹いっぱい。
12/08/23 19:15:48.72 VEO4vW+O0
設定は以下で行ってください。説明は次に。

(set-function-args-coding-system call-process-region 2 6)
(set-function-args-coding-system call-process 0 4)
(set-function-args-coding-system start-process 2 3)


225:名無しさん@お腹いっぱい。
12/08/23 19:17:03.45 VEO4vW+O0
(説明)
process-coding-system-alist は、shell-command などでshell経由(bash -c xxx)で
起動されるプロセスには機能しない。上記は、これを有効にするアドバイス。

たとえば、M-! ipconfig とやると、プロセスの入出力の設定を UTF-8 にしているユーザは
文字化けするけれども、上記のアドバイスを設定し、さらに以下を設定しておくと、文字化けは
しなくなる。

(modify-coding-system-alist 'process "ipconfig" 'cp932)


226:名無しさん@お腹いっぱい。
12/08/23 19:27:56.07 vheo1xaG0
ad-do-it が4つ並んでるのがなんか笑えるけどこれはなかなかよいね。
Windows 側の javac とかも文字化けしないで済むようになった。GJ!

227:名無しさん@お腹いっぱい。
12/08/23 19:35:34.51 vheo1xaG0
と思ったけど (setq default-process-coding-system '(undecided . utf-8)) でもいいような気もする

228:名無しさん@お腹いっぱい。
12/08/23 19:44:23.09 vheo1xaG0
shell-mode で ck とかの国際化端末みたいにコマンド毎の文字コード自動認識する方法ないもんかねえ。
ck だと windows 版の javac と utf-8 なファイルの cat のどちらも文字化けしないんだけど
shell-mode だと先に表示した方のエンコードに縛られちゃって後からの出力が文字化けしちゃう

229:名無しさん@お腹いっぱい。
12/08/23 20:49:02.41 VEO4vW+O0
>>228
仕組みはこんな感じ?
(defadvice comint-send-input (before ad-comint-send-input activate)
(set-process-coding-system (get-process "shell") 'undecided 'utf-8))

230:名無しさん@お腹いっぱい。
12/08/23 20:50:14.75 VEO4vW+O0
>>227
ほんとだ。がっがり。でも、勉強となったし、この情報を教えてもらう
ネタになったからいいか。

>>223 の利点は、標準入力をコントロールできることくらいかな。

231:名無しさん@お腹いっぱい。
12/08/23 21:45:52.80 vheo1xaG0
>>229
おおお素晴らしい!
shell-mode で utf-8 と cp932 が共存出来たよ!ありがとう!
今月先月と shell 絡みの言語処理が大分改善されたなあ


232:名無しさん@お腹いっぱい。
12/08/23 21:58:24.86 vheo1xaG0
process-coding-system に *-dos とか *-unix とか付けない場合と付ける場合でやっぱり微妙に挙動かわるね
改行コード付けない場合だと余計な CR が入力で渡されちゃうことがあった

prefer-coding-system に習って w32-fns.el の設定を壊さないよう↓みたいにしたほうがいいかも
default-process-coding-system の設定も同様で。~-dos . ~-unix の決め打ちでもよさそうではあるけど。

(set-process-coding-system (get-process "shell")
(coding-system-change-text-conversion
(car default-process-coding-system) 'undecided)
(coding-system-change-text-conversion
(cdr default-process-coding-system) 'utf-8))

233:名無しさん@お腹いっぱい。
12/08/23 23:13:29.37 VEO4vW+O0
おぉ、勉強になるなぁ。
最近、文字化けした漢字を見なくなった。



234:名無しさん@お腹いっぱい。
12/08/24 12:11:59.04 tL27xpHO0
>>232
整理してみました。
(defadvice comint-send-input (before ad-comint-send-input activate)
(let ((process (get-buffer-process (buffer-name))))
(if (and process
(string-match "shell" (process-name process) 0))
(let ((coding-system (process-coding-system process)))
(set-process-coding-system process
(coding-system-change-text-conversion
(car coding-system) 'undecided)
(cdr coding-system))))))

235:名無しさん@お腹いっぱい。
12/08/25 02:08:37.39 qumDhbfJ0
本家は24.2rc2でたのか。
そろそろgnupack emacsも24.2でるかな?

236:名無しさん@お腹いっぱい。
12/08/25 09:35:58.27 UggnHG0t0
何が変わったのかなと思ったら
この間の脆弱性を修正した奴なのね。

237:名無しさん@お腹いっぱい。
12/08/26 22:29:43.63 rWgT4mEk0
レジストリでフォントを指定する方法で、 set-fontset-font みたいに範囲や charset 毎のフォント設定までする方法ってありますかね?




238:名無しさん@お腹いっぱい。
12/08/28 21:39:30.60 voUj3lot0
"GNU Emacs 23.3.1 (i386-mingw-nt5.1.2600) of 2011-08-15 on GNUPACK"を使っています。
auto-install-batch [RET] anythingとしてインストールしました。
C-sのisearchがうまく動かなくなってしまいました。
[MIGEMO] I-search: と出るのですが、そこに文字を入力しても全く何にも該当しません。

239:名無しさん@お腹いっぱい。
12/08/28 21:42:31.74 voUj3lot0
忍法帳規制により連レススマソ。

URLリンク(d.hatena.ne.jp)
に同じ症状の人がいたのですが、解決法はわかりませんでした。

どなたか解決法が分かる方はいらっしゃいませんでしょうか?

240:名無しさん@お腹いっぱい。
12/08/28 21:52:03.05 ArNQXM+W0
windows7すげえな
何の設定もしてないのにHELLOファイルのうちBurmeseとOriya以外の書体をちゃんと表示しとる

241:名無しさん@お腹いっぱい。
12/08/30 07:43:44.25 d0emZBeJ0
gnupack_devel-9.01使用

新規ファイルをバッファで開くために emacsclientの設定をしたけど
上手くいきません。
init.elに(server-start)

Win環境変数に
変数名: EMACS_SERVER_FILE
変数値: (gnupackを解凍したディレクトリ)\home\.emacs.d\server\server
追加

で、起動すると

Warning (initialization): An error occurred while loading `c:/home/bin/gnupack_devel-9.01/home/.emacs.d/init.el':

error: The directory `~/.emacs.d/server' is unsafe

To ensure normal operation, you should investigate and remove the
cause of the error in your initialization file. Start Emacs with
the `--debug-init' option to view a complete error backtrace.

て出てしまいます。

・・・助けて


242:241
12/08/30 07:46:34.25 d0emZBeJ0
連投スマソ
これが解決したら本格的にxyzzyから移行するんですが・・・
やっぱし本家使いたいし

243:名無しさん@お腹いっぱい。
12/08/30 08:04:47.55 xq6Dg/Ee0
xyzzy はもはや emacs とは別物では。
あっちはあっちでなかなか良いものだと思う

244:名無しさん@お腹いっぱい。
12/08/30 08:09:40.60 kSJtzAJI0
serverのプロパティ => 詳細設定 => 所有者
で所有者の変更

245:名無しさん@お腹いっぱい。
12/08/30 14:06:52.71 d0emZBeJ0
>>244
ありがとう。何とか動くようになりました。
vista以降の所有権うんぬんは本当に使いにくいです。

>>243
そうですね。winネイティブなアプリなんで動きも軽いですしずっと愛用してます。
実はhowmを使い出したんですが、howm-wrapは1.1.0.3までの対応で
パッチを当てると1.2.1も使えるみたいなんですがうまくパッチ当てできなくて、
それなら本家の最新版が使いたいということで。

あと、過去何回もemacsに挫折してたんで、この機にと思いまして。

246:238
12/08/30 17:13:33.83 LMMHK4kQ0
anything-startup.elを読んでいたら

;;; If you use Japanese, you should install Migemo and anything-migemo.el.
;;;
;;; Migemo URLリンク(0xcc.net)
(and (equal current-language-environment "Japanese")
(require 'anything-migemo nil t))

という記述が、、コメントアウトしたらうまくC-sできるようになりました。
「外部プロダクトを別途手動でインストールしなければ、C-s自体が動かなくなる」
そういう事を注釈なしにしないで欲しいなぁ。


247:名無しさん@お腹いっぱい。
12/08/30 20:33:46.30 xq6Dg/Ee0
確かに。
インストール済みかチェックした上で挙動が勝手に変わるならともかく。

248:名無しさん@お腹いっぱい。
12/09/01 08:38:51.71 sR2H82Wv0
現状の ntemacs って何の設定もしなくてもそれなりに使える状況になるんだなあ。
language environment も勝手に Japanese になってるしフォントも普通に表示されるし
cygwin 等を使ってないなら無設定で文字化けも全然しない

249:名無しさん@お腹いっぱい。
12/09/01 11:46:55.79 bBTMhWjp0
今設定なしで使ってみてる
.skkがあるから厳密には違うけど

250:名無しさん@お腹いっぱい。
12/09/01 19:45:36.78 sR2H82Wv0
tem/bobcat のロードはやめられそうにもないけどね・・・

251:名無しさん@お腹いっぱい。
12/09/03 21:30:35.76 JSCr3tu10
ntemacsでansi-term使ってる方はいらっしゃいますか?
fakecygpty 使うことで大分ましにはなったのですが細かい設定がまだよくわかりません。
やってることは、UTF-8で動作させるために
default-process-coding-system を '(undecided-dos . utf-8-unix) に、
locale-coding-system を utf-8 に設定しているのと、
M-x ansi-term 後に stty echo -igncr しているぐらいです。

この状態だとファイル名表示や enter で改行は問題ないんですけど
C-h でのバックスペースや C-a での行頭移動がちゃんと表示されないんですよね

252:名無しさん@お腹いっぱい。
12/09/07 21:47:30.61 36K9zv/X0
NTEmacs で key-chord.el を使ってる人に聞きたいです.
日本語入力がオンになっている時には key-chord の
同時押しキーバインドが実行できないんですが,これは
Windows の IME に渡している以上避けられないものですかね?

Linux のほうで ibus.el で日本語入力していると,日本語入力が
オンになっていても key-chord キーバインドが動いてくれるのですが.


253:名無しさん@お腹いっぱい。
12/09/11 06:40:46.68 7ynZXh8B0
すみません
23系でレンダリングの遅さに辟易してWinのEmacsから遠ざかっていたのですが、
24では遅くないでしょうか?


254:名無しさん@お腹いっぱい。
12/09/11 08:11:51.06 SD7lSKMZ0
基準がわからないんでなんとも。体感は人それぞれだろうし。
特別なインストール作業もないんだし試してみたほうが早いと思う。

255:名無しさん@お腹いっぱい。
12/09/11 12:56:48.65 qr0rUfSf0
何のレンダリングを指しているのか確信ないが、こちらはemacs-w3mからw3mを使用、mewでhtmlをインライン表示。
dosアプリのw3mではさっと整形後表示となるが、cygwin版w3mだと止まったかのような状態が数十秒のときあり。
23系、24系とも。24系では若干速いか?という程度。


256:名無しさん@お腹いっぱい。
12/09/11 13:15:41.07 y+6sQ3rd0
windowsでこまめに外部プロセス木戸するようなもの速度はあきらめた方がいい。
grep-find 使うにしても -exec ではなく xargs 使うようにすると桁違いに早くなる。

257:名無しさん@お腹いっぱい。
12/09/11 13:22:08.09 SD7lSKMZ0
w32-pipe-read-delay の調整で早くなるのは emacs からプロセス連続で呼び出す場合ぐらいだったっけ

258:名無しさん@お腹いっぱい。
12/09/12 11:09:51.14 L0qB7PQr0
>>256
もう少し解説・例示があるとありがたく。

259:名無しさん@お腹いっぱい。
12/09/12 12:55:53.01 JZ/rGm5z0
grep-find で xargs つかうには grep-find-use-args を non-nil にすりゃいい。
もちろん cygwin とか導入してないと xargs もないだろうけど。

-exec だとファイルごとに grep が起動されるけど、
xargs だと引数として渡せるだけの限界の長さまで詰め込んで grep を起動するから
プロセス起動回数が段違いに減る。
Windows 環境は理由は忘れたけどプロセス起動がおっそいから違いが顕著に現れる。
#fork がちゃんと実装出来てないから遅いんだっけ?

260:名無しさん@お腹いっぱい。
12/09/12 12:56:29.37 JZ/rGm5z0
変数名まちがった
grep-find-use-xargs ね。

261:名無しさん@お腹いっぱい。
12/09/12 18:03:17.00 1LfMKSS/0
すみません
gnupack + ntemacsって、
cygwinのgcc使用して、cygwinのライブラリ使用しているバイナリでしょうか?
そうだとしたらパフォーマンスに問題ないでしょうか?

262:名無しさん@お腹いっぱい。
12/09/12 18:37:28.44 +4u2jAbS0
gnupackのntemacsはcygwinのライブラリを使用してない
パフォーマンスに問題あるかどうかを判断できるのは自分だけだ

263:名無しさん@お腹いっぱい。
12/09/14 19:16:46.31 a/ZKwYFf0
trampを>>153の設定で使っているだが、サイズのデカいファイルのコピーが遅い。
調べてみると、tramp-methodのsshはインラインメソッドでファイルをコピーしてるとのこと。
URLリンク(www.bookshelf.jp)
では、tramp-methodにscpを使ってみようとやってみたが、うまく動かない。
パスにドライブの指定があって、そこにコロンが入っているからscpが混乱しているらしい。
URLリンク(www.bookshelf.jp)

ということで、いつものadviceを考えてみた。(改行オーバーとのことで、つぎへ)
もうちょっと改善できそうな気もするが、とりあえずこれでデカいファイルもさくさくコピーできる。


264:名無しさん@お腹いっぱい。
12/09/14 19:17:34.54 a/ZKwYFf0
(require 'tramp)
(setq tramp-default-method "scp")
(setq tramp-encoding-shell "f_bash")
(setq tramp-program-list '("ssh" "scp" "rsync"))

;; プロセスを起動するプログラムを fakecygpty 版のものに変更し、パスのドライブの表記方法を変更する
(defmacro tramp-adjust-process-args (function program-number args-number)
`(defadvice ,function (before ,(intern (concat
"ad-"
(symbol-name function)
"-tramp-adjust-process-args"))
activate)
(if (member (replace-regexp-in-string "\\.exe$" "" (ad-get-arg ,program-number))
tramp-program-list)
(progn
(ad-set-arg ,program-number
(concat "f_" (ad-get-arg ,program-number)))
(if (ad-get-args ,args-number)
(ad-set-args ,args-number
(mapcar '(lambda (arg)
(replace-regexp-in-string "^\\([A-Za-z]\\):" "/\\1" arg))
; 環境によっては、上記の行を以下に置きかえる。gnupack with cygwin は上記でOK
; (replace-regexp-in-string "^\\([A-Za-z]\\):" "/cygdrive/\\1" arg))
(ad-get-args ,args-number))))))))

(tramp-adjust-process-args call-process 0 4)
(tramp-adjust-process-args call-process-region 2 6)
(tramp-adjust-process-args start-process 2 3)

265:名無しさん@お腹いっぱい。
12/09/14 20:45:06.45 jTBBk0z70
正規表現より cygpath 使ったほうがどの環境でも動いて完璧じゃない?
一々プロセス起動するって難点はあるけど。
あとは internal な変数使うことになるけど (featurep 'cygwin-mount) が t なら
cygwin-mount-cygdrive-prefix--internal を使うとか。


266:名無しさん@お腹いっぱい。
12/09/14 21:01:46.32 a/ZKwYFf0
>>265
cygwin-mount-cygdrive-prefix--internalってのがあるんですね。
でも、自分の環境(gnupack with cygwin 9.00)だと、 (featurep 'cygwin-mount) が t
で、cygwin-mount-cygdrive-prefix--internalが/cygdrive/を返すけど、/cygdrive
が使えない。どこか設定が変なんだろうか..。
cygpathはちょっと考えたけど、正規表現が軽くていいかなぁと。
引数の数、変換掛けているので。そこを直さなきゃだめか..。

267:名無しさん@お腹いっぱい。
12/09/14 21:12:58.56 jX1g0y8U0
gnupackは内部的に「mount -c /」を実行していて
「/cygdrive」じゃなくて「/」になってます

例えば C:ドライブの場合「/cygdrive/c」じゃなくて「/c」という感じ


268:名無しさん@お腹いっぱい。
12/09/14 21:19:18.43 a/ZKwYFf0
>>267
そうなのですね。emacsから cygpath -uを呼んだ結果は、使えるパスが返って
くるってことでいいんですかね? やっていると、/c/... とはなりました。

269:名無しさん@お腹いっぱい。
12/09/14 21:36:14.48 jX1g0y8U0
gnupackインストール直下の emacs.exeから起動した場合も
「mount -c /」が有効な状態です.

なので,emacs上でも「cygpath -u 'C:\WINDOWS'」とか
実行すると「/c/WINDOWS」になります


270:名無しさん@お腹いっぱい。
12/09/14 21:51:19.59 a/ZKwYFf0
>>269
ありがとうございます。
>>265
cygpath版考えてみました。mapcarの部分だけ。なんか、エレガントじゃない..。
(mapcar '(lambda (arg)
(if (string-match "^\\([A-Za-z]\\):/" arg)
(replace-regexp-in-string "\n" "" (shell-command-to-string (concat "cygpath -u " arg)))
arg))
(ad-get-args ,args-number))

271:名無しさん@お腹いっぱい。
12/09/14 21:56:13.00 a/ZKwYFf0
ディレクトリ名やファイル名に空白が入っている場合の対策が必要か。
(replace-regexp-in-string "\n" "" (shell-command-to-string (concat "cygpath -u '" arg "'")))


272:名無しさん@お腹いっぱい。
12/09/14 21:59:02.99 jTBBk0z70
最後に改行入っちゃうのがなんともね・・・
elisp に chomp みたいなのあったっけ。
cygpath が必ず改行付けて返すって前提にしちゃえば
(substring (shell....) 0 -1) でもいい気がする

273:名無しさん@お腹いっぱい。
12/09/14 22:04:13.61 a/ZKwYFf0
>>272
ファイル名に改行が入っている可能性を考えると、こちらの方が正解かも。
改行が入ったファイルをemacsが正しくハンドリングできるかは確認していなけど。

274:名無しさん@お腹いっぱい。
12/09/14 22:13:34.86 a/ZKwYFf0
今まで投稿した設定例を以下にまとめています。
URLリンク(www49.atwiki.jp)
「おまけ」も使えると思います。

275:名無しさん@お腹いっぱい。
12/09/14 22:17:03.25 jTBBk0z70
ためしに find-find 中に C-q C-j して改行含むファイルつくってみたけど
セーブで普通にコケるから emacs は改行含むファイルは無理って思ったほうがいいような。
bash で touch 'hoge(改行)hoge.txt' したファイルを dired で見るとなぜかショートネーム形式の hogeho~1.txt になってるし。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch