NTEmacs スレッド 5 [転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
1名無しさん@お腹いっぱい。
垢版 |
2015/03/09(月) 00:01:58.25ID:0/C/Ivt60
前スレ
NTEmacs スレッド 4
http://anago.2ch.net/test/read.cgi/software/1401870078/

GNU Emacs
http://www.gnu.org/software/emacs/

gnupack (cygwn + emacs package)
http://sourceforge.jp/projects/gnupack/

GNU emacs(x64)
http://hp.vector.co.jp/authors/VA052357/emacs.html

CVS http://savannah.gnu.org/cvs/?group=emacs
Git http://savannah.gnu.org/git/?group=emacs

FAQ http://www.gnu.org/software/emacs/windows/ntemacs.html
EmacsWiki http://www.emacswiki.org/
Mailing Lists http://savannah.gnu.org/mail/?group_id=40

Bug Report
M-x report-emacs-bug RET
2015/05/17(日) 10:04:20.78ID:EQG0VP2V0
ansi-termとかは遅くて使えないね。自分はshell-modeをメインで使っている
ので、問題なさそう。
2015/05/17(日) 10:07:40.39ID:EQG0VP2V0
Cygwin版Emacsでもう一ついいことを見つけた。cygwinで作ったwindowsショートカット
やNTFSシンボリックの中に入っても、シンボリックのパスが維持される。
これはCygwinの機能なんだろうけど、MinGW版Emacsではそうはならないので便利だなぁ。
2015/05/30(土) 15:56:31.02ID:Dn2TAgbo0
Emacs24.5をCygwinでビルドしたが、xml2でコンパイルしてないとかのエラーでewwが使えない。
libxml2-devは入ってる。でもconfigureでxml2がnoと判定される。

誰か助けて。
2015/05/30(土) 16:27:42.67ID:fo8HIJKy0
pkg-configいれてないとか
2015/05/30(土) 17:50:30.91ID:Dn2TAgbo0
>>115
おー、ビンゴでした!
ありがとう!
2015/06/02(火) 02:12:13.32ID:wf9VDqVY0
日本語入力中のフォントにMactype効かないんだけど、綺麗なフォントを標準させる方法ない?
2015/06/15(月) 10:49:32.51ID:ypQO6dq60
unix板からこちらに聞いた方がいいといわれたので、
ここで質問いたします。

gnupack で入れたemacsで emacs-clang-complete-async を導入したいんですが
emacs-clang-complete-asyncのmakeができません。llvm系は自前で最新版をビルド
してパスも通っているつもりです。
make時のエラーは、
/usr/local/lib/libclang.a(CIndex.o):Cindex.cpp〜(関数名)に対する定義されていない参照です
というのが、大量に出ます。
環境は
win7 64bit
GNU Emacs24.5.1
です。
同じエラーを解決された方や、こうすればいいんでないの?という方がいれば
教えてください。
2015/06/21(日) 22:59:47.64ID:oMn8fplm0
>>118
このパッチの Makefile.cygwin を使ってみたらどうだろう
https://github.com/Golevka/emacs-clang-complete-async/pull/64
https://github.com/Golevka/emacs-clang-complete-async/blob/0446bacdae52619155c914d6c4c5ffca0ef1ebc4/Makefile.cygwin
2015/06/22(月) 03:45:18.32ID:I0UPbCEi0
fakecygpty.c に NOT in MinGW32! ってあるけど
msys gcc ならいけるんじゃないかと思ってコンパイルしてみた
結果、コンパイルできたが、 M-x shell で以下のエラーがでてうまくいかない
Process shell exited abnormally with code 139

ただ、tramp でサーバーに ssh 接続するのは可能
ちゃんとミニバッファにパスワードを入力できる
2015/06/22(月) 07:42:07.21ID:9r4PmZAp0
msys の方はそもそも pty を持ってないから fakecygpty コンパイル出来ても意味ないはずだが。
tramp の方のはよくわからないけど ssh-askpass が動いてるとかじゃないの?
122>>120
垢版 |
2015/06/22(月) 13:58:06.96ID:l0qxGhXV0
>>121 レスthx
> msys の方はそもそも pty を持ってない
そうなのか…

cygwin だと"cygwin1.dll"が POSIX 互換エミュレーション層を実現してる
それをフォークした"msys-2.0.dll"で msys2 は POSIX をサポートしてる
って認識で、"msys-2.0.dll"をリンクしてやれば
うまくいくと思ったんだけど、やっぱりダメかなぁ…

msys2 の mintty で tty コマンドを打つと
/dev/pty0
ってなるけど、これは msys 側でなくて mintty 側で
pty をサポートしてるってこと?
2015/06/26(金) 07:37:35.97ID:S4uTtmrI0
Cygwin版 emacs向けに以下の設定を考えました。

dired でディレクトリのシンボリックリンクを実体のパスで開くための設定
http://www49.atwiki.jp/ntemacs/pages/54.html

便利な設定ですので、よければ使ってください。
2015/07/06(月) 22:54:04.62ID:RQ16gZ7/0
>>118
>emacs-clang-complete-asyncのmakeができません。llvm系は自前で最新版をビルド
最新版てtrunkのこと?
だとしたら取得タイミングによってはビルド通らないことあるのでは?
fixされたReleaseの最新版(いまだと3.6.1?)なら通るはず。
あと、cygwin付属のsvnで取得するとビルドが通らないケースがあった。
まずは、llvmをビルドしたディレクトリ(Release/binとRelease/lib)にlibclang.aやlibclang.dll, libclang.soなどがあるかを確認する。
cygwinだとcygclang.dllかな?
出来ていないのであればビルドが失敗してるので、ビルドログあさってみるしかないですね。
昔自分がハマったのは
llvmのmakefileまたはslnファイルを生成するときに
cmakeがsvnを呼び出してリビジョンナンバーのヘッダファイルを生成するのだが、
cygwinのパス処理がらみでうまく動作せずヘッダが生成されないので、結果としてビルドエラーになっていたというケース。
なので、svnチェックアウト,cmakeによるプロジェクト生成は、
cygwinではなくコマンドプロンプトにて、tortoisesvnとcmakeオフィシャルのバイナリで行いました。
125>>120
垢版 |
2015/07/10(金) 18:01:03.11ID:KX/0sk9b0
>>122
自己解決。emacs の設定ミスってるだけだったorz...
msys2の環境であっさり fakecygpty 使えました。
msys/gcc をインストール済みの msys2 の環境において、msys2_shell.bat を起動して
> gcc -o fakecygpty.exe fakecygpty.c
を実行。コンパイルした fakecygpty.exe を
/usr/local/bin
とかに移動。後は wiki の fakecygpty を使うための設定 とかの設定をすればOK。
M-x shell して tty コマンド打つとちゃんと
/dev/pty1
を返します。これで cygwin から msys2 に乗り換えられるかな
2015/07/25(土) 16:21:44.11ID:5OkOVd1q0
以下のメールでfakecygptyの作者さんも言ってるけど、
ttp://www.ysnb.net/meadow/meadow-develop/2005/msg00367.html

fakecygpty を経由するプロセスが
compilation-disable-input を non-nil にセットすると正常動作しなくなるみたいね
そのせいで grep とか ggtags、twittering-mode 等が動かなくて数日悩んでしまった

自分の環境では pty が必要な場面は低いんで、
wiki の設定を一部改編して、現状のブラックリスト方式ではなく、
ホワイトリスト方式で fakecygpty を経由するか判断させることにした
また、バッファの名称の判断に正規表現を使うことにした
ついでに 24.4 で導入された新アドバイスに書き直してみた
127>>126
垢版 |
2015/07/25(土) 16:23:49.67ID:5OkOVd1q0
こんな感じ

(defvar fakecygpty-program-list)
(setq fakecygpty-program-list '(""))

(defvar fakecygpty-buffer-name-regexp)
(setq fakecygpty-buffer-name-regexp "^\\(*shell\\|*tramp\\)")

(defun ad-start-process-to-fake (orig-fun &rest args)
(when (and (or process-connection-type
(member (replace-regexp-in-string "\\.exe$" "" (file-name-nondirectory (nth 2 args)))
fakecygpty-program-list))
(string-match fakecygpty-buffer-name-regexp
(if (bufferp (nth 1 args))
(buffer-name (nth 1 args))
(nth 1 args))))
(setcdr (nthcdr 2 args) (cons (nth 2 args) (nthcdr 3 args)))
(setcar (nthcdr 2 args) "fakecygpty")
(message "start process via fakecygpty"))
(apply orig-fun args))
(advice-add 'start-process :around #'ad-start-process-to-fake '((depth . -100)))
2015/07/25(土) 18:02:48.66ID:IrMQAipT0
defadviceのままだけど、排他バッファリストの代わりにcompilation-disable-inputの判定いれるのではだめですかね?

(setq fakecygpty-program-list '(""))

(defadvice start-process (around ad-start-process-to-fake last activate)
(when (and (or process-connection-type
(member (replace-regexp-in-string "\\.exe$" "" (file-name-nondirectory (ad-get-arg 2)))
fakecygpty-program-list))
(not compilation-disable-input))
(ad-set-args 3 (cons (ad-get-arg 2) (ad-get-args 3)))
(ad-set-arg 2 "fakecygpty"))
ad-do-it)
129>>126
垢版 |
2015/07/25(土) 18:50:49.98ID:5OkOVd1q0
>>128
今、試してみたところ
compilation-disable-input が non-nil の問題は
compilation-disable-inputの判定を入れればいいみたいです

ただ、gdb とか twittering-mode とかはこれとは別問題みたいで
fakecygpty を経由させるとうまく動かないです
2015/07/25(土) 20:26:20.36ID:IrMQAipT0
>>129
やっぱりバッファ名での判定は無くすことできないのかな。
2015/07/25(土) 21:13:18.13ID:IkFApNlK0
process-send-string を C-d が送られるように書き換えるだけで動くようにならない?
自分ところはそれでうまく動くようになってる。
ほんとはもっと細かくかいてるけど大まかには以下みたいなかんじで。

(defadvice process-send-eof (around real-c-d activate)
(process-send-string (ad-get-arg 0) (kbd "C-d")))

あと fakecygpty はおっきいところで二箇所ほどバグがあって、過去にこのスレで対処法が出たぶんは
以下にパッチがあたってるのが置いてあるから使ってみるといいんじゃないかな。
https://github.com/trueroad/fakecygpty

pty の初期化が古い meadow 仕様だったのを emacs 仕様に書き換えて 出力 CRCRLF になっちゃうのを対処したのと、
子プロセスの戻り値をちゃんと処理してないせいでいつでも正常終了になっちゃうのを対処してるバージョンね。
132>>126
垢版 |
2015/07/26(日) 00:07:15.39ID:PVnmMw3N0
>>131 の方法で twittering-mode は動きました。
ただ、gdb の方は動かなかったので、Backtrace を見たところ、原因が分かりました。
gdb を起動すると、start-process で gdb 本体のプロセスと gdb-inferior のプロセス2つが作られるのですが、
その際、gdb-inferior のプロセスは
(start-process "gdb-inferior" #<buffer limbo> nil nil) のように
起動プログラムが nil で作られます。
そのため、この状態で wiki のアドバイスを適用すると
(start-process "gdb-inferior" #<buffer limbo> "fakecygpty" nil)
つまり fakecygpty 単独での実行となりエラーとなるということでした。
133>>126
垢版 |
2015/07/26(日) 00:13:27.06ID:PVnmMw3N0
最終的にこんな感じの設定になりました

;; 新アドバイス版
(defun ad-start-process-to-fake (orig-fun &rest args)
(when (and (nth 2 args)
(or process-connection-type
(member (replace-regexp-in-string "\\.exe$" "" (file-name-nondirectory (nth 2 args)))
fakecygpty-program-list))
(not compilation-disable-input))
(setcdr (nthcdr 2 args) (cons (nth 2 args) (nthcdr 3 args)))
(setcar (nthcdr 2 args) "fakecygpty"))
(apply orig-fun args))
(advice-add 'start-process :around #'ad-start-process-to-fake '((depth . -100)))

;; 旧アドバイス版
(defadvice start-process (around ad-start-process-to-fake last activate)
(when (and (ad-get-arg 2)
(or process-connection-type
(member (replace-regexp-in-string "\\.exe$" "" (file-name-nondirectory (ad-get-arg 2)))
fakecygpty-program-list))
(not compilation-disable-input))
(ad-set-args 3 (cons (ad-get-arg 2) (ad-get-args 3)))
(ad-set-arg 2 "fakecygpty"))
ad-do-it)
2015/07/26(日) 01:10:50.40ID:NtQg+S5k0
>>132
gdb は子プロセスの入出力用に pty がもう一つ必要になるんだけど、emacs では実行ファイルを nil にすることで pty 単体を確保できる。ここらへんは次あたりの emacs のバージョンで変わりそうだけど。

んで fakecygpty は pty のみの確保に対応していないから本体に手を入れないといけない。
https://github.com/d5884/fakecygpty
↑で一応対応してはいるんだけど、さっき試したら行頭での C-d が動かなくなってる感じ。cygwin のバージョン上がったからかなぁ。
2015/07/26(日) 01:57:48.79ID:GoqLMzMk0
>>132
twittering-modeはどの辺が動かなかったか教えてくれる?
136>>126
垢版 |
2015/07/26(日) 02:08:38.52ID:PVnmMw3N0
>>134 のおかげで、今回の問題の本質が理解できました、ありがとう。
端末I/Oについて知識が皆無なんで、
fakecygpty 本体に手を入れるのはきつそうだなー…

ttps://github.com/d5884/fakecygpty 試してみましたが、
自分の環境では、プロセスが終了しなかったりでうまく動きませんでした。
2015/07/26(日) 02:24:40.85ID:GoqLMzMk0
>>131の話を踏まえると以下の方法でgrep問題なども回避できるんだけど、
>>133の方法とどちらがいいんだろう。

(defadvice start-process (around ad-start-process-to-fake last activate)
(when (and (ad-get-arg 2)
(or process-connection-type
(member (replace-regexp-in-string "\\.exe$" "" (file-name-nondirectory (ad-get-arg 2)))
fakecygpty-program-list)))
(ad-set-args 3 (cons (ad-get-arg 2) (ad-get-args 3)))
(ad-set-arg 2 "fakecygpty"))
ad-do-it)

(defadvice process-send-eof (around ad-process-send-eof activate)
(if (and (ad-get-arg 0)
(string= (car (process-command (ad-get-arg 0))) "fakecygpty"))
(process-send-string (ad-get-arg 0) (kbd "C-d"))
ad-do-it))
138>>126
垢版 |
2015/07/26(日) 02:54:58.15ID:PVnmMw3N0
>>135
Backtrace が出力されないので詳細はソースを見ないとわかりませんが、
以前使っていたfakecygpty(ttps://github.com/Shougo/fakecygpty)だと、
パスワードを入力して、
"the authorized token is loaded" とエコーされたのち、
"Authorization for the account "アカウント名" failed due to "nil"."
となって twittering-mode が終了してしまいます

>>132 が紹介してくれた fakecygpty(https://github.com/d5884/fakecygpty)だとうまく動きます。
2015/07/26(日) 03:01:46.57ID:GoqLMzMk0
>>138
process-send-eofによる解決ではなく、fakecygptyによる解決だったのですね。
ありがとうございます。
140>>126
垢版 |
2015/07/26(日) 03:13:39.82ID:PVnmMw3N0
>>139
自分の環境(chuntaro/NTEmacs64 + msys2)では
>>128 の設定 (compilation-disable-inputの判定)をいれれば
process-send-eof のアドバイスがなくても特に問題はないです。

その場合は grep とか ggtags 等の
compilation-disable-input を non-nil にセットするプロセスは
fakecygpty を経由しませんが
2015/07/26(日) 03:26:44.89ID:GoqLMzMk0
>>140
>>128を投稿したのは自分なのですが、compilation-disable-input変数の利用される
スコープがfakecygptyが利用されるスコープが異なるのだろうなぁと思ったので。
142>>126
垢版 |
2015/07/26(日) 03:55:10.82ID:PVnmMw3N0
>>141
>>128 の方でしたか。ありがとうございます。
compilation-disable-input の判定で問題ないと思いますが、
process-connection-type の判定で pty を要求されるならば
やはり fakecygpty を経由させ方が好ましいですかね、
リファレンスにも書かれてますし…

問題だった compilation-disable-input の non-nil にセットするプロセスも
>>131 の方法なら fakecygpty を経由しても大丈夫なので、
fakecygpty が pty のみの確保に対応するまでは >>137 の方法でいいと思います。
2015/07/26(日) 05:04:04.90ID:GoqLMzMk0
こんな感じではどうだろう? これで、shell-modeの利用に必要なsignalのアドバイスも
必要なくなる。

(defadvice start-process (around ad-start-process-to-fake last activate)
(when (and (ad-get-arg 2)
(or process-connection-type
(member (replace-regexp-in-string "\\.exe$" "" (file-name-nondirectory (ad-get-arg 2)))
fakecygpty-program-list)))
(ad-set-args 3 (cons (ad-get-arg 2) (ad-get-args 3)))
(ad-set-arg 2 "fakecygpty"))
ad-do-it)

(defmacro fakecygpty-set-signal (function send-key)
`(defadvice ,function (around ,(intern (format "ad-%s" function)) activate)
(let ((process (or (ad-get-arg 0)
(get-buffer-process (current-buffer)))))
(if (string= (car (process-command process)) "fakecygpty")
(process-send-string (ad-get-arg 0) (kbd ,send-key))
ad-do-it))))

(fakecygpty-set-signal interrupt-process "C-c")
(fakecygpty-set-signal stop-process "C-z")
(fakecygpty-set-signal quit-process "C-\\")
(fakecygpty-set-signal process-send-eof "C-d")
2015/07/26(日) 08:28:27.90ID:NtQg+S5k0
>>136
msys2 環境での使用は全然試したこと無いんで色々問題があるのかも。
>>132 のは WINCH シグナルを送るときにウィンドウサイズもセットで送る必要があったんで
専用の kill プログラムを用意していて、その中で cygwin 固有の関数呼んでるんだけど
msys2 環境でもコンパイルうまくいくのかな?

gdb は子プロセスに pty を接続する際に process-tty-name を使ってるから
そっちにも advice を入れる必要があったはず。
あとは cygwin 版 gdb の signal 絡みが linux 版と違って windows 用にカスタマイズされてる関係か
いまいちそこら辺が linux 環境と同じ使用感にならなかった記憶があるよ。
2015/07/26(日) 21:43:15.94ID:PVnmMw3N0
>>136
以下の msys2 本家のサイトによると、
http://sourceforge.net/p/msys2/wiki/How%20does%20MSYS2%20differ%20from%20Cygwin/

msys2 は cygwin 固有の関数を含む cygwin1.dll の trunk バージョンを
msys-2.0.dll としてフォークしてるみたいなので
cygwin 固有の関数 が含まれていても msys2 環境でコンパイル可能です

ただ、以下のメールでのやり取りからすると
http://sourceforge.net/p/mingw-w64/mailman/mingw-w64-public/thread/2F9017D3-8357-48C2-B887-A32FDF4E2141@gmail.com/

Red hat の cygwin 開発者ともめたみたいで、
それを回避するために(他にも理由はあると思いますが)、以下のように多少手を加えてるみたいです。

1. 実行する際にコマンドライン引数と環境変数のパスを Windows 形式に自動変換する
2. OSNAME の値を環境変数 MSYSTEM の値に設定する
3. ネイティブな Windows アプリケーションの出力の行末コード(CR+LF)を UNIX 形式(LF)に変換
4. symlinks の挙動を リンクではなくコピーに
5. 旧 msys との互換性維持のため、 pwd への "-W" オプションの追加
6. /cygdrive プレフィックスの削除 (e.g C:\ | /cygdrive/c/ -> /c/)
7. MSYS2提供のユーザーランドソフトウェアに対する互換性と相互運用性維持のための変更
8. msys2 での権限操作を抑制するため、マウントオプションを noacl に
9. cygwin の trunk バージョンをベースとした msys2 のリリース
2015/08/11(火) 14:32:49.49ID:bYjHud0I0
face の変更方法って色々あるけど、どれが一番高速なんだろう?
代表的なのは custom-set-faces set-face-attribute
あとは OS の機能を使う方法( Win ならレジストリ, Linux なら .Xresources )
今は、なんとなくレジストリいじる方法で face 変えてるけど
2015/08/12(水) 10:56:11.22ID:8NfCUjoG0
ウィンドウサイズとかもそうだけどレジストリとか.Xresoucesの場合
ウィンドウが表示される前に適用されるから起動時に一瞬違うサイズのが表示されるってのがなくなるのが好き。
ただフォント絡みは一部の文字だけ置き換えなんかした場合のリソースでの記法がよくわからなくて二の足踏んでる。
148sage
垢版 |
2015/08/17(月) 07:35:11.12ID:NCnTVCkt0
どちらかと言うと windowsの質問ですが、先日 win7→10にしました。
ntemacs64(chuntaroさんの)は問題なく動くのですが、スタートメニューにはピン止めしかできません。
これだとプロパティでの作業フォルダが設定できないです。
環境変数 HOMEを設定する事で init.elは読み込む様になりましたが、emacs起動直後の C-x dでは emacs/bin
になっちゃいます(まぁ、~/ を入力すれば良い訳ですが・・・)
みなさんこの辺りどうしてます? 作業フォルダが emacs/binのままで支障はないですか?
# いままでずっと ~/ を作業フォルダに指定して使って来てるので・・・

以上、ご教示頂けると幸いです。
2015/08/17(月) 08:13:25.44ID:IM7ynGeV0
自分は昔から (cd "~") を init.el の最後にいれてます。
2015/08/17(月) 09:34:24.18ID:2KGddbGt0
>>148
スタートメニューにピン止めしたら、ピン止めのアイコンをポイントしてマウス右メニューで「ファイルの場所を開く」で開くフォルダに
ショートカットができているから、そのプロパティで作業フォルダを指定できるはず。
タスクバーにピン止めしてもマウス右メニューでショートカットのプロパティを編集できる。
151sage
垢版 |
2015/08/17(月) 20:37:38.99ID:NCnTVCkt0
おぉ!! こんな事できたのか!!
ありがとうございます。

(cd "~")だったのですね。
自分も最初に思い付いたのはそれだったのでですが・・・いかんせ elispがわからない^^;
カッコで括る必要があったんですね。勉強になります。

以上、有難うございました。
2015/08/22(土) 16:58:40.96ID:j7cezT2u0
cygwin上からNTEmacs呼び出してるからWin側の環境変数はあまり気にしたこと無いなぁ。
HOMEぐらい?
みんなWinでshellコマンドのための環境は何を使ってるんだろう?
2015/08/23(日) 11:56:51.25ID:BYquMg6N0
自分が冷静になるために情報を整理。
windows10にアップデートしたので、アプリが正常に動くか一通りチェック。
ほぼ問題ないが、emacs + StrawberryPerlで元通りに動かないところがある。
自作のスクリプトをshell-command-on-regionで使っていたのが、
(Shell command succeeded with no output)になる。
perltidyは動く。
eshellでは正常な結果となるので、どうしてもだめならeshellを使うのもありだろう。
まずはemacsのバージョンをチェックするか…
2015/08/23(日) 13:28:54.67ID:BYquMg6N0
utf-8にしたら治ったサーセン
2015/08/23(日) 22:45:52.88ID:/GtGCPq50
cygwin や msys2 とかの unix ライク環境と ntemacs を連携させてる場合、
Win側 の環境変数をいじるのは、気持ち悪くてできないなぁ
自分の場合、環境変数 HOME は以下のように設定してる。

ntemacs をインストールしたディレクトリ/share/emacs/site-lisp/
以下に site-start.el を作成して
(setenv "HOME" "HOME に設定したいディレクトリパス")

完全に好みの問題だけ思うけど
2015/08/28(金) 10:07:02.82ID:/FGdkJXi0
↑ win10ではうまく行かなくない?
うちはだめだった。
2015/08/28(金) 12:43:24.20ID:wblKlxCN0
>>156 win10 試してないからわからないけど、少なくとも win7 だとうまくいってる
scratch バッファに (getenv "HOME") C-j で設定したパスが表示されるか確認してみて
2015/09/04(金) 15:30:20.98ID:TxZyxqGk0
emacs lisp で cygpath を使うために以下のような関数を作成したんだけど、
2番目の引数 path をダブルクオートで囲って shell-command-to-string に渡そうとしたら
ダサい感じになってしまった…
もっといい方法があれば教えてください
----------------------------------------------------------------------------
(defun cygpath (option path)
(let* ((cygpath_path "\"D:/msys64/usr/bin/cygpath\"")
(quote_path (concat "\"" path "\""))
(command (mapconcat 'identity (list cygpath_path option quote_path) "\s")))
(substring (shell-command-to-string command) 0 -1))))
----------------------------------------------------------------------------
2015/09/04(金) 17:09:19.60ID:T5sh+NNV0
shell-quote-argumentを使う。
160>>158
垢版 |
2015/09/04(金) 18:18:27.10ID:TxZyxqGk0
>>159 ありがとう
ズバリ shell-quote-argument が求めていた関数でした。

(defun cygpath (option path)
(let ((command (mapconcat 'identity (list "D:/msys64/usr/bin/cygpath"
option
(shell-quote-argument path)) "\s")))
(substring (shell-command-to-string command) 0 -1)))

NTemacs と cygwin を連携させる場合に
win ←→ unix の path の変換はみんなどうやっているのだろう?
2015/09/04(金) 18:25:25.02ID:T5sh+NNV0
cygwin-mount.el使うと少しは良いかも。
2015/09/04(金) 19:02:15.01ID:TxZyxqGk0
>>161
cygwin-mount.el を使えば、シェルコマンドを利用して
その結果を emacs の環境変数に書き込んだりする
パッケージ(exec-path-from-shellとか)でも問題なく使えたりするのかな?
2015/09/04(金) 19:55:35.55ID:T5sh+NNV0
cygwin-mount.elはcygwinのマウントポイントを意識してcygwin->winのパスの
変換をしてくれます。cygwin-mount.elを設定して、
(expand-file-name "cygwinのパス")
を色々やってみると、やってくれていることがなんとなく分かると思います。
これは、emacs lispのMagicという仕組みを使っているようです。
で、exec-path-from-shellについては使っていないので分からないのですが、
恐らくそのままでは使えないのでしょうか。advice等で調整すれば動くように
なるかもしれません。
2015/09/04(金) 19:58:32.47ID:T5sh+NNV0
gnupack-11.00の仕組みを使うと、gnupackの起動ファイルでPATHの設定等が
できて楽ちんです。cygwin-mount.elも入っていますね。
http://blechmusik.hatenablog.jp/entry/2014/11/14/002259
2015/09/04(金) 21:02:26.38ID:TxZyxqGk0
>>164 色々とありがとうございます。cygwin-mount.el 便利そうですね
環境変数周りも cygwin-mount.el で対応できるなら使いたい
ただ、cygwin フォークの msys2 を使っているので
cygwin-mount.el をそのままだと使えないんです(パスのプレフィックス等が変わっているため)
なのでちょっと面倒ですが >>160 の cygpath を使って
win ←→ unix の path 変換が必要なパッケージに対して
該当部分を advice で修正ってのをやってます。
2015/09/04(金) 21:43:31.18ID:JpiFvrC40
cygwin-mount ってパスのプリフィクス mount の戻り値から取ってなかったっけ
自分はマウントポイント変更して /cygdrive/c じゃなく /mnt/c に変えて cygwin 使ってるけど cygwin-mount 問題なく使えてるよ。
もっとも msys2 はコンパイルの時ぐらいしか使ってないから根本的になにか勘違いしてるかもしれないのであしからず。
167>>165
垢版 |
2015/09/04(金) 22:12:54.85ID:iErS8UcW0
>>166
自分もちょっと勘違いしているかもしれないので
cygwin-mount.el 試してみます
2015/09/04(金) 22:53:47.81ID:iErS8UcW0
cygwin-mount.el、msys2 でも使えました。ロードの順番をミスっていたみたいです。
ただ、cygpath のときと同様に advice 等での調整は必要みたいです。
2015/09/04(金) 22:58:56.14ID:T5sh+NNV0
cygwin-mountを使ったほうが、都度プロセスを起動しないだろうし、
色々な場面で裏でパスの変換をしてくれるからいいと思うよ。
2015/09/04(金) 23:57:03.31ID:iErS8UcW0
cygwin-mount.el を使うと、unux → win の path 変換は簡単にできるのですが
逆に win → unix の path 変換ってどうすればできますか
2015/09/05(土) 06:18:39.45ID:zpJz8pKX0
msys2やcygwinではwindows形式のパスを認識するのであまりwin->unixの変換を
することはないけど、やはり行うとするとcygpathを使うことになるのでないかなぁ。
ちなみに、cygwin版emacsではcygwin-mount.elの逆の機能をもつwindows-path.el
というものがあります。これはcygwin-mount.elを内部で使ってはいるんですが、
一緒にactivateすることはできないものと思います。
2015/09/05(土) 06:21:22.84ID:zpJz8pKX0
もう一つ。cygwin版のemacsだと以下の関数が使えます。
cygwin-convert-file-name-from-windows
cygwin-convert-file-name-to-windows
でもMinGW版のemacsでは使えないようです。
2015/09/05(土) 13:58:18.01ID:RZ+CalpO0
ID:zpJz8pKX0 ありがとう
msys2 版の gnu global(gtags) が unix 形式の path しか受け付けないので
win → unix の変換が必要な場合があります。(win版 gnu global を使えばいいって話ですが)

windows-path.el と cygwin-mount.el を一緒に activate すると盛大に事故りそうですね
なので、windows-path.el を active にしないで
windows-path で定義されている windows-path-convert-file-name を呼び出して
cygwin-convert-file-name-from-windows みたいに使うってのを考えてます
2015/09/05(土) 14:56:36.97ID:zpJz8pKX0
古いadviceの書き方で申し訳ないけどexec-path-from-shellは考えてみたよ。NTEmacs+Cygwinだと動きます。

(defadvice exec-path-from-shell-setenv (around ad-exec-path-from-shell-setenv activate)
(let ((path-separator ":"))
ad-do-it
(when (string= (ad-get-arg 0) "PATH")
(setenv (ad-get-arg 0) (mapconcat (lambda (arg) (replace-regexp-in-string "/" "\\\\" arg))
(parse-colon-path value) ";")))))

(defadvice exec-path-from-shell-printf (around ad-exec-path-from-shell-printf activate)
(cl-letf (((symbol-function 'executable-find)
(symbol-function 'identity)))
(let ((exec-path-from-shell-arguments '("-l")))
ad-do-it)))

(exec-path-from-shell-initialize)
2015/09/05(土) 15:29:43.39ID:RZ+CalpO0
自分はこんな感じにしてます

(defun ad-exec-path-from-shell-setenv (orig-fun &rest args)
(when (string= (nth 0 args) "PATH")
(let (win_path)
(dolist (path (split-string (nth 1 args) ":"))
(setq win_path (concat win_path (expand-file-name path) ";")))
(setcar (nthcdr 1 args) win_path)))
(apply orig-fun args))
(advice-add 'exec-path-from-shell-setenv :around 'ad-exec-path-from-shell-setenv)
2015/09/05(土) 16:14:51.18ID:zpJz8pKX0
新しいadviceの方がエレガントですね。24.3も無くなったので覚えようかな。
あと、>>174に間違いがありました。
(parse-colon-path value) -> (parse-colon-path (ad-get-arg 1))
でもvalueでも動くんですね。
2015/09/05(土) 17:05:22.22ID:RZ+CalpO0
個人的には、新 advice の方が分かりやすいと思います
また、byte-compile した時も、旧 advice は 無名関数に展開されて
最適化が今一つでしたが、新 advice は 処理部分を関数に独立させるので
うまく byte-compile できるかなと思ってます
2015/09/05(土) 17:54:18.66ID:RZ+CalpO0
win → unix の path 変換ですが
cygwin-mount.el の cygwin-mount-substitute-longest-mount-name を
少し変更するだけでうまくいきました

(defun windows-path-substitute-longest-mount-name (name)
"Substitute NAME with mount device or return NAME."
(and name
(save-match-data
(let ((mounts cygwin-mount-table--internal)
(len (length (file-name-as-directory name)))
match)
(while mounts
(let ((mount (file-name-as-directory (caar mounts))))
(and (>= len (length mount))
(string= mount
(file-name-as-directory
(substring (file-name-as-directory name)
0 (length mount))))
(or (null match)
(> (length (caar mounts)) (length (car match))))
(setq match (car mounts))))
(setq mounts (cdr mounts)))
(if match
(concat (file-name-as-directory (cdr match))
(if (>= (length (file-name-as-directory (car match))) len)
""
(substring name (length (file-name-as-directory (car match))))))
name)))))
2015/09/05(土) 23:25:07.04ID:zpJz8pKX0
>>176
新アドバイスの説明はここがわかりやすいですね。
http://g000001.cddddr.org/3623238000
ついでに汎変数の説明ページ。これ強力。
http://kawabata.github.io/blog/2013-03-14-general-variables.html
2015/09/17(木) 01:05:16.16ID:RH/e30Tl0
NTEmacs では process-file は遅いって以下のブログとか stackoverflow で紹介されてるけど
http://lambdasakura.hatenablog.com/entry/2013/03/22/000211
http://fujii.github.io/2014/02/13/emacs-magit-runs-too-slowly-on-windows/
http://stackoverflow.com/questions/21753418/why-is-process-file-git-slower-than-process-file-shell-command-git-on-em

自分の環境 (win7 NTEmacs 24.5.1 msys2) で試したところ process-file の方が高速だった。
(benchmark 10 '(call-process "git"))
"Elapsed time: 0.280801s"

(benchmark 10 '(process-file "git"))
"Elapsed time: 0.280801s"

(benchmark 10 '(process-file-shell-command "git"))
"Elapsed time: 0.374401s"

(benchmark 10 '(shell-command-to-string "git"))
"Elapsed time: 0.374401s"

これって 24.2 〜 24.5 の間でバグが修正されたってこと?
どこかに資料があれば教えてほしい
2015/09/19(土) 14:10:20.13ID:R1tfMSjT0
環境:Windows7, GNU Emacs 24.5.1 (x86_64-pc-mingw32) of 2015-04-14 on NTEMACS6
4

MIGEMOを使っているので、C-s, C-r を入力したらIMEをオフしたいです。
以下のサイトの通りにinit.elに書きましたが、IMEはオフになりません。
どのように設定すればよいか教えてください。

ttp://d.hatena.ne.jp/takehikom/20120318/1332016271
; [migemo]isearch で IME をオフにする
(wrap-function-to-control-ime 'isearch-forward t nil)
(wrap-function-to-control-ime 'isearch-forward-regexp t nil)
(wrap-function-to-control-ime 'isearch-backward t nil)
(wrap-function-to-control-ime 'isearch-backward-regexp t nil)
2015/09/19(土) 16:27:22.55ID:+I3rN2eB0
>>181
wrap-function-to-control-ime内の(ime-force-off)を(w32-ime-state-switch nil)に
置き換えたバージョンを再定義すればうまく行くよ

詳しくは知らんけどもはや(ime-force-off)単体じゃIMEを適切にオフに出来ないっぽい
2015/09/19(土) 18:32:50.19ID:c1moA2Pd0
>>181
ちょうど二日前、W32-IMEの設定を見直して以下にまとめてみていました。
http://www49.atwiki.jp/ntemacs/pages/45.html
ベストな設定ではないかとも思いますが、参考にしてください。
184181
垢版 |
2015/09/19(土) 22:34:40.96ID:R1tfMSjT0
>>182, 183
レスありがとうございます。
おかげさまで、MIGEMOが快適になりました!
185>>180
垢版 |
2015/09/20(日) 21:52:35.21ID:uwY68DvN0
自己解決。process-file の件は以下のバグでどうやら 24.4 で修正されてるみたい
GNU bug report logs - #18420 (http://debbugs.gnu.org/cgi/bugreport.cgi?bug=18420)
GNU bug report logs - #18626 (http://debbugs.gnu.org/cgi/bugreport.cgi?bug=18626)

GNU bug report logs - #18420 の修正内容
https://lists.gnu.org/archive/html/emacs-diffs/2014-09/msg00117.html
2015/09/22(火) 17:55:49.60ID:/8kDZ9Fj0
ntemacsの話では無いのですが、随分ググったりしたのですが、それらしい情報も無く、宜しくお願い致します。

moccur-grep-findのパスを複数指定する方法はありませんか?

grep-findだと、
find *.{cpp,h} ../../hoge/src2/*.{cpp,h} 〜みたいに出来たのですが、同じ様な事は可能でしょうか?
#moccur-editで一括変更出来て魅力なのですが、常に複数のパスに分かれた環境での開発が多くて…

宜しくお願いします。
2015/09/22(火) 22:35:03.73ID:dCSsQvYs0
>>186
>find *.{cpp,h} ../../hoge/src2/*.{cpp,h}
find の必要性がまるで感じられないのだが。
2015/09/22(火) 22:45:14.02ID:kaob2zWd0
Cygwin Win10 Emacs24.5+ime patchでGoogle日本語入力使った時、変換候補が画面に出ない。
Microsoft IMEだと出る。
変換候補を出す方法誰か知らない?
2015/09/22(火) 23:16:09.41ID:kaob2zWd0
>>188
自己レス
Emacs起動直後は出ないけど、
ウインドウを移動したり、サイズを変えると出る。
2015/09/23(水) 11:59:06.38ID:Ft+Rt2MJ0
これ試してみては?
http://blechmusik.hatenablog.jp/entry/2013/07/08/023920
もしくは、mozc経由で使うか。
2015/09/23(水) 12:42:49.76ID:TuSWW9fm0
>>190
ありがとう!
2015/11/07(土) 10:20:00.85ID:PVg9Gnvh0
Win8.1で >>2 の64bit版使っているんだけど、たまに漢字変換時にEmacsが致命的エラーで強制終了してしまう。同じ症状の人いる?回避策はあるんだろうか?
2015/11/07(土) 10:29:37.34ID:dH1s929F0
>>192
自分のとこでも起こってる。発生頻度が低く、仮にクラッシュしても recover-this-file で
大半は戻せるし、作業用の一時的なバッファは (メモリ上にとどめず) ファイルに保存して
しのいでる。 あとはEmacsのプロセスを分ける。 治せるならそうしてほしいけど。
2015/11/07(土) 12:15:48.31ID:rZYKkepA0
>>192
Win7でもWin10でも起きてる
generic-cpu版にしたら少し頻度が減る気がするけど気のせいかもしれない
2015/11/07(土) 12:55:20.56ID:tw9+s76g0
23.4最強伝説。
2015/11/07(土) 13:42:01.72ID:UYbEGxiy0
24.3ではなくて?
2015/11/08(日) 06:45:40.29ID:arOfbMoL0
23.4.1。自分はNTEmacs使ってるけど、24のビルドって色々面倒らしい。
2015/11/08(日) 18:20:37.68ID:KkOj3Tay0
emacs-mozc使っているからか、落ちることはまずない。
2015/11/09(月) 20:59:56.39ID:Bxz3gcp80
ボクんとこでも起こるからこんなコードで凌いでる。
(完全なオリジナルではないと思うけど出典がわからない。元ネタ提供者に感謝)

(defun my-autosave-ime-func()
"IMEをON/OFFするたびにセーブする"
(if (and (buffer-file-name)
(buffer-modified-p))
(basic-save-buffer)))

(add-hook 'input-method-activate-hook 'my-autosave-ime-func)
(add-hook 'input-method-inactivate-hook 'my-autosave-ime-func)
2015/11/18(水) 21:38:28.86ID:7urKIPwt0
結構頻繁に異常終了が起きていたので(仕事が波に乗ってキータッチが速くなると特に)、
http://cha.la.coocan.jp/doc/NTEmacs.html
で公開してくれている「簡易IME対応版」に切り替えた。
俺のPCだと cmdproxy.exe がエラーになるので、その辺りのバイナリだけ >>2 のをマージして使っている。

1週間くらい使ったが、今のところ異常終了はしていない。

「C-x k(全角)」とかも別個でキーバインド設定しなくちゃいけないので面倒だけど、異常終了にビクビクするよりかは全然マシ。
提供してくれた人に大変感謝!
2015/11/18(水) 23:17:14.17ID:nqCVDCka0
>>200
これ未確定文字のフォントが大きくなってしまうんだけど
回避策ある?
(set-frame-font "MS Gothic 9" t t)
ってやってるのに、未確定文字だけ14ポイントくらいの大きさ
2015/11/18(水) 23:40:16.43ID:QppqRbIM0
>>200
ここのバイナリ、異常終了しないけど、M-x grep で該当文字列があっても
検索ヒットせずにエラーにもならないんだけど何か設定必要なんでしょうか?
eshellではgrepが使えてます。
2015/11/19(木) 12:35:09.94ID:2jisHQtI0
>>201
自分のところではフォントが変わっているようには感じない。ちなみに以下のような設定。

(set-default-font "Inconsolata-11")
(set-face-font 'variable-pitch "Inconsolata-11")
(set-fontset-font (frame-parameter nil 'font)
'japanese-jisx0208
'("Takaoゴシック" . "unicode-bmp"))
(set-fontset-font (frame-parameter nil 'font)
'japanese-jisx0212
'("Takaoゴシック" . "unicode-bmp"))
(setq-default line-spacing 0)


>>202
eshellでgrep出来るとは知らなかった。大量にバッファを開いちゃうようで、ちょっと微妙だけど。
ちなみに俺はNTEmacsでのgrepは諦めていて、外部のGUIアプリを起動するだけにしている。
eshell/grepがバッファを開きっぱなしにしないようにできるなら即乗り換えるんだけど、誰かやり方知らない?
2015/11/19(木) 22:33:44.21ID:02py6KvK0
>>203
その設定でフォントは"MS Gothic 9"にしてみたけど特に変わらなかった
うちはgrepはできるんだけどな・・・
2015/11/24(火) 23:54:47.48ID:U0EECJfj0
以下の変更のせいらしいけどdierdでZを押しても圧縮/解凍できなくなった
msys2でビルドしているのだけれど平気な人いますか?
directory用のregexpで":"とかベタにコーディングしているので私の環境だとc:/〜とかで全部引っかかる
とりあえずdired-compress-file-suffixesをsetqしてごまかしているけどdirectoryの圧縮機能使ってみたい

2015-10-20 Oleh Krehel <ohwoeowho@gmail.com>
Update the way directories are compressed
* lisp/dired-aux.el (dired-compress-file-suffixes): Update the recipe
for *.tar.gz decompression to use a pipe.
Add an entry for the default directory compression (to *.tar.g).
2015/11/26(木) 19:33:11.11ID:fHhDv4Yy0
>>205
開発版の事とか分からんが":"じゃなくて":\\'"なんだろうな
(2chでちゃんと表示されるかな…念の為全角で書くと”:¥¥’”)
2015/11/26(木) 20:15:13.83ID:H1OOzziS0
>>206
使ってる側がこれだから…やっつけすぎ
(if (file-directory-p file)
(progn
(setq suffix (cdr (assoc ":" dired-compress-file-suffixes)))
(when suffix
2015/11/26(木) 20:58:04.42ID:fHhDv4Yy0
>>207
お前こそdired使った事ないだろ
Diredの一番上に
c:/Hoge: (←Widnowsではこうだが Linux だと /Hoge/dir: になる)
という行があってそこでZを押すんだよ
それ以外の行ではマッチしないから何もしない
問題はsuffix以外を取り出すときにcになってしまうっていうバグだよ
まったく糞ムカつく野郎だな
2015/11/26(木) 21:05:03.16ID:fHhDv4Yy0
>>207
Linuxじゃちゃんと動いてんだよ
NTEmacs固有の問題でパッチ作成した人がc:/に気付いてないっていう問題
何なんだその糞コード
210207
垢版 |
2015/11/27(金) 00:02:45.74ID:F48qAS3A0
なんか怒られた…?
>>208の'一番上の行'は知らなかったので試してみたらNo file on this lineって言われた
207のコードは開発版のdired-auxのもので一覧中のdirectoryを圧縮するためのものの一部なので念のため
linuxで一番上の行のが動いているのなら>>206の改修を207のところも含めて入れてもらうのがいいのかな

ついでにもう一つ気づいたこと
foo/hoge/
foo/bar/hoge/
というディレクトリ構成でbarをdiredで表示してhogeをR(dired-do-rename)で../すると
foo/hoge/hoge/に移動してしまう
foo/hogeが存在しない状態ならfoo/hogeに普通に移動するし
C(dired-do-copy)ならfoo/hogeにbar/hogeの中身が正しくコピーされる
linuxでは大丈夫なのだろうか
2016/01/08(金) 06:40:56.77ID:Zbts2muM0
ここでいいかわからないのですが,他に見つけられなかったので質問します.
板違いなどであれば適切な板などを教えてください.

Linux Mint 17.3 上で emacs24 を利用しています.
やりたいことは
YaTeX1.78 を用いていて TeX ソースの平文において C-c C-g を行うと
その場所に対応する PDF ファイルの該当箇所に移動するということを
日本語のディレクトリおよび日本語のファイル名でも行いたいということです.

fwdevince は http://oku.edu.mie-u.ac.jp/~okumura/texwiki/?Evince%2Ffwdevince%2FPython に従って ~/bin に作成し実行権限も与えています.

C-c C-g において YaTeX では fwdevince に対して「PDF ファイル名 + 行番号 + TeXソース名」を与えるのですが TeX ソース名が yatexprc.el の YaTeX-preview-jump-line 関数において (cf (file-relative-name (buffer-file-name) pdir)) と与えられており,
これを (cf (buffer-file-name)) に修正することで日本語を含むパスおよびファイル名でも C-c C-g でちゃんと移動できるところまで調べました.

しかし,配布されている yatexprc.el そのものを修正するのではなく init.el で対応しようと思うのですが,如何せんニワカemacs使いのため yatex.el を読み込んだ後に修正した YaTeX-preview-jump-line 関数を読み込むという術を知りません.

emacs で *.tex を読み込むと yatex.el を読み込むという設定はできています.その後に修正した YaTeX-preview-jump-line 関数を読み込むにはどうしたらよいでしょうか?アドヴァイスお願いします.
■ このスレッドは過去ログ倉庫に格納されています
大学生アイラと影の怪物と戦うリョウが、深夜3時3分の静止した世界で交錯する超常スリラーの概要

ニューススポーツなんでも実況