NTEmacs スレッド 5 [転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
ダメ文字対策で w32-quote-process-args を nil にして自前でクォート処理するってのが前スレであったけど、
あれ windows ネイティブなプログラムに対してだとうまく動かないことがあるね
(call-process "reg" nil nil nil "query" "HKLM\\Software")
とかやるとバックスラッシュが余計にエスケープされちゃうせいかエラーになる
cygwin のプログラムの場合はバックスラッシュはエスケープする処理いれないとうまくいかない
emacs 本体でも cygwin のプログラムかどうかチェックしてクォート処理変えてたりするみたいなんだよなあ
ちなみに shell-command でシェル経由での呼び出しだと cygwin 側でうまくやってくれるからかうまくいく >>5
> ダメ文字対策で w32-quote-process-args を nil にして自前でクォート処理するってのが前スレであったけど、
> あれ windows ネイティブなプログラムに対してだとうまく動かないことがあるね
それはあの書き込みが間違っているだけ。
どうせパッチ当てないとIMEもまともに動かないんだから、
こちらもソースに手を入れた方がいいと思う。 いい加減 NTEmacs+cygwin なんていう設定マニアのおもちゃから卒業して
cygwin 版 emacs を使うべき
fakecygpty だの引数 cp932 変換だのダメ文字対策だの全部必要ない
生産的行動より init.el 弄るのが楽しい人だけ NTEmacs 使ってえばいいと思うよ >>9
ファイル名の部分はもう関係なくなってるからそれ以外のところ除けばいいのか
サンキュー
本家にバッチ送ったけどダメだったんだね >>10
それ以外のところ、じゃなくそれ除けば、だった。 どうせパッチ書いても本家に取り込まれないしな
バイナリクレクレ君を助長するだけの話だよ >>5
>emacs 本体でも cygwin のプログラムかどうかチェックしてクォート処理変えてたりするみたいなんだよなあ
この場所教えて >>14
今ソース見られないけどクォート処理してる関数の中で
is_cygnus みたいなフラグ設定してる関数がそれ。
実行ファイルのヘッダ見たりして cygwin の dll インポートしてたら
cygwin のプログラムだって判定してたと思った。 ソース見れないってこともないな。公式で見ればいいのか。
w32_executable_type で実行ファイルの種類判定、
w32proc.c の1713行で cygwin のアプリかどうかでクォート文字の変更処理してるね。 >>13
> バイナリクレクレ君を助長するだけの話だよ
実にウザッタイやつらの言い方だな しかしここも終わりな感じかなー
普段から2chMateでみてたから影響なかったけど
ここはnavi2ch使ってる人多そうだしなー 前スレにてTSF経由でMS-IMEが使えるようになったおかげで、
俺にとって公式バイナリが実用になって助かっている。
過去ログを見るのが難しくなるとこういうのが埋もれてもったいないな。
せっかくだからTSF用の設定を貼り付けておく。
モードラインや短縮入力は好みの問題。ミニバッファも快適。
; TSFのAPIによりIMEを使用する。
(load-library "kkc-cmd")
; quailのjapaneseモードラインを変更する。
(load-library "quail/japanese")
(setf (nth 1 (quail-package "japanese")) "ja-")
(setf (nth 1 (quail-package "japanese-ascii")) "jaA")
(setf (nth 1 (quail-package "japanese-zenkaku")) "jaZ")
; quailのkkcモードラインを変更する。
(setq kkc-input-method-title "JA-")
; 短縮入力を追加する。
(quail-select-package "japanese")
(if (equal (quail-name) "japanese")
(quail-define-rules ((append . t))
("S" " ") ; IDEOGRAPHIC SPACE(U+3000)
("M" #xff0d) ; FULLWIDTH HYPHEN-MINUS
("T" #xff5e) ; FULLWIDTH TILDE
)) navi2ch使ってる人は思ってるより少ないと思うよ
話題がないだけ windows のコマンド引数のクォートって妙な仕様なんだな。\がパス区切りに使われちゃった故の不幸か。
・普段の \ はそのまんま解釈される。\\ は \\ として解釈される。
・" の前にあるときだけ \ がエスケープ文字になり " として解釈される。
・" の前に連なってるぶんだけ \\ が \ として解釈される。
\hoge => \hoge
"hoge" => hoge
\"hoge => "hoge
\\hoge => \\hoge
\\\"hoge => \"hoge
\\\\\"hoge => \\"hoge
\\\\hoge => \\\\hoge
\\\\\#hoge => \\\\\#hoge >20
すいません、これためしてみたいんですけど、
いきなり1行目でエラーになります。
kkc-cmd.elってどこからダウンロードすればいいんでしょうか? >>24
前スレ(NTEmacs4)の>355,356にある。
展開方法は前スレ>322,325を参照。つまりxzとbase64。
TSFTest.exeも必要だが、それは前スレの>312,325を参照。
前スレは「NTEmacs スレッド 4」でググれ。 日付かわっちゃいましたけど、24です。
丁寧な説明ありがとうございました。m(_"_)m
がんばってみます。 >>23
これじゃcygwinのルールとは共存できないから
Cソースでやってるみたいにバイナリ判別して処理わけるしかないね。 24.5のプリテストだよね?
今回のはあんまりwindows関係ない感じな気がする。 2で紹介(chuntaro)されているIMEパッチの動作だけど
IME ONで C-x d ってやったときに
C-x と d をすばやく押すと問題ないんだけど
ゆっくり押すと d がIMEに取られてイラッとなるんだけど
直し方ってないですかね? helm-read-file-name でネットワークドライブを入力しやすくする方法ってないでしょうか。
一時的にhelmを無効化したいのですが、やり方がわかりませんでした。 >>27
cygwinのコマンド等でバイナリ判別をする簡単な方法ってないかな。
fileではダメだった。 >>32
いまちょっとソースさわれないからコピペできないけど、ldd で cygwin1.dll がロードされてないかチェックする関数作って、
判定か偽の時は "\\(\\(\\\\\\)*\\)\"" => "\\1\\1\\\\\"" な正規表現でクォートするってので一応解決できたよ。
正規表現は今動かせないから間違ってるかもしれないけど。
ldd 呼び出すときにクォートの advice が再帰しないようにする必要あり。
書いてる時に思ったんだけど、cygwin の dll でクォート切り替えてるってことは msys 系のは正しくクォートされないんじゃないかなぁ。
ネイティブの NTEmacs も似たような判定法だったんだけどそこらへんどうなってるんだろ。 >>33
× cygwin の dll でクォート切り替え
○ cygwin の dll のロード有無でクォート切り替え >>33
毎回チェックのためにプロセス走るのがありなら
封印していた環境変数経由で引数渡しするラッパーもありな気がしてきた
クォートもユニコード引数も解決してくれるぜ >>31
一時的にhelm-suspend-update-flagをtにするんじゃなかったかな
前スレだか前々スレにlocate走るのを防止する方法のとこで出てた記憶がある >>33
ldd使えますね。ありがとう。
よく読まずに再帰にハマったりしてますが、なんとかなりそう。 >>36
ありがとうごさいました。
elispは良くわかっていないのですが、以下のようにして、切替できるようになりました。
(defun my/toggle-helm-suspend-update-flag ()
(interactive)
(setq helm-suspend-update-flag (not helm-suspend-update-flag)))
(define-key helm-read-file-map (kbd "C-/") 'my/toggle-helm-suspend-update-flag) w32-read-pipe-delay を 5 で運用してたけど
素早く打鍵するとたまに cmigemo が取りこぼしするようになった。
あんまり小さくするもんじゃないねこれ。 >>30
俺んとこじゃならないから他のもんが邪魔してんじゃない? 結局自前クォートってどうなったの?
やらないほうがいいの? cygwinからmsys2に乗り換えた人ってそんなに多くないのかな・・・。 今って cygwin の環境汚染事実上無いしね。
msys は pty が使えないから ansi-term 不完全だし。 このサイトを参考にcygwinシェルとEmacsのPATHを共有するperlワンライナーを作ってみた
http://d.hatena.ne.jp/syohex/20111117/1321503477
perl初心者が書いたコードだからもっとうまくやる方法があるかもしれんが…
.bashrc ----------------------------------------------------------------
if [ !"$EMACS" -a !"$MSYSTEM" -a "$PATH" ]; then
perl -e \
'@a=split(":","$ENV{$ARGV[0]}");foreach(@a){$_=`cygpath -am "$_"|tr -d "\n"`};print qq/(setenv "$ARGV[0]" "/,join(";",@a),"\")"' \
PATH > ~/.emacs.d/site-lisp/shell_env.el
emacs -batch -f batch-byte-compile "~/.emacs.d/site-lisp/shell_env.el" >/dev/null 2>&1
fi
init.el ----------------------------------------------------------------
;; load environment value
(load "shell_env")
(dolist (path (reverse (split-string (getenv "PATH") ";")))
(add-to-list 'exec-path path))
------------------------------------------------------------------------ 日本語ファイルとかが多数あるときなんかの ansi-term 上での文字化けなんとか回避する方法ないだろか。
シェルからの出力受け取るときに多バイト文字の境目で切れててもお構いなしに文字コード変換処理しちゃうのが原因なんだろうけど cygpathに"-p"オプションがあるのを忘れてたorz...
.bashrc ----------------------------------------------------------------
if [ !"$EMACS" -a !"$MSYSTEM" -a "$PATH" ]; then
perl -e \
'print qq/(setenv "$ARGV[0]" "/,`cygpath -amp "$ENV{$ARGV[0]}" | tr -d "\n"`,"\")"' \
PATH > ~/.emacs.d/site-lisp/shell_env.el
emacs -batch -f batch-byte-compile "~/.emacs.d/site-lisp/shell_env.el" >/dev/null 2>&1
fi
------------------------------------------------------------------------ >>47
perl いらなくない?
echo "(setenv \"PATH\" \"`cygpath -amp "$PATH"`\")" > shell_env.el >>48 情報サンクス
環境変数PATHに限るなら >>48 のコマンドが最適だね
perlにこだわってたのは、複数引数に拡張しようと思ってたからなんだけど
-----------------------------------------------------------------
perl -e \
'foreach(@ARGV){ print qq/(setenv "$_" "/,`cygpath -amp "$ENV{$_}" | tr -d "\n"`,"\")\n"}' \
PATH HOMEPATH SHELL > ~/.emacs.d/site-lisp/shell_env.el
-----------------------------------------------------------------
こんな感じにすればperlは必要ないね。cygpathの改行を除去する必要もないし
-----------------------------------------------------------------
for i in "PATH" "HOMEPATH" "SHELL"; do
echo "(setenv \"$i\" \"`eval cygpath -amp '"''$'$i'"'`\")"
done > ~/.emacs.d/site-lisp/shell_env.el
-----------------------------------------------------------------
(evalでゴニョゴニョしてる部分は何とかできないかな) >>49
間接参照は ${!hoge} でいける
for i in "PATH" "HOMEPATH" "SHELL"; do
echo "(setenv \"$i\" \"`cygpath -amp "${!i}"`\")"
done >>51
*rc 側に書かなくても emacs 側で bash 呼び出すようにすれば init.el 側で完結も出来そうね。
個人的にはシェル側に手を加えるのはあんまり好きじゃないから exec-path-from-shell のアプローチが好き。
emacs 実行ごとにプロセス一個走るのをうっとおしく感じるかどうかってのもあるだろうけど。
24.5 で変わる部分眺めてたけど
NTEmacs 的にはユニコード文字列がフレームタイトルに表示出来るようになったぐらいかな。
徐々に 〜W 系の API 呼び出し増えてってて嬉しい。
はよネイティブに UTF-8 をコマンド引数に渡せるようになるといいね。 >>52
NTEmacs + Cygwin の環境で exec-path-from-shell って使えたっけ?
このサイトの通り、セットされる PATH が cygwin 形式になるからうまく動かなかったと記憶
ttp://aki2o.hatenablog.jp/entry/2013/08/26/NTEmacs%E3%81%A7exec-path-from-shell%E3%82%92%E4%BD%BF%E3%81%86%E3%81%A8%E8%89%B2%E3%80%85%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%AB%E3%81%AA%E3%82%8B%E5%AF%BE%E5%87%A6
だから*rcをいじって色々やってた
> UTF-8 をコマンド引数に渡せるようになるといいね。
ホントそれ。cp932 エンコードとか、標準入力でのやりとりにするとか
トリッキーな回避法はもううんざりだからね なんかIMEパッチを25.5-rc3にあててビルドするとxdisp.cからxdisp.oをビルドするところで
こけるね。
パッチを当てないとビルドが通るけどね。 そりゃそうでしょ。
パッチ当てずにコケるようならリリース準備失敗中ってことになるから。 >>2にあるemacs-24.4-w32-ime.diffを24.5-rc3に当ててビルドできてるけど? 24.5がでたからMSYS2のmingw64でコンパイルしてみたんだけど
pop.cのコンパイルでおちるなぁ…
なぜだ… https://github.com/chuntaro/NTEmacs64
ここの通りにやっても
Does Emacs use -lgnutls? no
になっちゃうんだけどなぜでしょうか。。。 config.logでchecking for gnutls ...がなぜこけてるか見てみるといいんじゃないかな >>59
emacs-bug で 最新版の windows でのビルドで gnutls 絡みのスレッドたってるね。
バージョンがどうのって話しっぽいけど。これ関係ないかな?
http://lists.gnu.org/archive/html/bug-gnu-emacs/2015-04/msg00287.html >>60>>61 ありがとうございます。
config.logは
configure:12445: checking for gnutls >= 3.0.0
configure:12457: result: no
configure:12496: checking for gnutls >= 2.6.6
configure:12508: result: no
ということで見つけられていませんでした。
>>91 該当部分を書き換えて見ましたがだめでした。
もう少し調べてみます。ありがとうございました。 gnutlsのパッケージがインストールされているのにそうなるなら
環境変数PKG_CONFIG_PATHに/mingw64/lib/pkgconfigが入ってないとか。 ちゃんとmingw64_shell.batを起動してます?
msys2_shell.batだとgnutls見つからないよ。 win32 版のemacsが終了時にエラー吐くの原因が分かった。
というか、mingw の libgcc の既知の不具合で、emacs の etc/PROBLEMS に書いてあった
とりあえず回避するには、configure 時に CC="gcc -shared-libgcc" にすればいいみたい >>67
cha.la.coocan.jp/doc/NTEmacs.html#binary 「最新(24.5)」に
「24.4の挙動があやしい部分は、24.5でも変わっていない」書いてあるけど、
そこに上がってる emacs-24.5.zip (http://cha.la.coocan.jp/files/emacs-24.5.zip) は
直ってる (とりあえずの回避策とった) やつ? >>68
まだみたい
なんで、いまは前スレ 855 番の方法で対応してる
anago.2ch.net/test/read.cgi/software/1401870078/855 >>67
確かに24.4のetc/PROBLEMSにも書いてあるね
しかし、見つけるのがすごいと思う
で
> configure 時に CC="gcc -shared-libgcc" に
32bit版をこれでビルドしてみたら
少なくとも終了時のエラーは吐かなくなった
他にどんな怪しい挙動するか知らない新参だけど NTEmacs64 24.5 の chuntaro 氏にも感謝。 おお、chuntaro さんのも更新されたんだ
ありがてえありがてえ IMEパッチを検証してみると、カーソルがウィンドウを移動したっていう
hookもなくてパッチでhookを作って何とかしてるってのが分かったけど
結局それじゃ拾いきれないのがある
例えば、y-or-no-pとかその類でminibufferでIMEがONのまんまだ
helmとかもなんか駄目だな
y-or-no-pとかいちいちadviseしていけばいいけどなかなか一筋縄ではいかないな 使ってないから適当こくけど minibuffer-setup-hook/minibuffer-exit-hook とかじゃだめなん? >>74
minibuffer-exit-hook はIMEパッチ内でも使ってるけど、minibuffer-setup-hook を使っても
y-or-no-p とかは無反応だ
駄目な場合はで多いのは cursor-in-echo-area を t にするやつ
これをするとカーソルがminibufferに飛ぶけどhookは一切呼ばれないからIMEがオフにならない… >>75
y-or-n-p は read-key 使ってるからか。
read-key のアドバイスで cursor-in-echo-area が t なら・・・的なのを入れれば
擬似的にミニバッファ入力してるように見せかけてるのは回避出来るようになるかなぁ。
あーでも read-event とか他にも色々あるね。 >>76
本家の方でずばりカーソルがwindowを移動したっていうhookを作ってもらえれば万事解決なんだけどね
そんなのあるもんだと思ってたけど無いっぽい (知らないだけなのかね)
y-or-no-pはGUIのダイアログバージョンもあるけど、あんまりスマートなコーディングになってなかったな… 自己完結。64bit版はlibgcc_s_dw2-1.dll使ってないのか。 >>79
64bitでもconfigure 時に CC="gcc -shared-libgcc" をつけないと落ちる?
と書き込んだはずだったのですが、できていなかったようです・・・。すみません。 >>80
なるほど。
だから chuntaro 版で落ちる報告あがってきてなかったわけなのね。 chuntaroさんの24.5を使わせてもらってるけど
24.5でもgrepで以下のワーニングがでる問題直ってないみたいね…
warning: GREP_OPTIONS is deprecated
まぁここに修正済みの grep.el が上がってるから置き換えれば済む話なんだけどさ
ttp://git.savannah.gnu.org/cgit/emacs.git/commit/lisp/progmodes/grep.el?id=2e4c2fe2787785a421f256541de642976e9bd90b >>82
素の grep 使ってなかったから気付かなかった。
カラー対応してたりして lgrep より気持ち見た目が豪華になるんだなぁ。 ありがてえありがてえ
32bit/64bitともにネィティブパッチ済みが安定配布されてるのは助かるね。 >>84
良さげに使えてる
>>85
んだ
※anagoは今日機嫌悪そう >>84のサイトのは-O3以降の最適化ビルドじゃなくて巨大なデバッグ情報も付いてる (exeが16MB→71MBになる…)
あとsvgとgnutlsはDLLは含まれてるけどconfigureの出力を見ると無効になってる
気になったんで一応書いておく 04.16版への差替えあったみたいだが、>>88 への言及まだなし あと前スレでも書いたけど、アップしたバイナリにはWindowsで設定されているPATHの全容と
ビルドした時のユーザー名とホスト名とそのPATHが含まれるから、余分なPATHは消して
ユーザー名とホスト名は適当なものに変更した方がいいんだよね
とりあえず -g3 -gdwarf-2 が余計なんで消した方がいい (exeが16MBぐらいになるはず) gnutlsが動かないとわざわざstunnel使わないとssl通信ができなくて不便
mewさんはstunnelしか使わない頭の固い頑固者だから関係ないけど cygwin とかと一緒に動かしてるなら gnutls インストールしておけば
特に設定なしで gnutls-cli 経由で https 接続したり 993 ポートで gmail に繋いだりしてくれるよ。 >>94
> mewさんはstunnelしか使わない頭の固い頑固者
なぜに槍玉に上げそこまで熾烈な言葉遣いするん ビルド時のパスがバイナリに残る問題は emacs-bug で議論されてるなぁ。
パス以外にもなんかないか?とかやってるから次辺りのバージョンではそういうの残らなくなるかもしれんね。 libgnutls-30.dllをちゃんと読み込めない問題は下記を見て
設定で使えるようにしたけどそれを解決した24.6がそろそろ出ないかな。
ttp://proglab.blog.fc2.com/blog-entry-14.html No IME パッチってどこに落ちてるの?
IME のキー潰すだけのために keyhac 入れてるのもなんだし試してみたいんだけど
見つからない。 >>99
W32-IMEを無効化ならconfigure時のoption指定だけだろ ■ このスレッドは過去ログ倉庫に格納されています